aboutsummaryrefslogtreecommitdiff
path: root/src/nvim/os/lang.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/nvim/os/lang.c')
-rw-r--r--src/nvim/os/lang.c34
1 files changed, 28 insertions, 6 deletions
diff --git a/src/nvim/os/lang.c b/src/nvim/os/lang.c
index 6b2a54ddbe..108a9c6c39 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 {
@@ -37,6 +54,11 @@ void lang_init(void)
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