mirror of
https://github.com/denizsafak/abogen.git
synced 2026-09-20 19:50:59 +02:00
fix(pyqt): migrate GUI to Language enums, fix subtitle mode gating
Complete the Language enum unification (commit 0dc491e) for the PyQt
GUI, which was left resolving languages from kokoro letter codes
(voice[0]) while domain and WebUI already used Language enums.
- selected_lang is now always a Language enum: voices resolve via
language_for_voice_id(), profiles via resolve_profile_language()
- kokoro letter->Language mapping stays in the engine (new public
language_for_code()); the Language.from_code() domain shim is removed
- legacy profile files with letter codes ("a", "e", ...) are tolerated
only at the profile read boundary; new profiles save ISO codes
- conversion.py letter comparisons replaced with enum comparisons, and
SynthParams lang_code= -> language= (would TypeError at runtime)
- subtitle dropdown enabled for all languages; word-count and
highlighting modes restricted to English with auto-switch to Sentence
- tests: engine mapping + profile language resolution added; 1566 pass
This commit is contained in:
@@ -196,3 +196,42 @@ class TestKokoroVoiceLister:
|
||||
assert isinstance(voice.tags, tuple)
|
||||
assert len(voice.tags) > 0
|
||||
engine.dispose()
|
||||
|
||||
|
||||
# ──────────────────────────────────────────────────────────────
|
||||
# Language mapping helpers
|
||||
# ──────────────────────────────────────────────────────────────
|
||||
|
||||
class TestKokoroLanguageMapping:
|
||||
"""Language resolution helpers: the letter codes live in the engine only."""
|
||||
|
||||
def test_language_for_code(self) -> None:
|
||||
from abogen.domain.enums import Language
|
||||
from plugins.kokoro.engine import language_for_code
|
||||
|
||||
assert language_for_code("a") == Language.EN_US
|
||||
assert language_for_code("b") == Language.EN_GB
|
||||
assert language_for_code("e") == Language.ES
|
||||
assert language_for_code("f") == Language.FR
|
||||
assert language_for_code("h") == Language.HI
|
||||
assert language_for_code("i") == Language.IT
|
||||
assert language_for_code("j") == Language.JA
|
||||
assert language_for_code("p") == Language.PT_BR
|
||||
assert language_for_code("z") == Language.ZH
|
||||
|
||||
def test_language_for_code_fallbacks(self) -> None:
|
||||
from abogen.domain.enums import Language
|
||||
from plugins.kokoro.engine import language_for_code
|
||||
|
||||
assert language_for_code("x") == Language.EN_US
|
||||
assert language_for_code("") == Language.EN_US
|
||||
|
||||
def test_language_for_voice_id(self) -> None:
|
||||
from abogen.domain.enums import Language
|
||||
from plugins.kokoro.engine import language_for_voice_id
|
||||
|
||||
assert language_for_voice_id("af_heart") == Language.EN_US
|
||||
assert language_for_voice_id("bf_emma") == Language.EN_GB
|
||||
assert language_for_voice_id("ef_dora") == Language.ES
|
||||
assert language_for_voice_id("zf_xiaobei") == Language.ZH
|
||||
assert language_for_voice_id("") == Language.EN_US
|
||||
|
||||
Reference in New Issue
Block a user