@localizify/cli
Локализация из терминала
Загружайте новые ключи, переводите их с помощью ИИ и скачивайте готовые файлы обратно в репозиторий. Один конфиг, четыре команды, одинаково работает на ноутбуке и в CI.
$ npm i -D @localizify/cli
$ npx @localizify/cli push pushed src/locale/messages.xlf: 3 new keys, 148 processed $ npx @localizify/cli translate --lang uk,de uk: 3 terms translated de: 3 terms translated $ npx @localizify/cli pull pulled uk -> src/locale/messages.uk.xlf (18342 bytes) pulled de -> src/locale/messages.de.xlf (18911 bytes) $
Установка
Нужен Node.js 20 или новее. Добавьте CLI как dev-зависимость, чтобы вся команда работала с одной версией:
$ npm i -D @localizify/cli
После такой установки команда называется просто localizify. Можно и запустить один раз без установки:
# Or run it without installing $ npx @localizify/cli --help
Авторизация
Создайте API-токен в разделе Настройки → API-токены и передайте его через LOCALIZIFY_TOKEN. Токен, ограниченный одним проектом, имеет доступ только к нему.
$ export LOCALIZIFY_TOKEN=loc_... # Self-hosted or staging only: $ export LOCALIZIFY_HOST=https://localizify.com
Храните токен в окружении или секретах CI. Никогда не коммитьте его и не пишите в конфиг.
Настройка
Добавьте localizify.json в корень репозитория. Пути указываются относительно файла конфига.
{ "projectId": 123, "source": { "provider": "Angular XLIFF", "path": "src/locale/messages.xlf", "lang": "en" }, "files": [ { "provider": "Angular XLIFF", "lang": "uk", "path": "src/locale/messages.uk.xlf" }, { "provider": "Angular XLIFF", "lang": "de", "path": "src/locale/messages.de.xlf" } ] }
projectId· id проекта из его URLsource· файл с исходными строками, его загружает pushfiles· по записи на каждый файл перевода, их используют pull и translateprovider· название формата точно как в окне экспорта, например "JSON Key Value" или "Gettext Po"lang· код языка, добавленного в проект
Команды
Каждая команда читает localizify.json из текущей папки и выводит по строке на результат.
localizify push
Импортирует исходный файл и добавляет только новые ключи. С --with-translations также импортирует строки файла как переводы для source.lang, не трогая существующие.
$ localizify push pushed src/locale/messages.xlf: 3 new keys, 148 processed $ localizify push --with-translations
localizify translate
Переводит все непереведённые термины. Провайдер выбирается через --provider: anthropic (по умолчанию), openai, deepl, google или microsoft; языки ограничиваются через --lang.
$ localizify translate --provider anthropic --lang uk,de uk: 3 terms translated de: 3 terms translated
localizify pull
Скачивает каждый файл из files и записывает его по указанному пути, создавая папки при необходимости.
$ localizify pull pulled uk -> src/locale/messages.uk.xlf (18342 bytes) pulled de -> src/locale/messages.de.xlf (18911 bytes)
localizify status
Показывает число ключей и прогресс по каждому языку.
$ localizify status 151 keys uk 145/151 (96%) de 151/151 (100%)
Запуск в CI
Сохраните токен как секрет CI и запускайте push, translate и pull при каждом мерже. Процесс ниже падает при ошибках API, поэтому неверный токен или лимит тарифа не пройдут незамеченными.
# .github/workflows/i18n.yml name: i18n on: push: branches: [main] jobs: sync: runs-on: ubuntu-latest env: LOCALIZIFY_TOKEN: ${{ secrets.LOCALIZIFY_TOKEN }} steps: - uses: actions/checkout@v4 - uses: actions/setup-node@v4 with: { node-version: 22 } - run: npx @localizify/cli push - run: npx @localizify/cli translate - run: npx @localizify/cli pull - run: git status --porcelain src/locale
Машиночитаемый вывод
Добавьте --json к любой команде, чтобы получить один JSON-объект в stdout для jq или скрипта сборки.
$ localizify status --json {"termsCount":151,"languages":[{"languageCode":"uk","translatedCount":145,"totalCount":151,"progress":96}]}
Справочник
Параметры
| -c, --config <path> | Путь к конфигу. По умолчанию: localizify.json. |
| --with-translations | push: также импортировать переводы из исходного файла. |
| --provider <name> | translate: anthropic, openai, deepl, google или microsoft. По умолчанию: anthropic. |
| --lang <a,b> | translate: коды целевых языков. По умолчанию: все lang из files, кроме исходного. |
| --json | Вывести один JSON-объект вместо текста. |
| -h, --help | Показать справку. |
Коды выхода
| 0 | Успех. |
| 1 | Ошибка API или сети: неверный токен, лимит тарифа или лимит запросов. |
| 2 | Ошибка конфига или параметров. |
CLI работает поверх публичного REST API. Прямые запросы к API и MCP-сервер описаны в разделе Разработчикам.