From 05dcd3b18056677663dc06da5d407d61b6ff354e Mon Sep 17 00:00:00 2001 From: Mikkel Krautz Date: Tue, 24 Jun 2008 23:28:24 +0000 Subject: [PATCH] Use OS X system langauge instead of locale data for translation determination. (Fixes bug #1952855: Mac: Mumble uses wrong language setting) git-svn-id: https://mumble.svn.sourceforge.net/svnroot/mumble/trunk@1178 05730e5d-ab1b-0410-a4ac-84af385074fa --- src/mumble/main.cpp | 14 ++++++++++++-- src/mumble/os_macx.cpp | 20 ++++++++++++++++++++ 2 files changed, 32 insertions(+), 2 deletions(-) diff --git a/src/mumble/main.cpp b/src/mumble/main.cpp index 7544463b4..6016f66e5 100644 --- a/src/mumble/main.cpp +++ b/src/mumble/main.cpp @@ -54,6 +54,7 @@ void throw_exception(std::exception const &) { extern void os_init(); extern char *os_url; +extern char *os_lang; int main(int argc, char **argv) { int res; @@ -138,9 +139,18 @@ int main(int argc, char **argv) { QDir::addSearchPath(QLatin1String("translation"), a.applicationDirPath()); QDir::addSearchPath(QLatin1String("translation"), QLatin1String(":/")); - qWarning("Locale is %s", qPrintable(QLocale::system().name())); + QString qsSystemLocale = QLocale::system().name(); - QString locale = g.s.qsLanguage.isEmpty() ? QLocale::system().name() : g.s.qsLanguage; +#ifdef Q_OS_MAC + if (os_lang) { + qWarning("Using Mac OS X system langauge as locale name"); + qsSystemLocale = QString(os_lang); + } +#endif + + qWarning("Locale is %s", qPrintable(qsSystemLocale)); + + QString locale = g.s.qsLanguage.isEmpty() ? qsSystemLocale : g.s.qsLanguage; QTranslator translator; translator.load(QLatin1String("translation:mumble_") + locale); diff --git a/src/mumble/os_macx.cpp b/src/mumble/os_macx.cpp index 4ae38013d..9106baeca 100644 --- a/src/mumble/os_macx.cpp +++ b/src/mumble/os_macx.cpp @@ -39,6 +39,7 @@ #include "Global.h" char *os_url = NULL; +char *os_lang = NULL; static FILE *fConsole = NULL; static OSErr urlCallback(const AppleEvent *ae, AppleEvent *, long) { @@ -102,6 +103,20 @@ static void mumbleMessageOutput(QtMsgType type, const char *msg) { } } +void query_language() { + CFPropertyListRef cfaLangs; + CFStringRef cfsLang; + static char lang[16]; + + cfaLangs = CFPreferencesCopyAppValue(CFSTR("AppleLanguages"), kCFPreferencesCurrentApplication); + cfsLang = (CFStringRef) CFArrayGetValueAtIndex((CFArrayRef)cfaLangs, 0); + + if (! CFStringGetCString(cfsLang, lang, 16, kCFStringEncodingUTF8)) + return; + + os_lang = lang; +} + void os_init() { const char *home = getenv("HOME"); const char *path = "/Library/Preferences/Mumble/"; @@ -121,6 +136,11 @@ void os_init() { qInstallMsgHandler(mumbleMessageOutput); } + /* Query for language setting. OS X's LANG environment variable is determined from the region selected + * in SystemPrefs -> International -> Formats -> Region instead of the system language. We override this + * by always using the system langauge, to get rid of all sorts of nasty langauge inconsistencies. */ + query_language(); + /* Install Apple Event handler for GURL events. This intercepts any URLs set in Mumble's Info.plist. */ AEInstallEventHandler(kInternetEventClass, kAEGetURL, NewAEEventHandlerUPP(urlCallback), 0, false); }