Consistent SYSTEMS

This commit is contained in:
2025-05-25 14:37:30 -05:00
parent 48f3e57a44
commit 470fd62e2f
34 changed files with 65 additions and 106 deletions

View File

@@ -0,0 +1,109 @@
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 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))