diff options
| author | Jordi Vilalta Prat | 2010-12-01 12:23:37 +0000 | 
|---|---|---|
| committer | Jordi Vilalta Prat | 2010-12-01 12:23:37 +0000 | 
| commit | 0fc6a9bb4568c10e35019cd0928f641202808ed2 (patch) | |
| tree | 8b311112ff545f88475d3870d723e901c3c9f86a /backends | |
| parent | e2282e48163030f7c910ccb88921a7d5b9fe4748 (diff) | |
| download | scummvm-rg350-0fc6a9bb4568c10e35019cd0928f641202808ed2.tar.gz scummvm-rg350-0fc6a9bb4568c10e35019cd0928f641202808ed2.tar.bz2 scummvm-rg350-0fc6a9bb4568c10e35019cd0928f641202808ed2.zip  | |
WII: Add system language auto-detection.
svn-id: r54697
Diffstat (limited to 'backends')
| -rw-r--r-- | backends/platform/wii/osystem.cpp | 81 | ||||
| -rw-r--r-- | backends/platform/wii/osystem.h | 5 | 
2 files changed, 82 insertions, 4 deletions
diff --git a/backends/platform/wii/osystem.cpp b/backends/platform/wii/osystem.cpp index c3f350440f..950afbb3ba 100644 --- a/backends/platform/wii/osystem.cpp +++ b/backends/platform/wii/osystem.cpp @@ -21,6 +21,7 @@  #include <unistd.h> +#include <ogc/conf.h>  #include <ogc/mutex.h>  #include <ogc/lwp_watchdog.h> @@ -218,21 +219,21 @@ OSystem::MutexRef OSystem_Wii::createMutex() {  }  void OSystem_Wii::lockMutex(MutexRef mutex) { -	s32 res = LWP_MutexLock(*(mutex_t *) mutex); +	s32 res = LWP_MutexLock(*(mutex_t *)mutex);  	if (res)  		printf("ERROR locking mutex %p (%d)\n", mutex, res);  }  void OSystem_Wii::unlockMutex(MutexRef mutex) { -	s32 res = LWP_MutexUnlock(*(mutex_t *) mutex); +	s32 res = LWP_MutexUnlock(*(mutex_t *)mutex);  	if (res)  		printf("ERROR unlocking mutex %p (%d)\n", mutex, res);  }  void OSystem_Wii::deleteMutex(MutexRef mutex) { -	s32 res = LWP_MutexDestroy(*(mutex_t *) mutex); +	s32 res = LWP_MutexDestroy(*(mutex_t *)mutex);  	if (res)  		printf("ERROR destroying mutex %p (%d)\n", mutex, res); @@ -290,3 +291,77 @@ void OSystem_Wii::showOptionsDialog() {  	_padAcceleration = 9 - ConfMan.getInt("wii_pad_acceleration");  } +#ifndef GAMECUBE +Common::String OSystem_Wii::getSystemLanguage() const { +	const char *wiiCountries[] = { +		"JP", // CONF_AREA_JPN Japan +		"US", // CONF_AREA_USA United States of America +		"",   // CONF_AREA_EUR Europe? +		"AU", // CONF_AREA_AUS Australia, Commonwealth of +		"BR", // CONF_AREA_BRA Brazil, Federative Republic of +		"TW", // CONF_AREA_TWN Taiwan, Province of China +		"",   // CONF_AREA_ROC Republic of China (Taiwan) +		"KR", // CONF_AREA_KOR Korea, Republic of +		"HK", // CONF_AREA_HKG Hong Kong, Special Administrative Region of China +		"",   // CONF_AREA_ASI Asia? +		"",   // CONF_AREA_LTN Lithuania? +		"",   // CONF_AREA_SAF South-Africa? +		"CN"  // CONF_AREA_CHN China, People's Republic of +	}; + +	// Start by detecting the country, since we can deduce some languages not +	// supported on the Wii from it. +	Common::String country; +	// TODO: Can we get more fine-grained country setting? +	int32 areaID = CONF_GetArea(); +	if ((areaID >= CONF_AREA_JPN) && (areaID <= CONF_AREA_CHN) { +		// It's a known area. +		if (areaID == CONF_AREA_BRA) { +			// Portuguese isn't available on the Wii, but we know it's the +			// official language in Brazil, so we handle it separately. +			return "pt_BR"; +		} else { +			// Let's use our manual area to country mapping. +			country = wiiCountries[areaID]; +		} +	} else { +		// This will only happen when new areas are added to the API. +		warning("WII: Unknown system area: %d", areaID); +	} + + +	const char *wiiLanguages[] = { +		"ja",      // CONF_LANG_JAPANESE     Japanese +		"en",      // CONF_LANG_ENGLISH      English +		"de",      // CONF_LANG_GERMAN       German +		"fr",      // CONF_LANG_FRENCH       French +		"es",      // CONF_LANG_SPANISH      Spanish +		"it",      // CONF_LANG_ITALIAN      Italian +		"nl",      // CONF_LANG_DUTCH        Dutch +		"zh-Hans", // CONF_LANG_SIMP_CHINESE Simplified Chinese +		"zh-Hant", // CONF_LANG_TRAD_CHINESE Traditional Chinese +		"ko"       // CONF_LANG_KOREAN       Korean +	}; + +	// Now let's read the system language. +	Common::String lang; +	int32 langID = CONF_GetLanguage(); +	if ((langID >= CONF_LANG_JAPANESE) && (langID <= CONF_LANG_KOREAN)) { +		// It's a known language, let's use our manual language mapping. +		lang = wiiLanguages[langID]; + +		if (country.empty()) { +			// We don't know how to improve the detection, +			// let's return the language alone. +			return lang; +		} else { +			// Return the complete language_country string. +			return lang + "_" + country; +		} +	} else { +		// This will only happen when new languages are added to the API. +		warning("WII: Unknown system language: %d", langID); +		return ""; +	} +} +#endif // !GAMECUBE diff --git a/backends/platform/wii/osystem.h b/backends/platform/wii/osystem.h index ed33b43a81..ddfa905a77 100644 --- a/backends/platform/wii/osystem.h +++ b/backends/platform/wii/osystem.h @@ -213,7 +213,10 @@ public:  	virtual Common::TimerManager *getTimerManager();  	virtual FilesystemFactory *getFilesystemFactory();  	virtual void getTimeAndDate(TimeDate &t) const; + +#ifndef GAMECUBE +	virtual Common::String getSystemLanguage() const; +#endif // GAMECUBE  };  #endif -  | 
