Consistent SYSTEMS
This commit is contained in:
109
scripts/Singleton/LocaleSystem.gd
Normal file
109
scripts/Singleton/LocaleSystem.gd
Normal 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))
|
Reference in New Issue
Block a user