Головна/Рецепти/Резолвінг мови ENУКРРУС API-довідник (ReDoc) ↗

Резолвінг мови

Один виклик, з поясненням кожного поля відповіді.

Мета: у вас є провайдер і якесь написання мови. Потрібен рядок для надсилання.

curl "https://languages.service.custom.mt/v1/resolve?provider=deepl_api&language=pt_BR"
{
  "query": "pt_BR",
  "provider": "deepl_api",
  "language": "pt-BR",
  "code": "PT-BR",
  "supported": true,
  "match": "exact",
  "matched_alias": null,
  "via_language": null
}
Поле Для чого
code відповідь — покласти в запит до провайдера
language канонічний код — зберігати саме його, а не query
supported false означає «запит не робити»
match наскільки надійна відповідь — див. Resolution Ladder
matched_alias який аліас спрацював, коли query не був канонічним
via_language яка мова дала код, для variant / base_language

Python

import httpx

BASE = "https://languages.service.custom.mt"


def provider_code(provider: str, language: str) -> str:
    response = httpx.get(
        f"{BASE}/v1/resolve", params={"provider": provider, "language": language}, timeout=5.0
    )
    response.raise_for_status()
    body = response.json()
    if not body["supported"]:
        raise ValueError(f"{provider} не підтримує {body['language']}")
    return body["code"]

Два режими відмови

Невідомий код — 404 з error.code == "language_not_found". Або код справді невідомий, або йому потрібен аліас; див. Додати мову.

Відома пара, відмовлено — 200 з supported: false і code: null. Хтось зафіксував, що ця пара не працює. Пропустіть провайдера, не ретрайте.

try:
    code = provider_code("deepl_api", raw_code)
except httpx.HTTPStatusError as exc:
    if exc.response.status_code == 404:
        log.warning("unknown language code", extra={"code": raw_code})
        return None
    raise

Не пропускайте виклик, коли код «виглядає нормально»

pt-BR виглядає нормально й нормальний для DeepL. Для Amazon це pt. Сенс постійного виклику в тому, що ваш код перестає знати, які провайдери примхливі.

Далі