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

Основные понятия

Всё в Ownlate держится на пяти объектах. Как только понятно, как они вложены друг в друга, остальное — API, CLI, редактор — читается одинаково.

рабочее пространство
├── участники, глоссарий, память переводов, правила QA, ключи API, оплата
└── проект
├── файл перевода
│ └── сегмент ── перевод (по одному на целевой язык)
├── релиз ── OTA-раздача
├── задача, интеграция, SDK-токен

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

На уровне пространства живёт и разделяется всеми проектами внутри:

  • Участники и их уровни доступа
  • Глоссарий — терминология, по исходным языкам
  • Память переводов — все утверждённые переводы, пригодные к повторному использованию
  • Правила QA — свои регулярные выражения, проверяемые при отправке
  • Ключи API — программный доступ в пределах ваших же прав
  • Журнал аудита — только пополняемая запись значимых действий
  • Интеграции — те, что заведены на уровне пространства и действуют на все проекты

У пространства есть UUID. Почти каждый путь REST начинается с него, и почти каждая операция GraphQL принимает его как workspaceId.

Проект — это один продукт или одна его часть; в нём лежат его строки.

ПолеЧто значит
sourceLanguageЯзык, на котором пишут разработчики. Один на проект, после создания не меняется.
targetLanguagesНа что переводим. Добавлять можно в любой момент.
visibilityprivate либо public — прогресс и переводы публичного проекта читаются без входа.
statusactive или 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.

Тарифы меряются словами, а слово — это разделённый пробелами токен текста перевода. Счётчик двигается, когда перевод записывают, а общее число по пространству можно в любой момент пересчитать по утверждённым переводам. См. Тарифы и оплата.