Explosion_der_Spiele/scripts/autoload/locale.gd

36 lines
893 B
GDScript3
Raw Normal View History

extends Node
## Multilingual strings DE/EN/BY with DE fallback.
signal locale_changed
var _strings: Dictionary = {}
func _ready() -> void:
reload()
func reload() -> void:
_strings = _load_lang("de")
var lang := Settings.language if Settings else "de"
if lang != "de":
var overlay := _load_lang(lang)
for key in overlay.keys():
_strings[key] = overlay[key]
locale_changed.emit()
func _load_lang(lang: String) -> Dictionary:
var path := "res://data/locales/%s.json" % lang
var file := FileAccess.open(path, FileAccess.READ)
if file == null:
push_warning("Missing locale: %s" % path)
return {}
var parsed: Variant = JSON.parse_string(file.get_as_text())
if typeof(parsed) == TYPE_DICTIONARY:
return parsed
return {}
func tr_key(key: String, args: Array = []) -> String:
var text := str(_strings.get(key, key))
if args.is_empty():
return text
return text % args