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

Файлы, форматы и экспорт

Строки проекта приходят файлами и уходят файлами. Эта страница — про оба направления.

ФорматРасширенияЗамечания
JSON.jsonВложенные объекты разворачиваются через точку
Flutter ARB.arbРазбирается как JSON
YAML.yaml, .ymlВложенные ключи разворачиваются через точку
gettext.poПары msgid / msgstr
Ресурсы Android.xml<string name="…">
Строки Apple.strings, .stringsdict"key" = "value";
XLIFF.xliff, .xlftrans-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. Если формат не указан, берётся формат самого файла.

Две настройки меняют то, что окажется в файле:

  • Подстановка источника — передайте исходный язык, и непереведённые ключи будут записаны с исходным текстом, а не пропущены. Пригодится, когда отсутствие ключа ломает приложение; выключите, когда лучше увидеть дырку.
  • Непереводимые сегменты всегда пишутся с исходным текстом, что бы вы ни просили.