Резолвінг мови
Один виклик, з поясненням кожного поля відповіді.
Мета: у вас є провайдер і якесь написання мови. Потрібен рядок для надсилання.
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. Сенс постійного виклику в тому, що ваш код перестає знати, які провайдери примхливі.
Далі
- Резолвінг усієї задачі — обидві мови за один раунд-тріп