@@ -18,6 +18,9 @@ const SUPPORTED_LOCALES := [
1818 "de" ,
1919 "tr" ,
2020 "nl" ,
21+ "uk" ,
22+ "zh_Hant" ,
23+ "cs" ,
2124]
2225
2326const LOCALE_TO_LABEL := {
@@ -31,6 +34,9 @@ const LOCALE_TO_LABEL := {
3134 "de" : "Deutsch" ,
3235 "tr" : "Türkçe" ,
3336 "nl" : "Nederlands" ,
37+ "uk" : "Українська" ,
38+ "zh_Hant" : "繁體中文" ,
39+ "cs" : "Čeština" ,
3440}
3541
3642
@@ -46,90 +52,90 @@ func _ready() -> void:
4652
4753func get_available_languages () -> Array :
4854 var languages := []
49-
55+
5056 for locale_code in SUPPORTED_LOCALES :
5157 var language_name : String = LOCALE_TO_LABEL .get (locale_code , "" )
5258 if language_name == "" :
5359 language_name = TranslationServer .get_locale_name (locale_code )
54-
60+
5561 languages .append ({
5662 "code" : locale_code ,
5763 "name" : language_name ,
5864 })
59-
65+
6066 return languages
6167
6268
6369func set_language (language_code : String ) -> void :
6470 if current_language == language_code :
6571 return
66-
72+
6773 current_language = language_code
6874 var current_profile := UserProfiles .get_profile ()
69-
75+
7076 # Remove existing translations from the translation server.
7177 if _loaded_translations .size () > 0 :
7278 for translation in _loaded_translations :
7379 TranslationServer .remove_translation (translation )
74-
80+
7581 _loaded_translations = []
76-
82+
7783 # If the language is set to the default locale, we don't need to do anything else.
7884 if current_language == DEFAULT_LOCALE :
7985 TranslationServer .set_locale (current_language )
8086 current_profile .language = current_language
8187 current_profile .save ()
8288 emit_signal ("translation_changed" )
8389 return
84-
90+
8591 # Load order shouldn't be important, so we'll just load everything from the folder.
8692 var locale_dir_path := I18N_ROOT .plus_file (current_language )
87-
93+
8894 var fs := Directory .new ()
8995 if not fs .dir_exists (locale_dir_path ):
9096 printerr ("Failed to change language to '%s ': Language folder does not exist." % [ current_language ])
9197 _reset_language ()
9298 return
93-
99+
94100 var error = fs .change_dir (locale_dir_path )
95101 if error :
96102 printerr ("Failed to open language folder for '%s ': Error code %d " % [ current_language , error ])
97103 _reset_language ()
98104 return
99-
105+
100106 error = fs .list_dir_begin (true , true )
101107 if error :
102108 printerr ("Failed to list language folder for '%s ': Error code %d " % [ current_language , error ])
103109 _reset_language ()
104110 return
105-
111+
106112 # Iterate through all PO files and try to load them.
107113 var file_path = fs .get_next ()
108114 while file_path :
109115 if not file_path .get_extension () == PO_EXTENSION :
110116 file_path = fs .get_next ()
111117 continue
112-
118+
113119 var full_path = locale_dir_path .plus_file (file_path )
114-
120+
115121 if not ResourceLoader .exists (full_path ):
116122 printerr ("Language file at '%s ' is not recognized as a valid resource." % [ full_path ])
117123 file_path = fs .get_next ()
118124 continue
119-
125+
120126 var translation := ResourceLoader .load (full_path , "Translation" ) as Translation
121127 if not translation :
122128 printerr ("Language resource at '%s ' has failed to load." % [ full_path ])
123129 file_path = fs .get_next ()
124130 continue
125-
131+
126132 _loaded_translations .append (translation )
127133 file_path = fs .get_next ()
128-
134+
129135 # Add loaded translations to the translation server.
130136 for translation in _loaded_translations :
131137 TranslationServer .add_translation (translation )
132-
138+
133139 # Set the language to update the app.
134140 TranslationServer .set_locale (current_language )
135141 current_profile .language = current_language
@@ -140,7 +146,7 @@ func set_language(language_code: String) -> void:
140146func _reset_language () -> void :
141147 current_language = DEFAULT_LOCALE
142148 TranslationServer .set_locale (current_language )
143-
149+
144150 var current_profile := UserProfiles .get_profile ()
145151 current_profile .language = current_language
146152 current_profile .save ()
0 commit comments