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); }