Skip to content

Instantly share code, notes, and snippets.

@ipetepete
Forked from naxmefy/English.js
Created January 20, 2016 13:29
Show Gist options
  • Save ipetepete/8855a55d2e0c473ed590 to your computer and use it in GitHub Desktop.
Save ipetepete/8855a55d2e0c473ed590 to your computer and use it in GitHub Desktop.
Unity3D Internationalization (I18N)
#pragma strict
public class English {
public static var lang : Hashtable = {
// General
"game_name": "My Awesome Game"
// Menus
, "new_game" : "New Game"
, "save_game" : "Save Game"
, "load_game" : "Load Game"
, "quit_game" : "Quit Game"
, "end_game" : "End Game"
, "settings" : "Settings"
};
}
#pragma strict
function Start() {
Debug.Log(I18N.Get('game_name'));
}
#pragma strict
public class German {
public static var lang : Hashtable = {
// General
"game_name": "Mein ehrfürchtiges Spiel"
// Menus
, "new_game" : "Neues Spiel"
, "save_game" : "Spiel speichern"
, "load_game" : "Spiel laden"
, "quit_game" : "Spiel verlassen"
, "end_game" : "Spiel beenden"
, "settings" : "Einstellungen"
};
}
#pragma strict
public class I18N {
private static var defaultLang : String = "en";
private static var gameLang : String = "";
private static var noTranslationText : String = "Translation missing for {0}";
private static var langs : Hashtable = {
"en": English.lang,
"de": German.lang
};
private static function CheckAndSetUserLanguage() : boolean {
switch(Application.systemLanguage) {
case SystemLanguage.Afrikaans: SetLang("af"); break;
case SystemLanguage.Arabic: SetLang("ar"); break;
case SystemLanguage.Basque: SetLang("eu"); break;
case SystemLanguage.Belarusian: SetLang("be"); break;
case SystemLanguage.Bulgarian: SetLang("bg"); break;
case SystemLanguage.Catalan: SetLang("ca"); break;
case SystemLanguage.Chinese: SetLang("zh"); break;
case SystemLanguage.Czech: SetLang("cs"); break;
case SystemLanguage.Danish: SetLang("da"); break;
case SystemLanguage.Dutch: SetLang("nl"); break;
case SystemLanguage.English: SetLang("en"); break;
case SystemLanguage.Estonian: SetLang("et"); break;
case SystemLanguage.Faroese: SetLang("fo"); break;
case SystemLanguage.Finnish: SetLang("fu"); break;
case SystemLanguage.French: SetLang("fr"); break;
case SystemLanguage.German: SetLang("de"); break;
case SystemLanguage.Greek: SetLang("el"); break;
case SystemLanguage.Hebrew: SetLang("he"); break;
case SystemLanguage.Icelandic: SetLang("is"); break;
case SystemLanguage.Indonesian: SetLang("id"); break;
case SystemLanguage.Italian: SetLang("it"); break;
case SystemLanguage.Japanese: SetLang("ja"); break;
case SystemLanguage.Korean: SetLang("ko"); break;
case SystemLanguage.Latvian: SetLang("lv"); break;
case SystemLanguage.Lithuanian: SetLang("lt"); break;
case SystemLanguage.Norwegian: SetLang("nn"); break; // TODO: Check
case SystemLanguage.Polish: SetLang("pl"); break;
case SystemLanguage.Portuguese: SetLang("pt"); break;
case SystemLanguage.Romanian: SetLang("ro"); break;
case SystemLanguage.Russian: SetLang("ru"); break;
case SystemLanguage.SerboCroatian: SetLang("sr"); break; // TODO: Check
case SystemLanguage.Slovak: SetLang("sk"); break;
case SystemLanguage.Slovenian: SetLang("sl"); break;
case SystemLanguage.Spanish: SetLang("es"); break;
case SystemLanguage.Swedish: SetLang("sv"); break;
case SystemLanguage.Thai: SetLang("th"); break;
case SystemLanguage.Turkish: SetLang("tr"); break;
case SystemLanguage.Ukrainian: SetLang("uk"); break;
case SystemLanguage.Vietnamese: SetLang("vi"); break;
case SystemLanguage.ChineseSimplified: SetLang("zh_Hans"); break;
case SystemLanguage.ChineseTraditional: SetLang("zh_Hant"); break;
case SystemLanguage.Unknown: SetLang(defaultLang); break; // Unknow Fallback to defaultLang
case SystemLanguage.Hungarian: SetLang("hu"); break;
};
if(gameLang.length > 0) {
return true;
}
return false;
}
public static function GetCurrentLang() : String {
CheckAndSetUserLanguage();
return gameLang;
}
public static function SetLang(lang:String) : void {
if(langs.ContainsKey(lang)) {
gameLang = lang;
} else {
gameLang = defaultLang;
}
}
/**
* Example use: I18N.Get("game_name") -> "My Awesome Game"
*/
public static function Get(key:String) : String {
return Get(key, {});
}
public static function Get(key:String, args:Hashtable) : String {
var lang : Hashtable = langs[GetCurrentLang()] as Hashtable;
var value : String = lang[key] as String;
if(value.length == 0) {
return String.Format(noTranslationText, key);
} else {
return StringManipulation.Format(value, args);
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment