Каталог языков
Что в каталоге, откуда оно и что делать со странными строками.
348 языков, 237 алиасов, засеяно из базы легаси-консоли и курируется дальше.
Просмотр
curl "https://languages.service.custom.mt/v1/languages?q=portuguese"
curl "https://languages.service.custom.mt/v1/languages?kind=regional&limit=50"
curl "https://languages.service.custom.mt/v1/languages/pt-BR"
q ищет по названию, каноническому коду и каждому алиасу, так что Brazil, pt-br и por-br находят ту же строку.
Что несёт строка языка
| Поле | Значение |
|---|---|
code |
канонический код BCP-47 — храните именно его |
name |
английское отображаемое название |
kind |
base (без квалификатора) или regional |
base_language_code |
для регионального варианта — язык, который он уточняет |
script, region |
распарсено из кода, для фильтров |
is_active |
false для строк, сохранённых для трассировки, но непригодных |
also_known_as |
названия, слитые из дубликатов консоли |
aliases |
все входящие написания, резолвящиеся сюда |
legacy_language_ids |
значения cabinet_language.id, из которых сделана строка |
legacy_language_ids — след аудита назад в консоль. Больше одного id означает, что сид слил дубликаты.
Слияния
Пять пар строк консоли описывали тот же язык под разными id и были объединены:
| Канонический | Оставлено | Влито |
|---|---|---|
fa |
Persian (41) | Persian (222) — прямой дубликат |
uk |
Ukrainian (320) | Ukrainian (Ukraine uk) (162) |
zh-CN |
Chinese (Simplified) (217) | Chinese (PRC) (271) |
zh-TW |
Chinese (Traditional) (176) | Chinese (Taiwan) (278) |
nb |
Norwegian (Bokmal) (221) | Norwegian (Norway) (203) |
Оба id остаются в legacy_language_ids, а отброшенное название — в also_known_as, так что поиск по любому id консоли по-прежнему попадает правильно.
Неактивные строки
Шесть строк консоли не имели ни двухбуквенной аббревиатуры, ни какого-либо регионального кода — вообще никакого кода, так что в них ничего не могло зарезолвиться:
Serbian (Cyrillic-Trados) · Chinese (SmartCat) · Serbian (Cyrillic-XTM) · Serbian (Latin-Trados) · Chinese (Hong Kong-2) · Chin
Они импортированы с кодом-заглушкой x-… и is_active: false, а не выброшены, — информация не потеряна, и оператор может дать им настоящий код из админки. Отфильтровать: ?active=true.
Большинство — специфичные для интеграций дубликаты уже существующих языков (Serbian (Cyrillic-Trados) — это sr-Cyrl). Chin — реальная языковая семья, которой так и не дали код.
Выбор канонического кода
Где язык имел несколько написаний, каноническое выбирается так:
- пригодная двухбуквенная
abbreviation— такие строки и есть базовые языки ISO 639-1, - иначе: флаг
is_defaultконсоли — явный человеческий выбор, - далее меньше сабтегов — канонический код не должен нести квалификатор, который ему не нужен. Себуанский —
ceb, а неceb-Latn-PH; сербская кириллица —sr-Cyrl, а неsr-Cyrl-RS. Отброшенные квалификаторы остаются алиасами, так что точность на входе сохранена, - далее самое каноническое написание BCP-47,
- далее наименьший легаси-id — то, что неупорядоченный
.first()консоли отдаёт сегодня, так что ничьи сохраняют текущее поведение.
Обратите внимание: это не то, как выбирается исходящий код провайдера. Что принимает API провайдера — факт об этом API, и длина здесь ни при чём; см. Providers and Vendors.
Известные пробелы, которые стоит исправить
Каталог унаследовал слепые пятна консоли. Они видны в админке на экране покрытия и являются хорошими первыми правками:
Baidu и традиционный китайский
У Baidu собственный набор кодов (zh, cht, jp, kor), не BCP-47. Без явной строки zh-TW фолбэчится в zh — это то, что прод шлёт сегодня, и это неправильно: Baidu хочет cht. Закрепить — одна правка; см. Закрепить код провайдера.
[!warning] Региональные английский и португальский в DeepL
У DeepL три явные строки (zh-CN, zh-TW, pt-BR). en-GB фолбэчится в en, хотя DeepL принимает и различает EN-GB и EN-US.
Ни то, ни другое не является регрессом — оба совпадают с текущим поведением консоли. Просто теперь они видны.
Далее
- Aliases and Normalisation — как коды попадают в эти строки
- Добавить язык