Провайдеры и вендоры
26 провайдеров, почему 106 строк консоли свернулись в них, и как выбирался исходящий код.
curl "https://languages.service.custom.mt/v1/providers"
curl "https://languages.service.custom.mt/v1/providers/deepl_api"
curl "https://languages.service.custom.mt/v1/providers/deepl_api/languages?effective=true"
Каталог
Коды провайдеров — те же, что в provider_credentials. Один идентификатор резолвит кред там и код языка здесь; вызывающему не нужно переводить между двумя схемами именования.
| Вендор | Провайдеры |
|---|---|
| OpenAI | openai_api |
| Anthropic | anthropic_api |
| Google Cloud | google_translate, gemini_api |
| Microsoft Azure | microsoft_translator |
| Amazon Web Services | amazon_translate |
| DeepL | deepl_api |
| Translated | modernmt_api, lara_api |
| LanguageWire | languagewire_api |
| SYSTRAN | systran_translate |
| Tencent | tencent_transmart |
| Alibaba Cloud | alibaba_translate |
| Baidu | baidu_translate |
| Naver | papago_translate |
| Supertext | supertext_translate |
| XL8 | xl8_translate |
| Tarjama | tarjama_mt |
| Tahrirchi | tilmoch_api, sayqalchi_api |
| Widn.AI | widn_tower_anthill, widn_tower_sugarloaf, widn_tower_vesuvius |
| Internal | custom_finetuned_mt |
| Yandex Cloud | yandex_translate ⚠ |
| Pangeanic | pangea_mt ⚠ |
Warning
in_credentials_catalog: false
yandex_translate и pangea_mt несут маппинги консоли — у одного Yandex их 102, — но записи в provider_credentials ещё не имеют. Они оставлены здесь, чтобы существующий трафик продолжал резолвиться, и помечены в API, чтобы вызывающий видел: маппинг есть, контракта на креды за ним нет.
Почему 106 строк консоли стали 26
В таблице translation_provider консоли одна строка на модель: OpenAI GPT 4o-2024-11-20, OpenAI GPT 5-mini-2025-08-07, Gemini 2.5 Pro и так далее — плюс строки *_in_sys / *_out_sys, которые являются биллинговыми счётчиками, а не движками.
Строки моделей сворачиваются в провайдера API своего вендора, потому что поддержка языков — свойство эндпоинта вендора, а не чекпоинта за ним. provider_credentials уже трактует модель как поле конфигурации model_id под одним кредом, а дублировать таблицу на 130 языков для каждой модели означало бы 17 таблиц, которые надо держать синхронными для одного только OpenAI.
Биллинговые счётчики отброшены: они несут ссылки на региональные коды, скопированные из родительской модели, и их импорт удваивал бы каждый маппинг.
Для вызывающих ничего не ломается — каждый свёрнутый service_name остаётся алиасом провайдера:
curl ".../v1/resolve?provider=OpenAiGPT4o_2024_11_20_Provider&language=zh-CN"
# → { "provider": "openai_api", "code": "zh-CN", … }
AutoML-провайдеры консоли сворачиваются так же: GoogleAutoMLProvider адресует google_translate, LaraAutoMLProvider — lara_api. Их коды идут в те же API вендоров.
Как выбирался исходящий код
Для 97 пар (провайдер, язык) консоль предлагала несколько кодов. Победитель выбирается так:
- флаг
is_defaultконсоли на региональном коде, - равен собственному каноническому коду языка — когда конкурирует несколько написаний и одно из них то, как мы уже называем язык, отправлять другое означает расходиться без причины,
- каноничность BCP-47 (
es-419надES-LA), - самый новый легаси-провайдер, его выбравший, — строки более поздних моделей курировались свежее, чем образца 2023 года,
- наименьший id регионального кода — совпадает с
.first()консоли при ничьих.
В отличие от канонического кода языка, здесь более короткий тег никогда не имеет преимущества сам по себе. Если API DeepL хочет zh-Hans и только zh-Hans — строка консоли, это говорящая, и есть факт; правило 2 срабатывает только когда несколько написаний действительно конкурируют.
Каждое написание-проигравший становится входящим алиасом, так что ничто, что резолвится сегодня, не перестаёт. Все 97 решений перечислены в data/seed/REPORT.md.
Явное против эффективного
# только пары, которые кто-то настроил
curl ".../v1/providers/deepl_api/languages"
# все языки, включая фолбэки — то, что провайдер действительно получит
curl ".../v1/providers/deepl_api/languages?effective=true"
У DeepL 3 явные строки и 348 эффективных. Это не пробел: базовым языкам строка не нужна, а региональные фолбэчатся по Fallback Policies. Полосы покрытия в админке показывают распределение по провайдерам.
Далее
- Fallback Policies — что происходит, когда ничего не настроено
- Подключить провайдера