Файлы, форматы и экспорт
Строки проекта приходят файлами и уходят файлами. Эта страница — про оба направления.
Поддерживаемые форматы
Заголовок раздела «Поддерживаемые форматы»| Формат | Расширения | Замечания |
|---|---|---|
| JSON | .json | Вложенные объекты разворачиваются через точку |
| Flutter ARB | .arb | Разбирается как JSON |
| YAML | .yaml, .yml | Вложенные ключи разворачиваются через точку |
| gettext | .po | Пары msgid / msgstr |
| Ресурсы Android | .xml | <string name="…"> |
| Строки Apple | .strings, .stringsdict | "key" = "value"; |
| XLIFF | .xliff, .xlf | trans-unit версий 1.2 и 2.0 |
| CSV | .csv | Первая колонка — ключ, вторая — значение |
| Markdown | .md, .mdx | По сегменту на блок, правится как Markdown |
Формат берётся из расширения, а файл с расширением не из этого списка отклоняется с сообщением, где перечислены допустимые.
Вложенные структуры превращаются в ключи через точку, поэтому такой файл:
{ "home": { "title": "Привет", "cta": "Начать" } }даёт ключи home.title и home.cta. Именно их будет искать ваш код и именно их запишет обратно экспорт.
Загрузка
Заголовок раздела «Загрузка»Загрузка исходного файла создаёт по сегменту на каждый ключ. Повторная загрузка того же файла — с тем же именем и в той же папке — это и есть способ отправлять изменения:
- У существующего ключа обновляется исходный текст.
- Удалённый ранее ключ возвращается.
- Новый ключ добавляется.
- Порядок в файле становится порядком сегментов, поэтому вставленный в середину блок остаётся в середине, а не прыгает в конец.
Импорт готовых переводов
Заголовок раздела «Импорт готовых переводов»Загрузите файл, указав целевой язык, — и он читается как переводы, а не как источник: значения сопоставляются с существующими сегментами по ключу и записываются в этот язык. Перевод, у которого уже есть статус, его сохраняет, поэтому импорт не снимает утверждение молча.
Это путь для переезда из другого инструмента: сначала отправьте исходный файл, потом по файлу на язык.
Файлы лежат в папках внутри проекта, и файл опознаётся именем и путём: locales/en.json и mobile/en.json — два разных файла.
- Переименование папки одной операцией переносит все файлы под ней.
- Слияние дубликатов убирает файлы с одинаковыми именем и путём, созданные дважды, — обычный итог того, что один и тот же файл отправили два пайплайна раньше, чем у любого из них появился идентификатор файла.
Экспорт
Заголовок раздела «Экспорт»Экспорт записывает в файл утверждённые переводы.
| Что | Где |
|---|---|
| Один язык, один формат | Вкладка «Файлы» → Экспорт либо GET /v1/workspaces/{id}/segments/export |
| Все языки архивом | Вкладка «Файлы» → Экспорт всех либо GET /v1/workspaces/{id}/segments/export-zip |
| Прямо в репозиторий | ownlate pull |
| Бандлом для рантайма | Релизы и OTA |
Экспорт выдаёт json, yaml или po. Если формат не указан, берётся формат самого файла.
Две настройки меняют то, что окажется в файле:
- Подстановка источника — передайте исходный язык, и непереведённые ключи будут записаны с исходным текстом, а не пропущены. Пригодится, когда отсутствие ключа ломает приложение; выключите, когда лучше увидеть дырку.
- Непереводимые сегменты всегда пишутся с исходным текстом, что бы вы ни просили.