From e04ba637e5bf1fde097dd48d6458703dd6834706 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=A0=D1=83=D1=81=D0=BB=D0=B0=D0=BD=20=D0=98=D0=B6=D0=B1?= =?UTF-8?q?=D1=83=D0=BB=D0=B0=D1=82=D0=BE=D0=B2?= Date: Tue, 3 Jul 2018 23:01:07 +0000 Subject: [PATCH] Use GetUserDefaultUILanguage instead of GetThreadLocale GetThreadLocale() returns the user-chosen "Format" language, not the UI language of the operating system. Use the GetUserDefaultUILanguage() for that instead, when the category being queried for the default locale name is LC_MESSAGES. --- gettext-runtime/intl/dcigettext.c | 2 +- gettext-runtime/intl/gettextP.h | 2 ++ gettext-runtime/intl/localename.c | 20 ++++++++++++++++++-- gettext-runtime/intl/setlocale.c | 12 ++++++------ 4 files changed, 27 insertions(+), 9 deletions(-) diff --git a/gettext-runtime/intl/dcigettext.c b/gettext-runtime/intl/dcigettext.c index eabf9ee..cd76066 100644 --- a/gettext-runtime/intl/dcigettext.c +++ b/gettext-runtime/intl/dcigettext.c @@ -1566,7 +1566,7 @@ guess_category_value (int category, const char *categoryname) locale = _nl_locale_name_posix (category, categoryname); if (locale == NULL) { - locale = _nl_locale_name_default (); + locale = _nl_locale_name_default_for_category (category); locale_defaulted = 1; } } diff --git a/gettext-runtime/intl/gettextP.h b/gettext-runtime/intl/gettextP.h index 0d7dbd6..78280ba 100644 --- a/gettext-runtime/intl/gettextP.h +++ b/gettext-runtime/intl/gettextP.h @@ -251,6 +251,8 @@ extern const char *_nl_locale_name_environ (int category, const char *categoryname); # define gl_locale_name_default _nl_locale_name_default extern const char *_nl_locale_name_default (void); +# define gl_locale_name_default_for_category _nl_locale_name_default_for_category +extern const char *_nl_locale_name_default_for_category (int caterogy); # define gl_locale_name _nl_locale_name /* extern const char *_nl_locale_name (int category, const char *categoryname); */ diff --git a/gettext-runtime/intl/localename.c b/gettext-runtime/intl/localename.c index c9415c9..70932c4 100644 --- a/gettext-runtime/intl/localename.c +++ b/gettext-runtime/intl/localename.c @@ -2888,7 +2888,7 @@ gl_locale_name_environ (int category, const char *categoryname) } const char * -gl_locale_name_default (void) +gl_locale_name_default_for_category (int category) { /* POSIX:2001 says: "All implementations shall define a locale as the default locale, to be @@ -2974,6 +2974,16 @@ gl_locale_name_default (void) # endif # if defined WINDOWS_NATIVE || defined __CYGWIN__ /* Native Windows or Cygwin */ + if (category == LC_MESSAGES) + { + LANGID langid; + + /* Use native Windows API UI language ID. */ + langid = GetUserDefaultUILanguage (); + + return gl_locale_name_from_win32_LANGID (langid); + } + else { LCID lcid; @@ -2986,6 +2996,12 @@ gl_locale_name_default (void) #endif } +const char * +gl_locale_name_default () +{ + return gl_locale_name_default_for_category (LC_CTYPE); +} + /* Determine the current locale's name, and canonicalize it into XPG syntax address@hidden The codeset part in the result is not reliable; the locale_charset() @@ -3005,5 +3021,5 @@ gl_locale_name (int category, const char *categoryname) if (retval != NULL) return retval; - return gl_locale_name_default (); + return gl_locale_name_default_for_category (category); } diff --git a/gettext-runtime/intl/setlocale.c b/gettext-runtime/intl/setlocale.c index df19918..2ed9adf 100644 --- a/gettext-runtime/intl/setlocale.c +++ b/gettext-runtime/intl/setlocale.c @@ -850,7 +850,7 @@ libintl_setlocale (int category, const char *locale) base_name = gl_locale_name_environ (LC_CTYPE, category_to_name (LC_CTYPE)); if (base_name == NULL) - base_name = gl_locale_name_default (); + base_name = gl_locale_name_default_for_category (LC_CTYPE); if (setlocale_unixlike (LC_ALL, base_name) == NULL) goto fail; @@ -870,7 +870,7 @@ libintl_setlocale (int category, const char *locale) name = gl_locale_name_environ (cat, category_to_name (cat)); if (name == NULL) - name = gl_locale_name_default (); + name = gl_locale_name_default_for_category (cat); /* If name is the same as base_name, it has already been set through the setlocale call before the loop. */ @@ -900,7 +900,7 @@ libintl_setlocale (int category, const char *locale) const char *name = gl_locale_name_environ (category, category_to_name (category)); if (name == NULL) - name = gl_locale_name_default (); + name = gl_locale_name_default_for_category (category); result = setlocale_single (category, name); if (result != NULL) @@ -991,7 +991,7 @@ libintl_newlocale (int category_mask, const char *locale, locale_t base) base_name = gl_locale_name_environ (LC_CTYPE, category_to_name (LC_CTYPE)); if (base_name == NULL) - base_name = gl_locale_name_default (); + base_name = gl_locale_name_default_for_category (LC_CTYPE); base = newlocale (LC_ALL_MASK, base_name, base); if (base == NULL) @@ -1006,7 +1006,7 @@ libintl_newlocale (int category_mask, const char *locale, locale_t base) name = gl_locale_name_environ (category, category_to_name (category)); if (name == NULL) - name = gl_locale_name_default (); + name = gl_locale_name_default_for_category (category); /* If name is the same as base_name, it has already been set through the setlocale call before the loop. */ @@ -1037,7 +1037,7 @@ libintl_newlocale (int category_mask, const char *locale, locale_t base) name = gl_locale_name_environ (cat, category_to_name (cat)); if (name == NULL) - name = gl_locale_name_default (); + name = gl_locale_name_default_for_category (cat); copy = newlocale (cat_mask, name, base); if (copy == NULL) -- 2.4.0