AnimaStudio / lang_codes.py
lulavc
fix: move theme/css from gr.Blocks() to demo.launch() for Gradio 6.x compatibility
43f8b96
"""Language code mappings between TTS display names, Whisper ISO-639-1, and NLLB BCP-47."""
from dataclasses import dataclass
from typing import Mapping
@dataclass(frozen=True)
class LangInfo:
display: str # Display name matching TTS_LANGUAGES (e.g., "Portuguese")
nllb: str # NLLB-200 BCP-47 flores code (e.g., "por_Latn")
whisper: str # Whisper ISO 639-1 code (e.g., "pt")
LANG_MAP: Mapping[str, LangInfo] = {
"Arabic": LangInfo("Arabic", "arb_Arab", "ar"),
"Danish": LangInfo("Danish", "dan_Latn", "da"),
"German": LangInfo("German", "deu_Latn", "de"),
"Greek": LangInfo("Greek", "ell_Grek", "el"),
"English": LangInfo("English", "eng_Latn", "en"),
"Spanish": LangInfo("Spanish", "spa_Latn", "es"),
"Finnish": LangInfo("Finnish", "fin_Latn", "fi"),
"French": LangInfo("French", "fra_Latn", "fr"),
"Hebrew": LangInfo("Hebrew", "heb_Hebr", "he"),
"Hindi": LangInfo("Hindi", "hin_Deva", "hi"),
"Italian": LangInfo("Italian", "ita_Latn", "it"),
"Japanese": LangInfo("Japanese", "jpn_Jpan", "ja"),
"Korean": LangInfo("Korean", "kor_Hang", "ko"),
"Malay": LangInfo("Malay", "zsm_Latn", "ms"),
"Dutch": LangInfo("Dutch", "nld_Latn", "nl"),
"Norwegian": LangInfo("Norwegian", "nob_Latn", "no"),
"Polish": LangInfo("Polish", "pol_Latn", "pl"),
"Portuguese": LangInfo("Portuguese", "por_Latn", "pt"),
"Russian": LangInfo("Russian", "rus_Cyrl", "ru"),
"Swedish": LangInfo("Swedish", "swe_Latn", "sv"),
"Swahili": LangInfo("Swahili", "swh_Latn", "sw"),
"Turkish": LangInfo("Turkish", "tur_Latn", "tr"),
"Chinese": LangInfo("Chinese", "zho_Hans", "zh"),
}
def get_nllb_code(lang_display: str) -> str:
info = LANG_MAP.get(lang_display)
if info is None:
raise ValueError(f"Unknown language: {lang_display!r}")
return info.nllb
def get_whisper_code(lang_display: str) -> str:
info = LANG_MAP.get(lang_display)
if info is None:
raise ValueError(f"Unknown language: {lang_display!r}")
return info.whisper
def whisper_code_to_display(whisper_code: str) -> str | None:
for info in LANG_MAP.values():
if info.whisper == whisper_code:
return info.display
return None
def nllb_code_to_display(nllb_code: str) -> str | None:
for info in LANG_MAP.values():
if info.nllb == nllb_code:
return info.display
return None