5afa2dfb38
piper reads a Russian sentence with a Russian voice, and a Latin service id inside it comes out spelled, mangled or read as if it were a Russian word: "Vikunja", "SearXNG", "homesrv". The lever available is the text, so the dictionary maps a name to how it should be spelled for the voice to say it, and mavttsd applies it at the last edge before piper — every caller's text passes through that one point, and nothing upstream has to know how a name sounds. Data, not code. deploy/tts-lexicon.json ships 29 names; adding one needs a restart of mavttsd and no rebuild of the daemon that produced the text. Off unless -lexicon is set, like every other optional capability, and a path that is set and unreadable stops startup — saying names wrong in silence is the failure it exists to remove. Two details worth keeping: the alternation is sorted longest-first, or "Home Assistant" reads as "Хоум Assistant"; and the boundaries are written out rather than left to \b, which is ASCII-only and never fires next to a Cyrillic letter. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
31 lines
851 B
JSON
31 lines
851 B
JSON
{
|
|
"Maven": "Мэйвен",
|
|
"Nexus": "Нексус",
|
|
"Praxis": "Праксис",
|
|
"Hexis": "Хексис",
|
|
"Vikunja": "Викунья",
|
|
"SearXNG": "сёрчиксэнджи",
|
|
"Kiwix": "Кивикс",
|
|
"Gitea": "Гитея",
|
|
"Home Assistant": "Хоум Ассистент",
|
|
"Docker": "Докер",
|
|
"Telegram": "Телеграм",
|
|
"ntfy": "энтифай",
|
|
"homesrv": "хоумсёрв",
|
|
"workpc": "воркписи",
|
|
"whisper": "виспер",
|
|
"piper": "пайпер",
|
|
"llama-server": "лама сервер",
|
|
"Qwen": "Квен",
|
|
"CalDAV": "калдав",
|
|
"IMAP": "аймап",
|
|
"API": "эй-пи-ай",
|
|
"CPU": "си-пи-ю",
|
|
"GPU": "джи-пи-ю",
|
|
"RAM": "оперативная память",
|
|
"SSD": "эс-эс-ди",
|
|
"uptime": "аптайм",
|
|
"backup": "бэкап",
|
|
"deploy": "деплой"
|
|
}
|