Lingo.dev のCLIは、Xcode .strings、Android XML、Flutter ARB、React Native JSON といったネイティブのモバイルリソースファイルを、設定済みのローカライゼーションエンジン経由で翻訳します。各プラットフォームには専用のバケットタイプがあり、ファイル形式を正しく理解し、構造を保ったまま、複数形もネイティブに処理します。
プラットフォーム概要#
| プラットフォーム | ネイティブ形式 | CLI バケット | 一般的なファイルパス |
|---|---|---|---|
| iOS(Xcode) | .strings | xcode-strings | [locale].lproj/Localizable.strings |
| iOS(Xcode) | .stringsdict | xcode-stringsdict | [locale].lproj/Localizable.stringsdict |
| iOS(Xcode) | .xcstrings | xcode-xcstrings | Localizable.xcstrings |
| Android | strings.xml | android | app/src/main/res/values-[locale]/strings.xml |
| Flutter | .arb | flutter | lib/l10n/app_[locale].arb |
| React Native | .json | json | src/locales/[locale].json |
前提条件#
CLI を実行するたびに、コンテンツはローカライゼーションエンジンを通ります。これは、どの LLM モデル、用語集、ブランドボイス、指示を適用するかを決める設定です。Lingo.dev のダッシュボードで作成し、API キーを生成してください。
プラットフォームの設定#
Xcode は 3 つのローカライズ形式に対応しています。プロジェクト構成に合ったものを選んでください。
String Catalogs(.xcstrings) - Xcode 15 で導入された最新の Xcode 形式です。1 つの JSON ファイルにすべてのロケールが入り、新しい文字列を追加すると Xcode が自動で更新します。CLI はこのファイルを直接更新するため、[locale] プレースホルダーは不要です。
{
"$schema": "https://lingo.dev/schema/i18n.json",
"version": "1.15",
"locale": {
"source": "en",
"targets": ["es", "fr", "de", "ja"]
},
"buckets": {
"xcode-xcstrings": {
"include": ["MyApp/Localizable.xcstrings"]
}
}
}従来の .strings ファイル - [locale].lproj/ ディレクトリ内に、ロケールごとに 1 ファイルずつ配置します。複数形のためにプロジェクトで .stringsdict も使っている場合は、両方のバケットを追加してください。
{
"$schema": "https://lingo.dev/schema/i18n.json",
"version": "1.15",
"locale": {
"source": "en",
"targets": ["es", "fr", "de", "ja"]
},
"buckets": {
"xcode-strings": {
"include": ["MyApp/[locale].lproj/Localizable.strings"]
},
"xcode-stringsdict": {
"include": ["MyApp/[locale].lproj/Localizable.stringsdict"]
}
}
}Xcode の i18n 基盤の設定方法については、Apple のローカライズ関連ドキュメントをご覧ください。
翻訳の実行#
1 つのコマンドですべてのリソースファイルを翻訳できます。
npx lingo.dev@latest runCLI はソースロケールのファイルを読み込み、lockfile を使って前回の実行からの変更を判定し、差分だけを翻訳してターゲットロケールのファイルに書き込みます。
プロジェクトに複数のリソースタイプが含まれている場合は、特定のプラットフォームだけを対象にすることもできます。
npx lingo.dev@latest run --bucket android
npx lingo.dev@latest run --bucket xcode-xcstrings複数形とプラットフォームごとの慣習#
複数形の扱いはモバイルプラットフォームごとに異なります。iOS は .stringsdict または String Catalog のルール、Android は <plurals> XML 要素、Flutter は ARB ファイル内の ICU MessageFormat を使います。CLI は翻訳時に各プラットフォーム固有の複数形構造を保持し、各ターゲットロケールに対して正しい複数形カテゴリを生成します。
翻訳者向けメモ
モバイル向けの文字列は短く、文脈に左右されやすい傾向があります。文字列がどこに表示されるかという文脈をローカライゼーションエンジンに伝えるために、Xcode の .xcstrings ファイルで translator notes を使ってください。たとえば、"checkout フローのボタンラベル" と "ナビゲーションメニューの項目" では、適切な訳し方が異なります。
