Конвертер i18n
Перетворюйте файли між понад 32 форматами i18n: Android XML, iOS Strings, XLIFF, PO, JSON, YAML та іншими. Дані зберігаються без втрат, де це можливо; в інших випадках Ви отримаєте чіткі попередження.
Проблема
Кожна платформа використовує власний формат перекладу. Android використовує strings.xml, iOS — .strings і .stringsdict, а вебзастосунки — JSON або YAML. Перекладачам і платформам TMS потрібні XLIFF або PO. Коли рядками потрібно обмінюватися між платформами, доводиться копіювати й вставляти дані між форматами, писати одноразові скрипти або вручну перебудовувати файли. Це виснажливо, спричиняє помилки й перестає працювати з появою кожного нового формату.
Рішення
i18n-convert дає змогу перетворювати файли між понад 32 форматами i18n за допомогою одного CLI-інструмента. Він автоматично визначає вхідний формат, максимально зберігає структуру та попереджає Вас, якщо перетворення призведе до втрати даних, наприклад форм множини в CSV.
# 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.
npm install -g @i18n-agent/i18n-convertПоширені перетворення
Більшості команд регулярно потрібні лише кілька перетворень: із JSON в Android XML для мобільних застосунків, із PO в JSON для вебзастосунків, а також двостороннє перетворення XLIFF для передавання перекладачам. Нижче наведено кілька поширених схем.
# 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 формати для мобільних і вебзастосунків, стандартів локалізації та обміну даними.
Мобільні платформи
| Format | Extension | Flag |
|---|---|---|
| Android XML | .xml | --to android-xml |
| iOS Strings | .strings | --to ios-strings |
| iOS Stringsdict | .stringsdict | --to ios-stringsdict |
| Flutter ARB | .arb | --to arb |
Вебплатформи
| Format | Extension | Flag |
|---|---|---|
| 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 |
Стандарти локалізації
| Format | Extension | Flag |
|---|---|---|
| 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 |
Обмін даними
| Format | Extension | Flag |
|---|---|---|
| CSV | .csv | --to csv |
| TSV | .tsv | --to tsv |
| Excel | .xlsx | --to xlsx |
Попередження про втрату даних
Можливості форматів різняться. XLIFF підтримує примітки, контекст і форми множини, а CSV — ні. Під час перетворення з багатофункціонального формату на простіший i18n-convert точно повідомляє, які дані буде втрачено.
$ 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Інтеграція з CI
Автоматизуйте синхронізацію форматів у своєму процесі CI/CD. Коли вихідний файл перекладу змінюється, автоматично створюйте заново всі похідні формати, щоб файли для мобільних і вебзастосунків та перекладачів залишалися синхронізованими.
# .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 Agent зараз
Перетягніть сюди файл для перекладу
JSON, YAML, PO, XML, CSV, Markdown, Properties
або натисніть, щоб вибрати
Цільові мови