Skip to main content

Преобразователь i18n

Преобразуйте данные между более чем 32 форматами i18n: Android XML, iOS Strings, XLIFF, PO, JSON, YAML и другими. По возможности без потерь, а в остальных случаях — с понятными предупреждениями о потере данных.

Проблема

Каждая платформа использует свой формат перевода. Android — strings.xml. iOS — .strings и .stringsdict. Веб-приложения — JSON или YAML. Переводчикам и платформам TMS нужны XLIFF или PO. Чтобы использовать строки на нескольких платформах, приходится копировать их между форматами, писать одноразовые сценарии или вручную перестраивать файлы. Это утомительно, чревато ошибками и снова нарушается с появлением каждого нового формата.

В одном проекте для мобильных и веб-приложений легко может использоваться более 5 разных форматов файлов перевода. Поддерживать их синхронизацию вручную практически невозможно.

Решение

i18n-convert — единый инструмент CLI для преобразования данных между более чем 32 форматами i18n. Он автоматически определяет входной формат, сохраняет как можно больше структуры и предупреждает, если преобразование приведёт к потере данных, например форм множественного числа в CSV.

Terminal
# Auto-detect input format, convert to Android XML
i18n-convert en.json --to android-xml -o strings.xml

# iOS Strings to Gettext PO
i18n-convert Localizable.strings --to po -o messages.po

# XLIFF to Rails YAML
i18n-convert translations.xliff --to yaml-rails -o en.yml

# Pipe to stdout
i18n-convert messages.po --to json

Автоматическое определение

Входной формат определяется автоматически по расширению и содержимому файла. Флаги не требуются.

По возможности без потерь

Метаданные, комментарии и формы множественного числа сохраняются, если целевой формат их поддерживает.

Предупреждения о потере данных

Если при преобразовании будет потеряна информация, Вы получите явные предупреждения до записи любого файла.

Установка

Для самой простой настройки установите через npm, на macOS — через Homebrew либо соберите из исходного кода с помощью Cargo.

Terminal
npm install -g @i18n-agent/i18n-convert
Пакет npm включает готовые двоичные файлы для macOS, Linux и Windows. Набор инструментов Rust не требуется.

Распространённые преобразования

Большинству команд регулярно нужны несколько преобразований: JSON в Android XML для мобильных приложений, PO в JSON для веб-приложений, двустороннее преобразование XLIFF для передачи переводчикам. Вот несколько распространённых шаблонов.

Batch conversion
# Convert all PO files to JSON
for f in locales/*.po; do
  i18n-convert "$f" --to json -o "${f%.po}.json"
done

# Convert entire directory
i18n-convert locales/ --to json --out-dir locales-json/

Поддерживаемые форматы

i18n-convert поддерживает более 32 форматов для мобильных и веб-приложений, стандартов локализации и обмена данными.

Мобильные приложения

FormatExtensionFlag
Android XML.xml--to android-xml
iOS Strings.strings--to ios-strings
iOS Stringsdict.stringsdict--to ios-stringsdict
Flutter ARB.arb--to arb

Веб

FormatExtensionFlag
JSON (flat).json--to json
JSON (nested).json--to json-nested
YAML.yml--to yaml
YAML (Rails).yml--to yaml-rails
Properties.properties--to properties

Стандарты локализации

FormatExtensionFlag
XLIFF 1.2.xlf--to xliff
XLIFF 2.0.xlf--to xliff-2
Gettext PO.po--to po
Gettext POT.pot--to pot
TMX.tmx--to tmx
TBX.tbx--to tbx

Обмен данными

FormatExtensionFlag
CSV.csv--to csv
TSV.tsv--to tsv
Excel.xlsx--to xlsx

Предупреждения о потере данных

Не все форматы равноценны. XLIFF поддерживает примечания, контекст и формы множественного числа, а CSV не поддерживает ничего из этого. При преобразовании богатого формата в более простой i18n-convert точно сообщает, что будет потеряно.

Terminal
$ i18n-convert plurals.po --to csv
Data loss warnings:
  [ERROR] 3 entries use plurals (not supported by CSV)
Proceed? [y/N]

# Skip prompts
i18n-convert plurals.po --to csv --force

# Preview warnings without writing
i18n-convert plurals.po --to csv --dry-run
Всегда используйте --dry-run перед преобразованием рабочих данных в более простой формат. Вы увидите все предупреждения без записи файлов.

Интеграция с CI

Автоматизируйте синхронизацию форматов в конвейере CI/CD. При изменении исходного файла перевода автоматически создавайте заново все производные форматы, чтобы файлы мобильных и веб-приложений и переводчиков оставались синхронизированными.

.github/workflows/format-sync.yml
# .github/workflows/format-sync.yml
name: Sync Translation Formats
on:
  push:
    branches: [main]
    paths: ['locales/en.json']

jobs:
  sync-formats:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - name: Install i18n-convert
        run: npm install -g @i18n-agent/i18n-convert

      - name: Convert JSON to Android XML
        run: i18n-convert locales/en.json --to android-xml -o android/res/values/strings.xml

      - name: Convert JSON to iOS Strings
        run: i18n-convert locales/en.json --to ios-strings -o ios/en.lproj/Localizable.strings

      - name: Commit synced formats
        run: |
          git config user.name "github-actions"
          git config user.email "[email protected]"
          git add android/ ios/
          git diff --cached --quiet || git commit -m "chore: sync translation formats"
          git push
Объедините i18n-convert с i18n-validate в конвейере CI. Сначала преобразуйте форматы, а затем проверьте полноту и правильность всех целевых файлов.

Попробовать i18n Agent

Перетащите сюда файл перевода

JSON, YAML, PO, XML, CSV, Markdown, Properties

или нажмите, чтобы выбрать

Целевые языки

Регистрация не требуетсяМгновенный расчёт

Часто задаваемые вопросы