Каталог мов
Що в каталозі, звідки воно і що робити з дивними рядками.
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 — як коди потрапляють у ці рядки
- Додати мову