Skip to main content

i18n 形式変換ツール

32 以上の i18n ファイル形式を相互変換します。Android XML、iOS Strings、XLIFF、PO、JSON、YAML などに対応します。可能な限りデータを損なわずに変換し、損失が避けられない場合は明確に警告します。

課題

プラットフォームごとに翻訳形式が異なります。Android は strings.xml、iOS は .strings と .stringsdict、Web アプリは JSON または YAML を使用します。一方、翻訳者や TMS プラットフォームでは XLIFF または PO が求められます。プラットフォーム間で文字列を共有しようとすると、形式間でコピー&ペーストしたり、使い捨てのスクリプトを書いたり、ファイル構造を手作業で組み替えたりすることになります。手間がかかり、ミスも起きやすく、新しい形式が加わるたびに仕組みが破綻します。

モバイルと Web を組み合わせた 1 つのプロジェクトだけでも、5 種類以上の翻訳ファイル形式を扱うことがあります。これらを手作業で同期し続けるのは現実的ではありません。

解決策

i18n-convert は、32 以上の i18n ファイル形式を相互変換できる単一の CLI ツールです。入力形式を自動検出し、可能な限り構造を保持します。また、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、Web 向けの 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 は、モバイル、Web、ローカリゼーション標準、データ交換の各カテゴリにまたがる 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

Web

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 パイプラインで形式の同期を自動化します。翻訳元ファイルが変更されたときに、派生するすべての形式を自動的に再生成し、モバイル、Web、翻訳者向けのファイルを常に同期できます。

.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
CI パイプラインでは、i18n-convert と i18n-validate を組み合わせてください。最初に形式を変換し、その後、すべての変換先ファイルが完全で正しい形式になっていることを検証します。

i18n Agent を今すぐ試す

翻訳ファイルをここにドロップ

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

またはクリックしてファイルを選択

翻訳先言語

登録不要すぐに見積もり

よくある質問