Многоязычность (i18n)¶
Продукты и документация экосистемы обслуживаются на нескольких языках. Эта страница объясняет языковую политику и её техническую реализацию.
Языковая политика¶
| Уровень | Языки |
|---|---|
| Обязательно | Монгол (mn) · English (en) |
| Для основных продуктов | + 中文 (zh) · Русский (ru) |
| Для документации уровня экосистемы | Монгольский + шесть официальных языков ООН |
Монгольский — исходный язык: оригинальный текст пишется по-монгольски и переводится наружу.
Шесть официальных языков ООН — это: العربية (ar) · 中文 (zh) · English
(en) · Français (fr) · Русский (ru) · Español (es). Этот сайт
(документация уровня экосистемы) выходит на монгольском плюс эти шесть — всего
на семи языках.
Почему именно эти языки?
Читатели документации уровня экосистемы — не только внутренние разработчики: среди них международные партнёры, донорские организации, органы стандартизации и зарубежные интеграторы. Шесть языков ООН дают наибольший глобальный охват и являются нейтральным выбором, который не даёт преимущества ни одной стране.
Глубокая техническая документация конкретной платформы (схемы endpoint'ов, справочник SDK) под эту политику не подпадает — она остаётся MN + EN внутри своего репозитория.
i18n в продуктах¶
Приложения определяют язык пользователя в таком порядке:
- Настройка пользователя (сохранённая в профиле),
Accept-Languageбраузера,- Язык по умолчанию (
mn).
ИИ-помощник отвечает на языке пользователя — на том, на котором пришёл вопрос.
Два слоя словаря¶
Словарь находится в двух местах, и понимать границу между ними важно:
| Словарь | Где | Размер |
|---|---|---|
| Общий — вход, меню, админка, eID | @gerege/ui-core |
846 ключей × 7 языков |
| Платформенный — терминология конкретной предметной области | lib/<platform>I18n.ts |
У каждой платформы свой, обычно 2–4 языка |
Правило: общий словарь знает только общую поверхность. Лексика выписок и IBAN в кошельке, каталог API портала разработчика, терминология бизнес-процессов Ring — всё это лежит в собственном словаре приложения.
Причина — стоимость: если поместить 1,104 термина Ring в общий словарь, их понесут и kiosk, и POS, и кошелёк, причём с каждым добавленным языком эта стоимость вырастает семикратно.
Платформенный словарь для непереведённых языков откатывается на английский — поэтому интерфейс может быть на семи языках, тогда как маркетинговый текст и отраслевая терминология существуют на меньшем их числе.
Язык интерфейса ≠ язык содержимого
Расширение словаря с четырёх языков до семи сломало каждое место, где было
написано Record<Lang, …>: маркетинговый текст landing-страницы, описания в
каталоге API — их пишет человек, и они не масштабируются так, как
интерфейс. В таких местах набор языков объявляется явно, например как
LANDING_LANGS.
i18n в документации¶
Сайт документации каждого репозитория использует MkDocs Material +
mkdocs-static-i18n.
Суффиксная схема¶
Перевод оформляется добавлением кода языка к имени файла:
docs/
├── index.md ← Монгол (по умолчанию)
├── index.ar.md ← العربية
├── index.zh.md ← 中文
├── index.en.md ← English
├── index.fr.md ← Français
├── index.ru.md ← Русский
└── index.es.md ← Español
Конфигурация:
plugins:
- i18n:
docs_structure: suffix
fallback_to_default: true
reconfigure_material: true
reconfigure_search: true
languages:
- locale: mn
default: true
name: Монгол
build: true
- locale: en
name: English
build: true
- locale: ar
name: العربية
build: true
# … zh · fr · ru · es аналогично
Язык по умолчанию собирается в корне сайта (/), остальные — по подпутям
(/en/, /ar/, /zh/, /fr/, /ru/, /es/).
Fallback¶
fallback_to_default: true — непереведённая страница показывает содержимое на
языке по умолчанию. Поэтому даже при неполном переводе сайт остаётся
целым, и 404 не появляется.
Это практичное решение: документация постоянно растёт, а перевод отстаёт. Ждать, пока будут переведены сразу все страницы, равносильно тому, чтобы не публиковать документацию вовсе.
Перевод навигации¶
Названия пунктов меню лежат не в содержимом страниц, а в mkdocs.yml, поэтому
переводятся отдельно для каждой локали:
- locale: en
nav_translations:
Архитектур: Architecture
Платформууд: Platforms
- locale: ar
nav_translations:
Архитектур: البنية المعمارية
Платформууд: المنصّات
Если, добавив страницу, забыть внести nav_translations во все шесть
локалей, пункт меню останется на монгольском — сборка не упадёт, так что
заметить это можно только глазами.
Письмо справа налево (RTL)¶
العربية читается справа налево. Material распознаёт локаль ar, проставляет
<html dir="rtl"> и сам разворачивает меню, заголовки и порядок в таблицах —
отдельно указывать direction не нужно.
При этом блоки кода и ASCII-диаграммы и в RTL остаются слева направо. Так и должно быть: техническая запись (URL, команды, YAML) при смене направления теряет смысл.
Якоря для кириллических заголовков¶
Стандартный slugify выбрасывает кириллицу
Штатный slugify расширения toc в Python-Markdown удаляет не-ASCII
символы. Из-за этого заголовок ## Танилт получает пустой id, и
внутристраничная ссылка (#танилт) перестаёт работать.
Решение — slugify, сохраняющий unicode:
Этот сайт настроен так же.
Порядок перевода¶
При добавлении новой документации:
- Напишите исходный текст по-монгольски — источник всегда монгольский.
- Стабилизируйте монгольскую версию строгой сборкой (проверяются ссылки и якоря).
- Затем переведите сразу на шесть языков. Перевод страницы по частям разводит языки между собой.
Доводите одну страницу до конца на всех языках
Работать лучше постранично, а не по языкам: когда один документ переводится на шесть языков одновременно, терминология, структура и строки таблиц остаются одинаковыми. При обратном подходе — «сначала все страницы по-английски» — языки, переведённые позже, будут догонять уже изменившийся исходный текст.
Что переводится, а что нет¶
| Переводится | Остаётся как есть |
|---|---|
| Основной текст, заголовки, значения в таблицах | Доменные имена (sso.gerege.mn) |
| Пояснения, предупреждения, советы | Имена репозиториев (template-gerege-mn) |
| Поясняющие подписи внутри диаграмм | Код, YAML, команды, пути endpoint'ов |
| Заголовки таблиц | Названия продуктов (eID Mongolia, G-Sign) |
| Текст на бейджах статуса | Названия стандартов (OIDC, PKCE, RFC 3161) |
Имена файлов и структура каталогов не переводятся никогда — это
platforms/sso.ru.md, а не платформы/sso.md. Благодаря этому путь в URL при
переключении языка не меняется, и глубокие ссылки продолжают работать.
Состояние этого сайта¶
Все страницы документации уровня экосистемы готовы на семи языках:
| Локаль | Язык | Путь | Состояние |
|---|---|---|---|
mn |
Монгол (по умолчанию) | / |
✅ полностью |
ar |
العربية | /ar/ |
✅ полностью |
zh |
中文 | /zh/ |
✅ полностью |
en |
English | /en/ |
✅ полностью |
fr |
Français | /fr/ |
✅ полностью |
ru |
Русский | /ru/ |
✅ полностью |
es |
Español | /es/ |
✅ полностью |
fallback_to_default остаётся включённым: когда добавляется новая страница, а
перевод отстаёт, эта страница покажет монгольский оригинал, и сайт останется
целым.
Если вы заметили ошибку или неудачную формулировку, пришлите PR в репозиторий — подробности на странице Платформа этой документации.