class_name LocaleSystem extends Node enum Language { ENGLISH, JAPANESE, SPANISH, }; enum Region { US, EU, AU, JP } const LANGUAGE_MATCH:Dictionary[String, Language] = { "EN": Language.ENGLISH, "JA": Language.JAPANESE, "ES": Language.SPANISH } const REGION_MATCH:Dictionary[String, Region] = { "US": Region.US, "AU": Region.AU, "EU": Region.EU, "JP": Region.JP } const DEFAULT_LANGUAGE:Language = Language.ENGLISH const DEFAULT_REGION:Region = Region.US var locale:String = ""; var language:Language = -1 var region:Region = -1 signal localeChanged func _init() -> void: var preferred = OS.get_locale() self.setLocaleFromLocaleString(preferred) func _enter_tree() -> void: # Test print("Hello World!") var ctx = TransContext.new() ctx.addInteger("quantity", 2) ctx.addContext("item", ITEM.getItem(Item.Type.POTION).getTransContext()) print(ctx.trans("test")) func setLocaleFromLocaleString(localeString:String) -> void: var parts:PackedStringArray = localeString.split("_") var strLang:String var strReg:String # Default missing region or language to "??", will default lower if parts.size() == 0: strLang = "??".to_upper() strReg = "??".to_upper() elif parts.size() == 1: strLang = parts[0].to_upper() strReg = "??".to_upper() else: strLang = parts[0].to_upper() strReg = parts[1].to_upper() # Select matching internal language and region var lang:Language var reg:Region if LANGUAGE_MATCH.has(strLang): lang = LANGUAGE_MATCH[strLang] else: print("Unknown language: " + strLang) lang = DEFAULT_LANGUAGE reg = DEFAULT_REGION if REGION_MATCH.has(strReg): reg = REGION_MATCH[strReg] else: print("Unknown region: " + strReg) reg = DEFAULT_REGION # Set locale. self.setLocale(lang, reg) func setLocale(language:Language, region:Region) -> void: if self.language == language and self.region == region: return var l:String = "" var matchLang = LANGUAGE_MATCH.find_key(language) if matchLang: l = matchLang.to_lower() else: print("Invalid language: " + str(language)) l = LANGUAGE_MATCH.find_key(DEFAULT_LANGUAGE).to_lower() l += "_" var matchRegion = REGION_MATCH.find_key(region) if matchRegion: l += matchRegion.to_upper() else: print("Invalid region: " + str(region)) l += REGION_MATCH.find_key(DEFAULT_REGION).to_upper() self.language = language self.region = region self.locale = l TranslationServer.set_locale(l) localeChanged.emit(l) print("Locale set to: " + l) func formatInteger(integer:int) -> String: return TextServerManager.get_primary_interface().format_number(str(integer))