Каталог мов
Що в каталозі, що означає кожне поле мови і які рядки варто знати.
503 мови і 324 вхідні аліаси, куровані під тих провайдерів, якими платформа справді користується.
Перегляд
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 знаходять той самий рядок.
| Параметр | Що робить |
|---|---|
q |
вільний текст по назві, канонічному коду й аліасах |
kind |
base або regional |
active |
true ховає рядки, збережені лише для трасування |
limit, offset |
пагінація; total у відповіді — кількість без пагінації |
Що несе рядок мови
| Поле | Значення |
|---|---|
code |
канонічний код BCP-47 — зберігайте саме його |
name |
англійська відображувана назва |
kind |
base (без кваліфікатора) або regional |
base_language_code |
для регіонального варіанта — мова, яку він уточнює |
script, region |
розпарсено з коду, для фільтрів |
is_active |
false для рядків, збережених для трасування, але непридатних |
also_known_as |
інші назви, під якими відома та сама мова |
aliases |
усі вхідні написання, що резолвляться сюди |
code, kind і base_language_code — три поля, які вирішують, як зарезолвиться пара; див. Resolution Ladder. Решта — описові.
Одна мова, кілька назв
Ту саму мову різні інструменти часто називають по-різному — «Norwegian (Bokmål)» і «Norwegian (Norway)», «Chinese (Simplified)» і «Chinese (PRC)». Каталог тримає один рядок на мову, а інші назви — в also_known_as, тож пошук за будь-якою з них влучає.
Неактивні рядки
Зараз усі рядки каталогу активні. Параметр active і поле is_active лишаються частиною контракту API: мову можна деактивувати, не видаляючи, тож викликачеві, який будує список мов, варто й далі фільтрувати через ?active=true, а не покладатися на те, що цей інваріант вічний.
Вибір канонічного коду
Де мова має кілька правдоподібних написань, канонічне — значення в code, те, яке ви зберігаєте, — обирається так:
- придатний дволітерний код ISO 639-1, якщо мова його має,
- далі менше субтегів — канонічний код не має нести кваліфікатор, який йому не потрібен. Себуанська —
ceb, а неceb-Latn-PH; сербська кирилиця —sr-Cyrl, а неsr-Cyrl-RS, - далі найканонічніше написання BCP-47.
Відкинуті кваліфікатори лишаються аліасами, тож точність на вході збережена: ceb-Latn-PH досі резолвиться й віддає ceb.
Зверніть увагу: це не те, як обирається вихідний код провайдера. Що приймає API провайдера — це факт про той API, і довжина тут ні до чого; див. Providers and Vendors.
Пари, на які відповідає драбина, а не рядок
Більшість пар (провайдер, мова) нині мають явний рядок — налаштований прямо з того, що документує кожен провайдер. Решта резолвляться через драбину фолбеків, і це нормально: драбина зрізає регіональний тег до базової мови, яку провайдер напевно розуміє, і для таких пар це правильна відповідь.
Де вона безсила — це провайдер, чиї прийнятні коди взагалі не BCP-47. Зрізати zh-TW до zh — розумна здогадка у світі BCP-47; але це просто не той словник для API, яке пише традиційну китайську як cht. Такі пари мають явні рядки:
| Провайдер | Мова | Код | Чому драбина не впоралась |
|---|---|---|---|
baidu_translate |
zh-TW |
cht |
власний набір кодів Baidu — zh, cht, jp, kor |
baidu_translate |
ja |
jp |
базова мова, тож драбина віддала б ja без змін |
baidu_translate |
ko |
kor |
те саме |
deepl_api |
en-GB |
EN-GB |
DeepL розрізняє регіональні англійські |
deepl_api |
en-US |
EN-US |
те саме |
Усі п'ять відповідають match: exact.
У baidu_translate + zh-CN рядка свідомо немає: слово Baidu для спрощеної китайської — це zh, тобто рівно те, що виводить драбина.
Урок узагальнюється. Якщо прийнятні коди провайдера — це власний словник, а не конвенція написання, чекайте явних рядків і ставтесь до виведеної відповіді там з підозрою: match і каже, що саме ви отримали. Див. Resolution Ladder.
Далі
- Aliases and Normalisation — як коди потрапляють у ці рядки
- Resolution Ladder — як відповідається пара