Основные понятия
Всё в Ownlate держится на пяти объектах. Как только понятно, как они вложены друг в друга, остальное — API, CLI, редактор — читается одинаково.
рабочее пространство├── участники, глоссарий, память переводов, правила QA, ключи API, оплата└── проект ├── файл перевода │ └── сегмент ── перевод (по одному на целевой язык) ├── релиз ── OTA-раздача ├── задача, интеграция, SDK-токенРабочее пространство
Заголовок раздела «Рабочее пространство»Рабочее пространство — это арендатор. Оно создаётся с именем и валютой оплаты, владеет тарифом и подпиской, и ничто внутри него не видно из другого пространства.
На уровне пространства живёт и разделяется всеми проектами внутри:
- Участники и их уровни доступа
- Глоссарий — терминология, по исходным языкам
- Память переводов — все утверждённые переводы, пригодные к повторному использованию
- Правила QA — свои регулярные выражения, проверяемые при отправке
- Ключи API — программный доступ в пределах ваших же прав
- Журнал аудита — только пополняемая запись значимых действий
- Интеграции — те, что заведены на уровне пространства и действуют на все проекты
У пространства есть UUID. Почти каждый путь REST начинается с него, и почти каждая операция GraphQL принимает его как workspaceId.
Проект — это один продукт или одна его часть; в нём лежат его строки.
| Поле | Что значит |
|---|---|
sourceLanguage | Язык, на котором пишут разработчики. Один на проект, после создания не меняется. |
targetLanguages | На что переводим. Добавлять можно в любой момент. |
visibility | private либо public — прогресс и переводы публичного проекта читаются без входа. |
status | active или archived. Архивация прячет проект, не уничтожая его; удаление архивного — безвозвратно. |
ossApprovedAt | Проставляется, когда платформа признаёт публичный проект открытым — см. ниже. |
Открытые проекты
Заголовок раздела «Открытые проекты»Публичный проект платформа может дополнительно признать открытым. Открытый проект попадает в публичный каталог, и предложить перевод в нём может любой вошедший, а не только участник. Предложение ничего не меняет, пока его не примет редактор. См. Рабочий процесс.
Файл перевода
Заголовок раздела «Файл перевода»Файл — это то, что вы загружаете и выгружаете. У него есть имя, путь папки и формат, и имя вместе с путём его и опознают: locales/en.json — один файл, mobile/en.json — другой.
Формат определяется по расширению при загрузке и решает, как содержимое разбирается на сегменты. Переименование папки одной операцией переписывает путь у всех файлов под ней.
Сегмент
Заголовок раздела «Сегмент»Сегмент — одна переводимая строка в одном файле, уровень, на котором работает всё остальное.
| Поле | Что значит |
|---|---|
key | Идентификатор, которым пользуется код, например home.title. Вложенные ключи JSON и YAML разворачиваются через точку. |
sourceText | Текст на исходном языке проекта. |
isPlural | Несёт ли сегмент формы множественного числа вместо одной строки. |
translatable | Ставится в false для ключа, который переводить нельзя, — название бренда, служебный токен. Такие сегменты пропускает предперевод, а в экспорт они уходят с исходным текстом. |
contextUrl, screenshotUrl | Где строка появляется — для переводчиков, которые иначе её не увидят. |
Изменение исходного текста помечает все его переводы как outdated: то, что утвердил переводчик, больше не описывает того, что говорит продукт.
Перевод
Заголовок раздела «Перевод»У каждого сегмента по одному переводу на целевой язык, и у каждого перевода есть текст (или набор форм множественного числа) и статус.
| Статус | Что значит |
|---|---|
untranslated | Ничего ещё не написано |
draft | Сохранено как черновик, не отправлено |
needs_review | Отправлено, ждёт проверяющего |
reviewed | Проверяющий посмотрел, ждёт утверждения |
approved | Утверждено — именно это уходит в экспорт и релиз |
in_progress | Было отклонено и переделывается |
outdated | Исходный текст изменился после того, как перевод был написан |
Формы множественного числа хранятся набором категорий CLDR, которые целевой язык действительно использует, — zero, one, two, few, many, other.
Память переводов
Заголовок раздела «Память переводов»Каждый раз, когда перевод утверждают, пара «исходный текст → перевод» попадает в память переводов пространства. Совпадение оценивается похожестью по Левенштейну от 0 до 100, где 100 — точное совпадение; на этом держатся подсказки в редакторе и предперевод. См. Память переводов.
Релиз и раздача
Заголовок раздела «Релиз и раздача»Релиз — замороженный снимок утверждённых переводов проекта с возрастающим номером версии. У проекта также есть одна OTA-раздача: постоянный ключ доступа, который отдаёт последний релиз или любую более раннюю версию по HTTP без авторизации. См. Релизы и OTA.
Что считается словом
Заголовок раздела «Что считается словом»Тарифы меряются словами, а слово — это разделённый пробелами токен текста перевода. Счётчик двигается, когда перевод записывают, а общее число по пространству можно в любой момент пересчитать по утверждённым переводам. См. Тарифы и оплата.