diff --git a/localization/languages.json b/localization/languages.json new file mode 100644 index 0000000..c214334 --- /dev/null +++ b/localization/languages.json @@ -0,0 +1,25 @@ +{ + "languages": { + "en": { + "name": "English", + "display_name": "English" + }, + "es": { + "name": "Spanish", + "display_name": "Español" + }, + "fr": { + "name": "French", + "display_name": "Français" + }, + "de": { + "name": "German", + "display_name": "Deutsch" + }, + "ru": { + "name": "Russian", + "display_name": "Русский" + } + }, + "default_language": "en" +} diff --git a/scripts/SettingsManager.gd b/scripts/SettingsManager.gd index 5af10fd..7301ea3 100644 --- a/scripts/SettingsManager.gd +++ b/scripts/SettingsManager.gd @@ -11,8 +11,11 @@ var settings = { "language": "en" } +var languages_data = {} + func _ready(): print("SettingsManager ready") + load_languages() load_settings() func load_settings(): @@ -37,3 +40,21 @@ func get_setting(key: String): func set_setting(key: String, value): settings[key] = value save_settings() + +func load_languages(): + var file = FileAccess.open("res://localization/languages.json", FileAccess.READ) + if file: + var json_string = file.get_as_text() + file.close() + var json = JSON.new() + var parse_result = json.parse(json_string) + if parse_result == OK: + languages_data = json.data + print("Languages loaded: ", languages_data.languages.keys()) + else: + print("Error parsing languages.json") + else: + print("Could not open languages.json") + +func get_languages_data(): + return languages_data diff --git a/scripts/SettingsMenu.gd b/scripts/SettingsMenu.gd index 83b9aaa..db104f6 100644 --- a/scripts/SettingsMenu.gd +++ b/scripts/SettingsMenu.gd @@ -7,6 +7,8 @@ signal back_to_main_menu @onready var sfx_slider = $SettingsContainer/SFXVolumeContainer/SFXVolumeSlider @onready var language_selector = $SettingsContainer/LanguageContainer/LanguageSelector +var language_codes = [] + func _ready(): print("SettingsMenu ready") # Load current settings into sliders @@ -19,10 +21,9 @@ func _ready(): music_slider.value_changed.connect(_on_music_volume_changed) sfx_slider.value_changed.connect(_on_sfx_volume_changed) - # Load language setting - var current_lang = SettingsManager.get_setting("language") - var lang_index = get_language_index(current_lang) - language_selector.selected = lang_index + # Setup language selector from JSON data + setup_language_selector() + func _on_master_volume_changed(value: float): SettingsManager.set_setting("master_volume", value) @@ -46,15 +47,26 @@ func _on_back_button_pressed(): print("Back button pressed") back_to_main_menu.emit() -func get_language_index(lang_code: String) -> int: - match lang_code: - "en": return 0 - "es": return 1 - "fr": return 2 - "de": return 3 - _: return 0 +func setup_language_selector(): + var languages_data = SettingsManager.get_languages_data() + if languages_data.has("languages"): + language_selector.clear() + language_codes.clear() + for lang_code in languages_data.languages.keys(): + language_codes.append(lang_code) + var display_name = languages_data.languages[lang_code]["display_name"] + language_selector.add_item(display_name) + + # Set current language selection + var current_lang = SettingsManager.get_setting("language") + var lang_index = language_codes.find(current_lang) + if lang_index >= 0: + language_selector.selected = lang_index + +# Remove the old get_language_index function and update this one: func _on_language_selector_item_selected(index: int): - var lang_codes = ["en", "es", "fr", "de"] - SettingsManager.set_setting("language", lang_codes[index]) - print("Language changed to: ", lang_codes[index]) + if index < language_codes.size(): + var selected_lang = language_codes[index] + SettingsManager.set_setting("language", selected_lang) + print("Language changed to: ", selected_lang)