summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlan Third <alan@idiocy.org>2016-02-10 18:27:50 -0800
committerPaul Eggert <eggert@cs.ucla.edu>2016-02-10 18:36:04 -0800
commiteb4a18c7db2286bcb9d9ea8f392175a28a86772c (patch)
treeb1dabf5c65d2fe69a9bc18f2eb9ee1f0d5b8e7c9
parent456c0a3137bf58ee61a8e442cff0ca5d808e8d32 (diff)
downloademacs-eb4a18c7db2286bcb9d9ea8f392175a28a86772c.tar.gz
Set locale when run from OS X GUI
* src/emacs.c (main): Call ns_init_locale. * src/nsterm.m (ns_init_locale): Get locale from OS and set LANG. * src/nsterm.h: Include ns_init_locale.
-rw-r--r--src/emacs.c5
-rw-r--r--src/nsterm.h2
-rw-r--r--src/nsterm.m21
3 files changed, 28 insertions, 0 deletions
diff --git a/src/emacs.c b/src/emacs.c
index e3cfad0f7f8..ab5d777aa2e 100644
--- a/src/emacs.c
+++ b/src/emacs.c
@@ -1310,6 +1310,11 @@ Using an Emacs configured with --with-x-toolkit=lucid does not have this problem
init_ntproc (dumping); /* must precede init_editfns. */
#endif
+#ifdef HAVE_NS
+ /* Initialise the locale from user defaults. */
+ ns_init_locale();
+#endif
+
/* Initialize and GC-protect Vinitial_environment and
Vprocess_environment before set_initial_environment fills them
in. */
diff --git a/src/nsterm.h b/src/nsterm.h
index 6ca584e6774..fa5399c7f90 100644
--- a/src/nsterm.h
+++ b/src/nsterm.h
@@ -1141,6 +1141,8 @@ extern void ns_retain_object (void *obj);
extern void *ns_alloc_autorelease_pool (void);
extern void ns_release_autorelease_pool (void *);
extern const char *ns_get_defaults_value (const char *key);
+extern void ns_init_locale (void);
+
/* in nsmenu */
extern void update_frame_tool_bar (struct frame *f);
diff --git a/src/nsterm.m b/src/nsterm.m
index f77aadba67c..43d1377f8a7 100644
--- a/src/nsterm.m
+++ b/src/nsterm.m
@@ -586,6 +586,27 @@ ns_load_path (void)
void
+ns_init_locale (void)
+/* OS X doesn't set any environment variables for the locale when run
+ from the GUI. Get the locale from the OS and set LANG. */
+{
+ NSLocale *locale = [NSLocale currentLocale];
+
+ NSTRACE ("ns_init_locale");
+
+ @try
+ {
+ /* Set LANG to locale, but not if LANG is already set. */
+ setenv("LANG", [[locale localeIdentifier] UTF8String], 0);
+ }
+ @catch (NSException *e)
+ {
+ NSLog (@"Locale detection failed: %@: %@", [e name], [e reason]);
+ }
+}
+
+
+void
ns_release_object (void *obj)
/* --------------------------------------------------------------------------
Release an object (callable from C)