Перейти к содержимому

CLI

@ownlate/cli отправляет исходные строки наверх и забирает переводы обратно. Формат файла тот же, что читает интеграция с Git, поэтому репозиторий, настроенный для одного, работает и с другим.

Окно терминала
npm install -g @ownlate/cli

Или запуск без установки:

Окно терминала
npx @ownlate/cli <команда>

Есть и образ контейнера:

Окно терминала
docker run --rm -it \
-v "$HOME/.ownlate:/root/.ownlate" \
-v "$(pwd):/app" -w /app \
ownlate/ownlate-cli <команда>
Окно терминала
ownlate login # сохранить ключ API
ownlate init # выбрать проект, записать конфигурацию
ownlate push # отправить исходные строки
ownlate pull # забрать переводы

CLI ищет ownlate.yml в текущем каталоге.

project_id: f4092389-de6a-49ee-af84-46d59ba618f0
files:
- source: locales/en.json
translation: locales/{lang}.json

Все доступные параметры:

project_id: <uuid>
api_token_env: OWNLATE_API_TOKEN
files:
- source: locales/en.json
translation: locales/{lang}.json
flat: false
languages_mapping:
zh-Hans: zh_CN
zh-Hant: zh_TW
КлючЧто значит
project_idС каким проектом синхронизироваться
api_token_envИмя переменной окружения с токеном вместо ~/.ownlate
files[].sourceКакой исходный файл загружать
files[].translationКуда писать переведённые файлы; обязан содержать {lang}
files[].flatОставлять вложенные ключи как есть, не разворачивая
files[].languages_mappingСопоставить код языка другому куску имени файла

Без ownlate.yml CLI возьмёт конфигурацию проекта, которую ownlate init положил в ~/.ownlate.

Окно терминала
ownlate login # спросит ключ API, проверит его, запишет ~/.ownlate
ownlate logout # удалит ~/.ownlate

Для пайплайна укажите вместо этого api_token_env с именем переменной окружения:

Окно терминала
export OWNLATE_API_TOKEN=own_xxxxxxxxxxxx
ownlate push

Ключи создаются в разделе Профиль → Ключи API — см. REST API.

Забирает список ваших проектов, даёт выбрать один и записывает конфигурацию для текущего каталога.

Загружает каждый files[].source и создаёт или обновляет по нему сегменты.

ФлагОписание
-w, --watchСледить за исходными файлами и отправлять при каждом сохранении
-n, --dry-runПоказать, что было бы отправлено, ничего не загружая

Скачивает переведённые файлы по путям из files[].translation.

ФлагОписание
-l, --lang <код>Забрать только один язык

Печатает таблицу прогресса по всем целевым языкам.

Project My App f4092389-…
Lang ████████████░░░░░░░░ % Total Untrans Draft Transl Approved
────────────────────────────────────────────────────────────────────────────
fr ████████████████████ 100% 484 0 0 0 484
de ██████████░░░░░░░░░░ 51% 484 237 12 89 146
es ████░░░░░░░░░░░░░░░░ 20% 484 387 4 51 42
────────────────────────────────────────────────────────────────────────────
3 langs 57% 1452 624 16 140 672
ФлагОписание
--min <процент>Выйти с кодом 1, если какой-то язык ниже порога, — гейт для CI

Предпереводит непереведённые сегменты. Работа идёт в фоне на сервере; прогресс потом смотрите через ownlate status.

ФлагОписание
-l, --lang <код>Только один язык
-p, --provider <тип>tm — память переводов (по умолчанию), mt — встроенный ИИ-движок
-s, --score <n>Минимальная оценка совпадения по памяти, 0–100 (по умолчанию 100, действует для tm)

Что каждый источник делает со статусом сегмента — см. Память переводов.

Окно терминала
ownlate project list
ownlate project create "Mobile App" --source en --langs fr,de,es
ФлагОписание
-s, --source <язык>Код исходного языка
-l, --langs <коды>Целевые языки через запятую
- name: Push source strings
run: npx @ownlate/cli push
env:
OWNLATE_API_TOKEN: ${{ secrets.OWNLATE_API_TOKEN }}
- name: Fail if a language is behind
run: npx @ownlate/cli status --min 90
env:
OWNLATE_API_TOKEN: ${{ secrets.OWNLATE_API_TOKEN }}

Отправляйте при каждом слиянии в основную ветку, а забирайте по расписанию или перед релизом — так источник правды остаётся в Ownlate, а сборка воспроизводится из репозитория.