|
|
# Display names and locale rules (AutoHero)
|
|
|
|
|
|
## Town names on Russian UI
|
|
|
|
|
|
For locale `ru`, **town names are not translated by meaning**. They use **pragmatic Cyrillic transliteration** of the English fantasy names (the same names shown in `en`). This keeps a single world identity across languages and avoids awkward calques (for example, not «Зола-крепость» for Cinderkeep).
|
|
|
|
|
|
Guidelines:
|
|
|
|
|
|
1. **Read like the English name**: consonants and vowels map so a Russian player can recognize the original (Willowdale → Виллоудейл, Cinderkeep → Синдеркип).
|
|
|
2. **Keep word boundaries** where the English has them (Thorn + watch → Торнвотч; Red + cliff → Редклифф).
|
|
|
3. **Do not translate semantic meaning** of the compound (no «красная скала», «звездопад», etc.) for these labels.
|
|
|
4. **Stable keys**: DB/API use `towns.name_key` (e.g. `town.cinderkeep.v1`); only the `ru` string in `contentLabels` / UI bundle changes.
|
|
|
|
|
|
Current Russian labels (transliteration target):
|
|
|
|
|
|
| `name_key` | English | Russian (UI) |
|
|
|
|------------|---------|----------------|
|
|
|
| `town.willowdale.v1` | Willowdale | Виллоудейл |
|
|
|
| `town.thornwatch.v1` | Thornwatch | Торнвотч |
|
|
|
| `town.ashengard.v1` | Ashengard | Ашенгард |
|
|
|
| `town.redcliff.v1` | Redcliff | Редклифф |
|
|
|
| `town.boghollow.v1` | Boghollow | Богхоллоу |
|
|
|
| `town.cinderkeep.v1` | Cinderkeep | Синдеркип |
|
|
|
| `town.starfall.v1` | Starfall | Старфолл |
|
|
|
| `town.mossharbor.v1` | Mossharbor | Моссхарбор |
|
|
|
| `town.emberwell.v1` | Emberwell | Эмбервелл |
|
|
|
| `town.frostmark.v1` | Frostmark | Фростмарк |
|
|
|
| `town.duskwatch.v1` | Duskwatch | Дасквотч |
|
|
|
|
|
|
Quest descriptions in Russian should use **these same spellings** when they mention a town.
|
|
|
|
|
|
## Quest copy
|
|
|
|
|
|
- Server stores English `title` / `description` on `quests` (authoring and fallback).
|
|
|
- Client resolves text by `quests.quest_key` using `frontend/src/i18n/quests.en.yml` and `quests.ru.yml` (loaded in `loadLocales.ts` together with `en.yml` / `ru.yml`). Keys must match `quest_key` in the database; EN and RU files must have the same set of keys (validated at startup).
|
|
|
- If a key is missing in YAML, the client falls back to the server string (usually English).
|
|
|
- For `visit_town` rows, the API includes `quest.targetTownId`. The quest log uses `townDisplayById()` so the destination city name follows the town transliteration rules above, not the raw English `targetTownName` from SQL.
|
|
|
|
|
|
## Related files
|
|
|
|
|
|
- Town labels and `towns.id` map: `frontend/src/i18n/contentLabels.ts`
|
|
|
- Quest strings: `frontend/src/i18n/quests.en.yml`, `frontend/src/i18n/quests.ru.yml`, `localizedQuestText` in `frontend/src/i18n/loadLocales.ts`
|