aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMarco Hinz <mh.codebro+github@gmail.com>2018-12-11 21:58:35 +0100
committerJustin M. Keyes <justinkz@gmail.com>2018-12-11 21:58:35 +0100
commit57acfceabeb349377ce244de9b67732b21ed1d18 (patch)
treea0eabb5eec7e016d4e1090f64c678bef74e8f230 /src
parent5a90761e8a6365156e10be7ad5825c8f7f2f2dfb (diff)
downloadrneovim-57acfceabeb349377ce244de9b67732b21ed1d18.tar.gz
rneovim-57acfceabeb349377ce244de9b67732b21ed1d18.tar.bz2
rneovim-57acfceabeb349377ce244de9b67732b21ed1d18.zip
macOS: infer primary language if $LANG is empty #9345
The macOS preferences have a section called `Language & Region`. There is always at least one language defined, the primary language. CFLocaleCopyPreferredLanguages() returns the languages defined in that section, the first element being the primary language. Use the primary language in case CFLocaleCopyCurrent() returns NULL. In the case that the above fallback does not work either, which is very unlikely, log the error and continue with an empty $LANG. References #9134
Diffstat (limited to 'src')
-rw-r--r--src/nvim/os/lang.c29
1 files changed, 23 insertions, 6 deletions
diff --git a/src/nvim/os/lang.c b/src/nvim/os/lang.c
index 6b2a54ddbe..900cd1f53a 100644
--- a/src/nvim/os/lang.c
+++ b/src/nvim/os/lang.c
@@ -17,14 +17,31 @@ 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();
- CFTypeRef cf_lang_region = CFLocaleGetValue(cf_locale,
- kCFLocaleIdentifier);
- CFRetain(cf_lang_region);
- CFRelease(cf_locale);
+ 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;
+ }
+ }
- const char *lang_region = CFStringGetCStringPtr(cf_lang_region,
- kCFStringEncodingUTF8);
if (lang_region) {
os_setenv("LANG", lang_region, true);
} else {