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