diff --git a/abogen/assets/flags/a.png b/abogen/assets/flags/a.png deleted file mode 100644 index f770fcf..0000000 Binary files a/abogen/assets/flags/a.png and /dev/null differ diff --git a/abogen/assets/flags/ae.png b/abogen/assets/flags/ae.png new file mode 100644 index 0000000..64f87c6 Binary files /dev/null and b/abogen/assets/flags/ae.png differ diff --git a/abogen/assets/flags/b.png b/abogen/assets/flags/b.png deleted file mode 100644 index 8e04f7a..0000000 Binary files a/abogen/assets/flags/b.png and /dev/null differ diff --git a/abogen/assets/flags/bg.png b/abogen/assets/flags/bg.png new file mode 100644 index 0000000..6c79a42 Binary files /dev/null and b/abogen/assets/flags/bg.png differ diff --git a/abogen/assets/flags/br.png b/abogen/assets/flags/br.png new file mode 100644 index 0000000..9cb11fb Binary files /dev/null and b/abogen/assets/flags/br.png differ diff --git a/abogen/assets/flags/cn.png b/abogen/assets/flags/cn.png new file mode 100644 index 0000000..18ee309 Binary files /dev/null and b/abogen/assets/flags/cn.png differ diff --git a/abogen/assets/flags/cz.png b/abogen/assets/flags/cz.png new file mode 100644 index 0000000..310cc93 Binary files /dev/null and b/abogen/assets/flags/cz.png differ diff --git a/abogen/assets/flags/de.png b/abogen/assets/flags/de.png new file mode 100644 index 0000000..f7521cd Binary files /dev/null and b/abogen/assets/flags/de.png differ diff --git a/abogen/assets/flags/dk.png b/abogen/assets/flags/dk.png new file mode 100644 index 0000000..ecf65cb Binary files /dev/null and b/abogen/assets/flags/dk.png differ diff --git a/abogen/assets/flags/e.png b/abogen/assets/flags/e.png deleted file mode 100644 index 693cf2a..0000000 Binary files a/abogen/assets/flags/e.png and /dev/null differ diff --git a/abogen/assets/flags/ee.png b/abogen/assets/flags/ee.png new file mode 100644 index 0000000..c52311d Binary files /dev/null and b/abogen/assets/flags/ee.png differ diff --git a/abogen/assets/flags/es.png b/abogen/assets/flags/es.png new file mode 100644 index 0000000..d3b8d4d Binary files /dev/null and b/abogen/assets/flags/es.png differ diff --git a/abogen/assets/flags/f.png b/abogen/assets/flags/f.png deleted file mode 100644 index d80e7a7..0000000 Binary files a/abogen/assets/flags/f.png and /dev/null differ diff --git a/abogen/assets/flags/fi.png b/abogen/assets/flags/fi.png new file mode 100644 index 0000000..dc32ba7 Binary files /dev/null and b/abogen/assets/flags/fi.png differ diff --git a/abogen/assets/flags/fr.png b/abogen/assets/flags/fr.png new file mode 100644 index 0000000..f306eb1 Binary files /dev/null and b/abogen/assets/flags/fr.png differ diff --git a/abogen/assets/flags/gb.png b/abogen/assets/flags/gb.png new file mode 100644 index 0000000..19fec25 Binary files /dev/null and b/abogen/assets/flags/gb.png differ diff --git a/abogen/assets/flags/gr.png b/abogen/assets/flags/gr.png new file mode 100644 index 0000000..fd3d8b4 Binary files /dev/null and b/abogen/assets/flags/gr.png differ diff --git a/abogen/assets/flags/h.png b/abogen/assets/flags/h.png deleted file mode 100644 index 015ec29..0000000 Binary files a/abogen/assets/flags/h.png and /dev/null differ diff --git a/abogen/assets/flags/hr.png b/abogen/assets/flags/hr.png new file mode 100644 index 0000000..0712ad9 Binary files /dev/null and b/abogen/assets/flags/hr.png differ diff --git a/abogen/assets/flags/hu.png b/abogen/assets/flags/hu.png new file mode 100644 index 0000000..beeb302 Binary files /dev/null and b/abogen/assets/flags/hu.png differ diff --git a/abogen/assets/flags/i.png b/abogen/assets/flags/i.png deleted file mode 100644 index 6678202..0000000 Binary files a/abogen/assets/flags/i.png and /dev/null differ diff --git a/abogen/assets/flags/id.png b/abogen/assets/flags/id.png new file mode 100644 index 0000000..6625a5d Binary files /dev/null and b/abogen/assets/flags/id.png differ diff --git a/abogen/assets/flags/in.png b/abogen/assets/flags/in.png new file mode 100644 index 0000000..a21747b Binary files /dev/null and b/abogen/assets/flags/in.png differ diff --git a/abogen/assets/flags/it.png b/abogen/assets/flags/it.png new file mode 100644 index 0000000..93d0279 Binary files /dev/null and b/abogen/assets/flags/it.png differ diff --git a/abogen/assets/flags/j.png b/abogen/assets/flags/j.png deleted file mode 100644 index ad5569e..0000000 Binary files a/abogen/assets/flags/j.png and /dev/null differ diff --git a/abogen/assets/flags/jp.png b/abogen/assets/flags/jp.png new file mode 100644 index 0000000..0f5ca8f Binary files /dev/null and b/abogen/assets/flags/jp.png differ diff --git a/abogen/assets/flags/kr.png b/abogen/assets/flags/kr.png new file mode 100644 index 0000000..3028892 Binary files /dev/null and b/abogen/assets/flags/kr.png differ diff --git a/abogen/assets/flags/lt.png b/abogen/assets/flags/lt.png new file mode 100644 index 0000000..a246f73 Binary files /dev/null and b/abogen/assets/flags/lt.png differ diff --git a/abogen/assets/flags/lv.png b/abogen/assets/flags/lv.png new file mode 100644 index 0000000..5c10636 Binary files /dev/null and b/abogen/assets/flags/lv.png differ diff --git a/abogen/assets/flags/na.png b/abogen/assets/flags/na.png new file mode 100644 index 0000000..83b8744 Binary files /dev/null and b/abogen/assets/flags/na.png differ diff --git a/abogen/assets/flags/nl.png b/abogen/assets/flags/nl.png new file mode 100644 index 0000000..684116e Binary files /dev/null and b/abogen/assets/flags/nl.png differ diff --git a/abogen/assets/flags/p.png b/abogen/assets/flags/p.png deleted file mode 100644 index 8abf47f..0000000 Binary files a/abogen/assets/flags/p.png and /dev/null differ diff --git a/abogen/assets/flags/pl.png b/abogen/assets/flags/pl.png new file mode 100644 index 0000000..db4b384 Binary files /dev/null and b/abogen/assets/flags/pl.png differ diff --git a/abogen/assets/flags/pt.png b/abogen/assets/flags/pt.png new file mode 100644 index 0000000..f9c772a Binary files /dev/null and b/abogen/assets/flags/pt.png differ diff --git a/abogen/assets/flags/ro.png b/abogen/assets/flags/ro.png new file mode 100644 index 0000000..62aea3f Binary files /dev/null and b/abogen/assets/flags/ro.png differ diff --git a/abogen/assets/flags/ru.png b/abogen/assets/flags/ru.png new file mode 100644 index 0000000..231dcc8 Binary files /dev/null and b/abogen/assets/flags/ru.png differ diff --git a/abogen/assets/flags/se.png b/abogen/assets/flags/se.png new file mode 100644 index 0000000..447e74b Binary files /dev/null and b/abogen/assets/flags/se.png differ diff --git a/abogen/assets/flags/si.png b/abogen/assets/flags/si.png new file mode 100644 index 0000000..08d2bab Binary files /dev/null and b/abogen/assets/flags/si.png differ diff --git a/abogen/assets/flags/sk.png b/abogen/assets/flags/sk.png new file mode 100644 index 0000000..fee9028 Binary files /dev/null and b/abogen/assets/flags/sk.png differ diff --git a/abogen/assets/flags/tr.png b/abogen/assets/flags/tr.png new file mode 100644 index 0000000..2506416 Binary files /dev/null and b/abogen/assets/flags/tr.png differ diff --git a/abogen/assets/flags/ua.png b/abogen/assets/flags/ua.png new file mode 100644 index 0000000..77b4ac8 Binary files /dev/null and b/abogen/assets/flags/ua.png differ diff --git a/abogen/assets/flags/us.png b/abogen/assets/flags/us.png new file mode 100644 index 0000000..4076ac8 Binary files /dev/null and b/abogen/assets/flags/us.png differ diff --git a/abogen/assets/flags/vn.png b/abogen/assets/flags/vn.png new file mode 100644 index 0000000..e194f28 Binary files /dev/null and b/abogen/assets/flags/vn.png differ diff --git a/abogen/assets/flags/z.png b/abogen/assets/flags/z.png deleted file mode 100644 index a0366c4..0000000 Binary files a/abogen/assets/flags/z.png and /dev/null differ diff --git a/abogen/constants.py b/abogen/constants.py index 87bc87b..28b7b2a 100644 --- a/abogen/constants.py +++ b/abogen/constants.py @@ -29,6 +29,57 @@ LANGUAGE_DESCRIPTIONS = { "z": "Mandarin Chinese", } +# Mapping from Kokoro single-letter language codes to ISO 3166-1 alpha-2 country codes +# Used for loading flag icons +KOKORO_LANG_TO_COUNTRY = { + "a": "us", # American English -> United States + "b": "gb", # British English -> United Kingdom + "e": "es", # Spanish -> Spain + "f": "fr", # French -> France + "h": "in", # Hindi -> India + "i": "it", # Italian -> Italy + "j": "jp", # Japanese -> Japan + "p": "br", # Brazilian Portuguese -> Brazil + "z": "cn", # Mandarin Chinese -> China +} + +# Mapping from SuperTonic ISO 639-1 language codes to ISO 3166-1 alpha-2 country codes +# Used for loading flag icons in the SuperTonic language picker +SUPERTONIC_LANG_TO_COUNTRY = { + "en": "gb", + "ko": "kr", + "ja": "jp", + "ar": "ae", + "bg": "bg", + "cs": "cz", + "da": "dk", + "de": "de", + "el": "gr", + "es": "es", + "et": "ee", + "fi": "fi", + "fr": "fr", + "hi": "in", + "hr": "hr", + "hu": "hu", + "id": "id", + "it": "it", + "lt": "lt", + "lv": "lv", + "nl": "nl", + "pl": "pl", + "pt": "pt", + "ro": "ro", + "ru": "ru", + "sk": "sk", + "sl": "si", + "sv": "se", + "tr": "tr", + "uk": "ua", + "vi": "vn", + "na": "na", +} + # Supported sound formats SUPPORTED_SOUND_FORMATS = [ "wav", diff --git a/abogen/pyqt/gui.py b/abogen/pyqt/gui.py index 3ee53b0..578e8b0 100644 --- a/abogen/pyqt/gui.py +++ b/abogen/pyqt/gui.py @@ -84,6 +84,8 @@ from abogen.constants import ( PROGRAM_DESCRIPTION, LANGUAGE_DESCRIPTIONS, VOICES_INTERNAL, + KOKORO_LANG_TO_COUNTRY, + SUPERTONIC_LANG_TO_COUNTRY, SUPPORTED_LANGUAGES_FOR_SUBTITLE_GENERATION, COLORS, SUBTITLE_FORMATS, @@ -1143,7 +1145,10 @@ class abogen(QWidget): supertonic_row_layout.addWidget(st_lang_label) self.st_lang_combo = QComboBox(self) for code in SUPERTONIC_AVAILABLE_LANGS: - self.st_lang_combo.addItem(code, code) + country_code = SUPERTONIC_LANG_TO_COUNTRY.get(code, code) + flag = get_resource_path("abogen.assets.flags", f"{country_code}.png") + icon_st = QIcon(flag) if flag and os.path.exists(flag) else QIcon() + self.st_lang_combo.addItem(icon_st, code, code) self.st_lang_combo.setCurrentText("en") self.st_lang_combo.setStyleSheet("QComboBox { min-height: 20px; padding: 6px 12px; }") self.st_lang_combo.currentTextChanged.connect(self._on_st_lang_changed) @@ -2011,7 +2016,8 @@ class abogen(QWidget): else: for v in VOICES_INTERNAL: icon = QIcon() - flag_path = get_resource_path("abogen.assets.flags", f"{v[0]}.png") + country_code = KOKORO_LANG_TO_COUNTRY.get(v[0], v[0]) + flag_path = get_resource_path("abogen.assets.flags", f"{country_code}.png") if flag_path and os.path.exists(flag_path): icon = QIcon(flag_path) self.voice_combo.addItem(icon, f"{v}", v) diff --git a/abogen/pyqt/voice_formula_gui.py b/abogen/pyqt/voice_formula_gui.py index feefb3e..284683a 100644 --- a/abogen/pyqt/voice_formula_gui.py +++ b/abogen/pyqt/voice_formula_gui.py @@ -31,6 +31,7 @@ from abogen.constants import ( VOICES_INTERNAL, SUPPORTED_LANGUAGES_FOR_SUBTITLE_GENERATION, LANGUAGE_DESCRIPTIONS, + KOKORO_LANG_TO_COUNTRY, COLORS, ) import re @@ -189,8 +190,9 @@ class VoiceMixer(QWidget): ) # Center the icons horizontally # Flag icon + country_code = KOKORO_LANG_TO_COUNTRY.get(language_code, language_code) flag_icon_path = get_resource_path( - "abogen.assets.flags", f"{language_code}.png" + "abogen.assets.flags", f"{country_code}.png" ) gender_icon_path = get_resource_path( "abogen.assets", "female.png" if is_female else "male.png" @@ -512,7 +514,8 @@ class VoiceFormulaDialog(QDialog): header_row.addWidget(QLabel("Language:")) self.language_combo = QComboBox() for code, desc in LANGUAGE_OPTIONS: - flag = get_resource_path("abogen.assets.flags", f"{code}.png") + country_code = KOKORO_LANG_TO_COUNTRY.get(code, code) + flag = get_resource_path("abogen.assets.flags", f"{country_code}.png") if flag and os.path.exists(flag): self.language_combo.addItem(QIcon(flag), desc, code) else: