Каждый элемент глоссария, тональность бренда, инструкция и конфигурация модели сохраняются для определённой локали. Когда движок обрабатывает запрос на перевод, он определяет, какие из сохранённых записей подходят для локали запроса: ищет точные совпадения, наследует настройки между региональными вариантами и использует fallback, если точной записи нет. Один и тот же механизм разрешения работает для всех четырёх типов конфигурации.
Как это работает#
При вводе локали приводятся к каноническому виду, а затем сохраняются и возвращаются именно в этой форме. Регистр и разделители нормализуются, подтипы сохраняются.
| Вы вводите | Сохраняется как |
|---|---|
EN | en |
en_US | en-US |
sr_Latn-RS | sr-Latn-RS |
zh-cn | zh-CN |
Сопоставление работает в обе стороны по границе подтипов: сохранённая локаль применяется к запросу, если коды полностью совпадают или одна локаль является предком другой.
| Сохранено | Применяется к | Не применяется к |
|---|---|---|
de | de, de-DE, de-AT, de-CH | - |
de-DE | de-DE, de | de-AT, de-CH (соседние регионы) |
Обратное наследование
Сценарий, в котором сохранённый de-DE отвечает на запрос с базовым de, чаще всего встречается на практике: большинство движков настроены на полные региональные коды, но получают запросы с базовыми кодами. Поддерживаются оба направления.
Разрешение нескольких совпадений#
Если подходит несколько сохранённых записей, движок ранжирует их и выбирает лучшую:
- Сначала точное совпадение или язык по умолчанию. Для запроса
deпредпочтение отдаётсяde-DE(региону по умолчанию из CLDR для немецкого), а затем базовомуde. - Затем — наиболее специфичный вариант как правило для разрешения ничьей.
- Любой другой подходящий регион остаётся как fallback — если у клиента единственная запись
de-CH, она всё равно будет использоваться для запросаde, когда ничего лучше не найдено, поэтому конфигурация никогда не остаётся невостребованной.
| Запрос | Предпочтительный вариант | Также применяется (fallback) | Исключено |
|---|---|---|---|
de | de-DE, затем de | de-CH, de-AT | - |
de-DE | de-DE, затем de | - | de-AT, de-CH |
de-AT | de-AT, затем de | - | de-DE, de-CH |
Безопасность письменности#
Есть ещё одно правило, которое действует только для элементов глоссария custom_translation, поскольку их текст привязан к конкретной письменности. Базовый язык с неоднозначной письменностью — sr (кириллица или латиница), zh (упрощённая или традиционная) — при записи должен явно указывать письменность (sr-Cyrl, sr-Latn, zh-Hans, zh-Hant). Языкам с единственной письменностью, например de, указывать её не нужно, и de обычно разрешается в de-DE. Элементы non_translatable проходят независимо от письменности.
Пример#
Движок, настроенный на региональные коды (en-US в fr-FR, de-DE, nb-NO), получает запросы с базовыми кодами (fr, de, no):
- Для целевой локали
frбудут выбраны глоссарий, тональность бренда и инструкции изfr-FR— как вариант по умолчанию дляfr, а не как крайний fallback, потому чтоfr-FR— это регион по умолчанию из CLDR для французского. - Исходная локаль
enсовпадает с записямиen-US— сопоставление двустороннее. - Целевая локаль
noне подтягиваетnb-NO.noиnb— это разные языковые подтипы, а не пара регионов; в качестве целевой локали используйтеnb.
Как использовать разрешение локалей в API#
Разрешение происходит автоматически при вызове эндпоинта localize endpoint. Движок сопоставляет sourceLocale и targetLocale из запроса с сохранёнными глоссариями, тональностями бренда, инструкциями и конфигурациями моделей — никаких дополнительных параметров не требуется.
