add ArchHooks::GetPreferredLanguage

This commit is contained in:
Glenn Maynard
2005-10-28 07:14:53 +00:00
parent d9cd9a1d8c
commit 20efb43a86
3 changed files with 99 additions and 0 deletions
+6
View File
@@ -15,6 +15,12 @@ public:
/* Re-exec the game. If this is implemented, it doesn't return. */
virtual void RestartProgram() { }
/*
* Get the 2-letter RFC-639 code of the user's preferred language
* for localized messages, in uppercase.
*/
virtual CString GetPreferredLanguage() { return "EN"; }
/* Call this to temporarily enter a high-priority or realtime scheduling (depending
* on the implementation) mode. This is used to improve timestamp accuracy. Do as
* little as possible in this mode; hanging in it might hang the system entirely. */
@@ -159,6 +159,98 @@ void ArchHooks_Win32::RestartProgram()
Win32RestartProgram();
}
static CString LangIdToString( LANGID l )
{
switch( PRIMARYLANGID(l) )
{
case LANG_ARABIC: return "AR";
case LANG_BULGARIAN: return "BG";
case LANG_CATALAN: return "CA";
case LANG_CHINESE: return "ZH";
case LANG_CZECH: return "CS";
case LANG_DANISH: return "DA";
case LANG_GERMAN: return "DE";
case LANG_GREEK: return "EL";
case LANG_SPANISH: return "ES";
case LANG_FINNISH: return "FI";
case LANG_FRENCH: return "FR";
case LANG_HEBREW: return "IW";
case LANG_HUNGARIAN: return "HU";
case LANG_ICELANDIC: return "IS";
case LANG_ITALIAN: return "IT";
case LANG_JAPANESE: return "JA";
case LANG_KOREAN: return "KO";
case LANG_DUTCH: return "NL";
case LANG_NORWEGIAN: return "NO";
case LANG_POLISH: return "PL";
case LANG_PORTUGUESE: return "PT";
case LANG_ROMANIAN: return "RO";
case LANG_RUSSIAN: return "RU";
case LANG_CROATIAN: return "HR";
// case LANG_SERBIAN: return "SR"; // same as LANG_CROATIAN?
case LANG_SLOVAK: return "SK";
case LANG_ALBANIAN: return "SQ";
case LANG_SWEDISH: return "SV";
case LANG_THAI: return "TH";
case LANG_TURKISH: return "TR";
case LANG_URDU: return "UR";
case LANG_INDONESIAN: return "IN";
case LANG_UKRAINIAN: return "UK";
case LANG_SLOVENIAN: return "SL";
case LANG_ESTONIAN: return "ET";
case LANG_LATVIAN: return "LV";
case LANG_LITHUANIAN: return "LT";
case LANG_VIETNAMESE: return "VI";
case LANG_ARMENIAN: return "HY";
case LANG_BASQUE: return "EU";
case LANG_MACEDONIAN: return "MK";
case LANG_AFRIKAANS: return "AF";
case LANG_GEORGIAN: return "KA";
case LANG_FAEROESE: return "FO";
case LANG_HINDI: return "HI";
case LANG_MALAY: return "MS";
case LANG_KAZAK: return "KK";
case LANG_SWAHILI: return "SW";
case LANG_UZBEK: return "UZ";
case LANG_TATAR: return "TT";
case LANG_PUNJABI: return "PA";
case LANG_GUJARATI: return "GU";
case LANG_TAMIL: return "TA";
case LANG_KANNADA: return "KN";
case LANG_MARATHI: return "MR";
case LANG_SANSKRIT: return "SA";
case LANG_MONGOLIAN: return "MN";
case LANG_GALICIAN: return "GL";
default:
case LANG_ENGLISH: return "EN";
}
}
static LANGID GetLanguageID()
{
HINSTANCE hDLL = LoadLibrary( "kernel32.dll" );
if( hDLL )
{
typedef LANGID(GET_USER_DEFAULT_UI_LANGUAGE)(void);
GET_USER_DEFAULT_UI_LANGUAGE *pGetUserDefaultUILanguage = (GET_USER_DEFAULT_UI_LANGUAGE*) GetProcAddress( hDLL, "GetUserDefaultUILanguage" );
if( pGetUserDefaultUILanguage )
{
LANGID ret = pGetUserDefaultUILanguage();
FreeLibrary( hDLL );
return ret;
}
FreeLibrary( hDLL );
}
return GetSystemDefaultLangID();
}
CString ArchHooks_Win32::GetPreferredLanguage()
{
return LangIdToString( GetLanguageID() );
}
void ArchHooks_Win32::EnterTimeCriticalSection()
{
TimeCritMutex->Lock();
@@ -11,6 +11,7 @@ public:
~ArchHooks_Win32();
void DumpDebugInfo();
void RestartProgram();
CString GetPreferredLanguage();
int OldThreadPriority;
RageMutex *TimeCritMutex;