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

CLI

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

Образ контейнера — тот же, что запускает GitHub Action:

bash
docker run --rm -it \
-v "$HOME/.ownlate:/root/.ownlate" \
-v "$(pwd):/app" -w /app \
globalartltd/ownlate-cli <команда>

Или сборка из исходников:

bash
cargo install --git https://github.com/OwnLate/ownlate ownlate-cli
bash
ownlate login # сохранить ключ API
ownlate init # выбрать проект, записать конфигурацию
ownlate push # отправить исходные строки
ownlate pull # забрать переводы

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

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

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

yaml
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.

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

Для своей установки OwnLate один раз укажите адрес её API: он запишется в ~/.ownlate и останется там после ownlate logout:

bash
ownlate login --api-url https://api.ownlate.example.com

Адрес берётся из --api-url, затем из OWNLATE_API_URL, затем из ~/.ownlate, а без них CLI ходит в https://api.ownlate.com.

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

bash
export OWNLATE_API_TOKEN=own_xxxxxxxxxxxx
ownlate push

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

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

Переезжаете с Crowdin? ownlate init --from crowdin.yml записывает ownlate.yml с теми же сопоставлениями файлов: каждый плейсхолдер языка становится {lang}, плейсхолдеры имени файла — подстановочным знаком, а languages_mapping переносится. Плейсхолдеры, чьи коды отличаются от кодов Ownlate, например %android_code%, переводятся с подсказкой добавить сопоставление. Существующий ownlate.yml не перезаписывается. После этого запустите ownlate init, чтобы выбрать проект.

Загружает каждый 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)

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

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

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