36 lines
893 B
GDScript3
36 lines
893 B
GDScript3
|
|
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
|