diff options
author | Josh Rahm <rahm@google.com> | 2022-07-18 19:37:18 +0000 |
---|---|---|
committer | Josh Rahm <rahm@google.com> | 2022-07-18 19:37:18 +0000 |
commit | 308e1940dcd64aa6c344c403d4f9e0dda58d9c5c (patch) | |
tree | 35fe43e01755e0f312650667004487a44d6b7941 /src/nvim/os/lang.c | |
parent | 96a00c7c588b2f38a2424aeeb4ea3581d370bf2d (diff) | |
parent | e8c94697bcbe23a5c7b07c292b90a6b70aadfa87 (diff) | |
download | rneovim-308e1940dcd64aa6c344c403d4f9e0dda58d9c5c.tar.gz rneovim-308e1940dcd64aa6c344c403d4f9e0dda58d9c5c.tar.bz2 rneovim-308e1940dcd64aa6c344c403d4f9e0dda58d9c5c.zip |
Merge remote-tracking branch 'upstream/master' into rahm
Diffstat (limited to 'src/nvim/os/lang.c')
-rw-r--r-- | src/nvim/os/lang.c | 60 |
1 files changed, 15 insertions, 45 deletions
diff --git a/src/nvim/os/lang.c b/src/nvim/os/lang.c index b63faacaae..28f43ff3af 100644 --- a/src/nvim/os/lang.c +++ b/src/nvim/os/lang.c @@ -3,9 +3,10 @@ #ifdef __APPLE__ # define Boolean CFBoolean // Avoid conflict with API's Boolean -# include <CoreFoundation/CFLocale.h> -# include <CoreFoundation/CFString.h> +# define FileInfo CSFileInfo // Avoid conflict with API's Fileinfo +# include <CoreServices/CoreServices.h> # undef Boolean +# undef FileInfo #endif #include "auto/config.h" @@ -21,55 +22,24 @@ void lang_init(void) { #ifdef __APPLE__ if (os_getenv("LANG") == NULL) { - const char *lang_region = NULL; - CFTypeRef cf_lang_region = NULL; - - CFLocaleRef cf_locale = CFLocaleCopyCurrent(); - if (cf_locale) { - cf_lang_region = CFLocaleGetValue(cf_locale, kCFLocaleIdentifier); - CFRetain(cf_lang_region); - lang_region = CFStringGetCStringPtr(cf_lang_region, - kCFStringEncodingUTF8); - CFRelease(cf_locale); - } else { - // Use the primary language defined in Preferences -> Language & Region - CFArrayRef cf_langs = CFLocaleCopyPreferredLanguages(); - if (cf_langs && CFArrayGetCount(cf_langs) > 0) { - cf_lang_region = CFArrayGetValueAtIndex(cf_langs, 0); - CFRetain(cf_lang_region); - CFRelease(cf_langs); - lang_region = CFStringGetCStringPtr(cf_lang_region, - kCFStringEncodingUTF8); - } else { - ELOG("$LANG is empty and your primary language cannot be inferred."); - return; - } - } - char buf[50] = { 0 }; - bool set_lang; - if (lang_region) { - set_lang = true; - xstrlcpy(buf, lang_region, sizeof(buf)); - } else { - set_lang = CFStringGetCString(cf_lang_region, buf, 40, - kCFStringEncodingUTF8); - } - if (set_lang) { + + // $LANG is not set, either because it was unset or Nvim was started + // from the Dock. Query the system locale. + if (LocaleRefGetPartString(NULL, + kLocaleLanguageMask | kLocaleLanguageVariantMask | + kLocaleRegionMask | kLocaleRegionVariantMask, + sizeof(buf) - 10, buf) == noErr && *buf) { if (strcasestr(buf, "utf-8") == NULL) { xstrlcat(buf, ".UTF-8", sizeof(buf)); } os_setenv("LANG", buf, true); + setlocale(LC_ALL, ""); + // Make sure strtod() uses a decimal point, not a comma. + setlocale(LC_NUMERIC, "C"); + } else { + ELOG("$LANG is empty and the macOS primary language cannot be inferred."); } - CFRelease(cf_lang_region); -# ifdef HAVE_LOCALE_H - setlocale(LC_ALL, ""); - -# ifdef LC_NUMERIC - // Make sure strtod() uses a decimal point, not a comma. - setlocale(LC_NUMERIC, "C"); -# endif -# endif } #endif } |