diff --git a/src/backend/utils/adt/pg_locale.c b/src/backend/utils/adt/pg_locale.c
index a3dc3be5a8..2548f6bbd2 100644
--- a/src/backend/utils/adt/pg_locale.c
+++ b/src/backend/utils/adt/pg_locale.c
@@ -216,6 +216,11 @@ pg_perm_setlocale(int category, const char *locale)
 			envvar = "LC_MESSAGES";
 			envbuf = lc_messages_envbuf;
 #ifdef WIN32
+			/*
+			 * Use LANGUAGE instead of LC_MESSAGES since Windows doesn't support
+			 * LC_MESSAGES environment variable.
+			 */
+			envvar = "LANGUAGE";
 			result = IsoLocaleName(locale);
 			if (result == NULL)
 				result = (char *) locale;
diff --git a/src/test/regress/pg_regress.c b/src/test/regress/pg_regress.c
index a1ee1041b4..631f31729e 100644
--- a/src/test/regress/pg_regress.c
+++ b/src/test/regress/pg_regress.c
@@ -760,6 +760,13 @@ initialize_environment(void)
 	unsetenv("LANGUAGE");
 	unsetenv("LC_ALL");
 	putenv("LC_MESSAGES=C");
+#ifdef WIN32
+	/*
+	 * Use LANGUAGE instead of LC_MESSAGES since Windows doesn't support
+	 * LC_MESSAGES environment variable.
+	 */
+	putenv("LANGUAGE=C");
+#endif
 
 	/*
 	 * Set encoding as requested