Добавить язык
Пришёл код, которого мы не знаем. Решите, это новый язык или новый алиас.
Цель: интеграция прислала gsw (швейцарский немецкий) или региональный вариант, которого у нас нет и получила language_not_found.
Сначала: это новый язык или написание существующего?
Это и есть всё решение, и ошибка в нём создаёт дубликат, который тихо расщепит ваши данные.
curl ".../v1/normalize?language=gsw" # known: false — не совпадает вообще ничего
curl ".../v1/normalize?language=de-LI" # known: true, но language.code = "de"
curl ".../v1/languages?q=german" # какие варианты немецкого уже есть?
Warning
known: true не означает, что у нас есть именно этот вариант
Региональный код, которого у нас нет, деградирует до языка, который он уточняет:
de-LI отвечает known: true с language.code: "de". Это намеренно — вызывающий
получает пригодный ответ вместо 404, — но это значит, что проверка «есть ли у нас
этот вариант?» — это language.code, равный тому, что вы спросили, а не known.
- Другой вариант со своим поведением перевода → новый язык.
- Другое написание того, что уже есть (
por-brдляpt-BR,cmnдляzh) → новый алиас. Язык не создавать.
Когда сомневаетесь — выбирайте алиас. Слить два языка потом — ручная работа; удалить лишний алиас — один клик.
Добавить алиас
Admin → Languages → язык → Inbound aliases, введите, Add.
Алиасы хранятся нормализованными, так что POR_BR и por-br — та же строка; достаточно одной.
Если ключ занят, вы получите понятный конфликт с именем текущего владельца. Это правило глобальной уникальности из Aliases and Normalisation делает свою работу: алиас, резолвящийся в два языка, превратил бы входящий резолвинг в подбрасывание монетки.
Добавить язык
Admin → Languages → Add a language: код и название.
Остальное выводится из кода. de-LI становится:
code: de-LI kind: regional
script: — region: LI
base_language_code: de
Регистр на вводе не важен — zh_hant_hk сохранится как zh-Hant-HK.
Используйте каноническую форму BCP-47
Сначала язык, потом скрипт (с заглавной), потом регион (прописными): sr-Latn-RS, а не sr-RS-Latn. Сервис всё равно переставит, но совпадение с сохранённой формой держит ваши собственные записи опрятными.
Дальше проверьте, что будут отправлять провайдеры
Страница нового языка перечисляет всех провайдеров и то, что каждый получит. Свежий региональный язык обычно показывает base_language везде — de-LI → de.
Это разумный дефолт. Закрепите те, которым это нужно: см. Закрепить код провайдера.
Удаление
Язык с маппингами провайдеров удалить нельзя — вы получите конфликт с их количеством. Сначала уберите маппинги. Удаление через каскад тихо потеряло бы конфигурацию, которой никто не собирался лишаться.
Чтобы вывести язык из оборота без удаления, снимите Active. Он исчезнет из выборок ?active=true, но продолжит резолвиться, так что существующие записи останутся читаемыми.
Далее
- Language Catalog — что уже есть