material-maker/material_maker/locale/locale.gd

64 lines
2.1 KiB
GDScript3
Raw Normal View History

extends Object
const LOCALE_DIR : String = "user://locale"
func install_translation(fn : String):
var dir : Directory = Directory.new()
dir.make_dir_recursive(LOCALE_DIR)
if dir.copy(fn, LOCALE_DIR.plus_file(fn.get_file())) == OK:
read_translations()
func add_translations(dest : Translation, src : Translation):
for m in src.get_message_list():
dest.add_message(m, src.get_message(m))
func read_translations():
var translations : Dictionary = {}
var dir = Directory.new()
if dir.open(LOCALE_DIR) == OK:
var csv_files : Array = []
dir.list_dir_begin()
var file_name = dir.get_next()
while file_name != "":
if !dir.current_is_dir():
match file_name.get_extension():
"po", "translation":
var t : Translation = load(LOCALE_DIR.plus_file(file_name))
if translations.has(t.locale):
add_translations(translations[t.locale], t)
else:
translations[t.locale] = t
TranslationServer.add_translation(t)
"csv":
csv_files.push_back(file_name)
file_name = dir.get_next()
for fn in csv_files:
var f : File = File.new()
if f.open(LOCALE_DIR.plus_file(fn), File.READ) == OK:
var l : String = f.get_line()
if l.left(2) == "id":
var separator = l[2]
var languages : Array = l.split(separator)
languages[0] = null
for i in range(1, languages.size()):
if languages[i] == "en":
languages[i] = null
else:
if translations.has(languages[i]):
languages[i] = translations[languages[i]]
else:
var translation : Translation = Translation.new()
translation.locale = languages[i]
translations[languages[i]] = translation
languages[i] = translation
TranslationServer.add_translation(translation)
while ! f.eof_reached():
l = f.get_line()
var strings : Array = l.split(separator)
if strings.size() == languages.size():
for i in range(1, languages.size()):
if languages[i] != null:
languages[i].add_message(strings[0].replace("\\n", "\n"), strings[i].replace("\\n", "\n"))
f.close()