Локализация интерфейса — одной командой git push

Тетива переводит JSON, ARB, .strings и XML на казахский, узбекский, турецкий и английский. CI блокирует мерж, если плейсхолдер сломан или не хватает plural-формы. CLI — open-source, исходники на GitHub: посмотри сам, как устроено.

tetiva · push · 4 locales · 1 commit
Терминал
~/projects/checkout
$ tetiva push --targets kk,uz,tr,en
→ Парсинг en.json (i18next)... ok
→ Дельта: 47 новых ключей, 3 изменено
→ Маршрутизация → Qwen (kk, uz, tr)
→ Маршрутизация → Claude (en)
→ Translation memory... 12 совпадений
→ Валидация плейсхолдеров... ok
→ Plural-формы (CLDR)... ok
PR #247 открыт
Pull request
i18n: add kk, uz, tr, en translations for checkout #247
tetiva-bot · 4 files changed · 47 keys · 188 translations
locales/kk.json
"cart.items": "{count} items in cart",
"cart.items": {
"one": "{count} зат себетте",
"other": "{count} зат себетте"
},
✓ All checks passed
tetiva/structural-eval · 4.2s
$ npm install -g @tetiva/cli

Поддержка Python, Go, Rust — после первых релизов CLI. См. документацию →

Контекст

Между фронтенд-инженером и переводчиком — слишком много шагов

Типичный поток локализации в российской продуктовой команде: продакт пишет английскую копию в гугл-доке, дизайнер вставляет её в Figma, фронтендер выносит в JSON-файл, кто-то заводит фрилансера на Profi.ru или Kwork, скидывает ему JSON, через неделю получает обратно тоже JSON — где плейсхолдер {count} теперь называется {количество}, где для русского три plural-формы свернулись в одну, и где казахский локаль вообще не вернулся, потому что переводчик не нашёл носителя.

Тетива — это другой поток. Ты добавляешь ключ в исходный файл, делаешь tetiva push, получаешь pull request со всеми целевыми локалями. Плейсхолдеры на месте, plural-формы соответствуют CLDR, ICU MessageFormat валиден. CI ловит ошибки до мержа, не пользователь — после релиза.

Было · 6 шагов copy в Google Doc Figma JSON в репо фрилансер правки в Excel обратно в репо с поломанными {placeholder} Стало · 2 шага через CLI и PR-review tetiva push из терминала · одна команда PR с переводами все локали, валидация, мерж CLI + LLM + валидаторы
Чем отличается

Что Тетива делает иначе

01 · Языки

Языки, на которых остальные ломаются

Google Translate путает узбекскую кириллицу и латиницу. DeepL не поддерживает казахский. YandexGPT хорош на русском, но проседает на турецком техническом тексте.

Тетива маршрутизирует каждую языковую пару в LLM, который тренировался на этих данных — Qwen для тюркских, Claude и GPT для нюансной UX-копии EN↔RU.

02 · Валидация

Plural-формы и плейсхолдеры — без ручной проверки

В русском три формы множественного числа. В казахском CLDR-граница one/other не совпадает с английской — 21 пользователь по правилам казахского попадает в one, и наивный i18next эту строку молча ломает.

Тетива видит, что в исходной строке нужны plural-формы, и добавляет все категории, которые требует целевая локаль. CI проверяет каждый плейсхолдер: открытые {name}, закрытые </strong>, ICU-конструкции, HTML-теги. Поломанная форма не доезжает до релиза.

Доказательство

Реальный diff из реального PR

i18n: add kk, tr, uz translations for checkout #247
locales/kk.json
{
...
"cart.items": "{count} items in cart",
"cart.items": {
"one": "{count} зат себетте",
"other": "{count} зат себетте"
},
"checkout.discount": "Save {percent}%",
"checkout.discount": "{percent}% үнемдеңіз",
"auth.welcome": "Welcome back, {name}!",
"auth.welcome": "Қайта оралуыңызбен, {name}!"
}

CI · tetiva/structural-eval

Все плейсхолдеры на месте3/3
Plural-формы соответствуют CLDRkk: one, other
ICU MessageFormat валиден
HTML-теги сбалансированы
Длина строк не превышает бюджет UI
All checks passed · 4.2s

Это не пример из документации — это типичный pull request, который Тетива открывает после tetiva push --target kk,tr,uz. Один коммит, несколько локалей, все валидации зелёные. Ты ревьюишь или мержишь — на твой выбор.

Аудитория

Если ты узнаёшь себя — Тетива для тебя

Сценарий 01 · Выход на новые рынки

У команды есть продукт, который уже работает на русском, и три рынка на которые надо выйти в течение полугода: Казахстан, Узбекистан, Турция. Найм переводчиков на эти языки — отдельный проект. Можно начать с LLM-перевода, добавить редактуру носителем там, где важна копия.

Сценарий 02 · Долг локализации

У команды семь активных локалей, и каждый релиз кто-то ругается, что строки не переведены, плейсхолдер сломан, или в немецком вылез английский фрагмент. Раз в три месяца локализационный долг разгребается вручную. Хочется чтобы это не повторялось.

Сценарий 03 · Платим из России

Команда продаёт в России, и платит ООО — нужны фискальные чеки по 54-ФЗ, договор на русском, оплата в рублях через YooKassa.

Trust signals

Кто за продуктом

Юридическое лицоООО «Русское облако»
ИНН 6732079480 · ОГРН 1146733018728
ПлатежиYooKassa · рубли · фискальные чеки 54-ФЗ
ДанныеСерверы в РФ · 152-ФЗ
Открытый кодgithub.com/tetiva-dev/cli

Подробности — на /legal.

Тарифы

В рублях, без скрытой математики

ТирЦенаДля кого
Free0 ₽До 500 ключей. Без карточки.
Solo990 ₽/мес5 000 ключей.
Team4 990 ₽/месДо 10 человек, 25 000 ключей.

Подробности на /pricing →

Установить

Установить и попробовать

Free-тир: 500 ключей, без карточки, без триал-периода.

$ npm install -g @tetiva/cli $ tetiva init $ tetiva push

Поддерживаются JSON (i18next, ICU), .strings, .stringsdict, Android XML, Flutter ARB, .properties. POT/PO и XLIFF — в ближайшем релизе.

Документация →