i18n 形式変換ツール
32 以上の i18n ファイル形式を相互変換します。Android XML、iOS Strings、XLIFF、PO、JSON、YAML などに対応します。可能な限りデータを損なわずに変換し、損失が避けられない場合は明確に警告します。
課題
プラットフォームごとに翻訳形式が異なります。Android は strings.xml、iOS は .strings と .stringsdict、Web アプリは 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、Web 向けの 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 は、モバイル、Web、ローカリゼーション標準、データ交換の各カテゴリにまたがる 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 |
Web
| 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-runCI 統合
CI/CD パイプラインで形式の同期を自動化します。翻訳元ファイルが変更されたときに、派生するすべての形式を自動的に再生成し、モバイル、Web、翻訳者向けのファイルを常に同期できます。
# .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 pushi18n Agent を今すぐ試す
翻訳ファイルをここにドロップ
JSON, YAML, PO, XML, CSV, Markdown, Properties
またはクリックしてファイルを選択
翻訳先言語