[Scummvm-cvs-logs] scummvm master -> e3d7606188cfa6896da562bd70541a8aff5561b6

criezy criezy at scummvm.org
Tue Oct 4 01:01:25 CEST 2011


This automated email contains information about 1 new commit which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .

Summary:
e3d7606188 MACOSX: Detect system preferred language when starting bundle


Commit: e3d7606188cfa6896da562bd70541a8aff5561b6
    https://github.com/scummvm/scummvm/commit/e3d7606188cfa6896da562bd70541a8aff5561b6
Author: Thierry Crozat (criezy at scummvm.org)
Date: 2011-10-03T15:53:22-07:00

Commit Message:
MACOSX: Detect system preferred language when starting bundle

This reimplement getSystemLanguage() for MacOS X because
setlocale() only works if the application is started from the terminal.
Instead we use CFBundleCopyPreferredLocalizationsFromArray() which
requires the translations to be listed in the bundle plist file (this had
already been committed). This fixes bug #3394080.

Changed paths:
    backends/platform/sdl/macosx/macosx.cpp
    backends/platform/sdl/macosx/macosx.h



diff --git a/backends/platform/sdl/macosx/macosx.cpp b/backends/platform/sdl/macosx/macosx.cpp
index d9de4e5..639bd98 100644
--- a/backends/platform/sdl/macosx/macosx.cpp
+++ b/backends/platform/sdl/macosx/macosx.cpp
@@ -118,4 +118,51 @@ bool OSystem_MacOSX::displayLogFile() {
 	return err != noErr;
 }
 
+Common::String OSystem_MacOSX::getSystemLanguage() const {
+#if defined(USE_DETECTLANG) && defined(USE_TRANSLATION)
+	CFArrayRef availableLocalizations = CFBundleCopyBundleLocalizations(CFBundleGetMainBundle());
+	if (availableLocalizations) {
+		CFArrayRef preferredLocalizations = CFBundleCopyPreferredLocalizationsFromArray(availableLocalizations);
+		CFRelease(availableLocalizations);
+		if (preferredLocalizations) {
+			CFIndex localizationsSize = CFArrayGetCount(preferredLocalizations);
+			// Since we have a list of sorted preferred localization, I would like here to
+			// check that they are supported by the TranslationManager and take the first
+			// one that is supported. The listed localizations are taken from the Bundle
+			// plist file, so they should all be supported, unless the plist file is not
+			// synchronized with the translations.dat file. So this is not really a big
+			// issue. And because getSystemLanguage() is called from the constructor of
+			// TranslationManager (therefore before the instance pointer is set), calling
+			// TransMan here results in an infinite loop and creation of a lot of TransMan
+			// instances.
+			/*
+			for (CFIndex i = 0 ; i < localizationsSize ; ++i) {
+				CFStringRef language = (CFStringRef)CFArrayGetValueAtIndex(preferredLocalizations, i);
+				char buffer[10];
+				CFStringGetCString(language, buffer, 50, kCFStringEncodingASCII);
+				int32 languageId = TransMan.findMatchingLanguage(buffer);
+				if (languageId != -1) {
+					CFRelease(preferredLocalizations);
+					return TransMan.getLangById(languageId);
+				}
+			}
+			*/
+			if (localizationsSize > 0) {
+				CFStringRef language = (CFStringRef)CFArrayGetValueAtIndex(preferredLocalizations, 0);
+				char buffer[10];
+				CFStringGetCString(language, buffer, 50, kCFStringEncodingASCII);
+				CFRelease(preferredLocalizations);
+				return buffer;
+			}
+			CFRelease(preferredLocalizations);
+		}
+		
+	}
+	// Falback to POSIX implementation
+	return OSystem_POSIX::getSystemLanguage();
+#else // USE_DETECTLANG
+	return OSystem_POSIX::getSystemLanguage();
+#endif // USE_DETECTLANG
+}
+
 #endif
diff --git a/backends/platform/sdl/macosx/macosx.h b/backends/platform/sdl/macosx/macosx.h
index 86c7029..4837e64 100644
--- a/backends/platform/sdl/macosx/macosx.h
+++ b/backends/platform/sdl/macosx/macosx.h
@@ -32,6 +32,8 @@ public:
 	virtual bool hasFeature(Feature f);
 
 	virtual bool displayLogFile();
+	
+	virtual Common::String getSystemLanguage() const;
 
 	virtual void initBackend();
 	virtual void addSysArchivesToSearchSet(Common::SearchSet &s, int priority = 0);






More information about the Scummvm-git-logs mailing list