# gt: General Translation CLI tool: Android strings.xml
URL: https://generaltranslation.com/ja/docs/cli/reference/formats/android-strings-files.mdx
Docs index: https://generaltranslation.com/llms.txt
Description: CLI で Android の strings.xml リソースファイルを翻訳します。Android strings.xml ファイル形式の API リファレンス。

CLI は Android の文字列リソースを翻訳します。Android プロジェクトでは、デフォルト言語の文字列を `res/values/strings.xml` に配置し、各翻訳をロケール修飾付きの同階層のディレクトリ (例: `res/values-es/strings.xml`) に配置します。翻訳ではリソース名、`<xliff:g>` プレースホルダー、およびアプリが描画するインラインマークアップがそのまま保持されます。

## 概要 [#overview]

| トピック                          | 説明                                         |
| ----------------------------- | ------------------------------------------ |
| [設定](#config)                 | ベースのリソースファイルをロケール修飾付きのディレクトリへ振り分けます。       |
| [リソースディレクトリの修飾子](#qualifiers) | `values-*` ディレクトリ名におけるロケールコードの表記方法。        |
| [複数形](#plurals)               | 各対象言語の CLDR カテゴリに合わせて `<plurals>` を再構築します。 |
| [未翻訳のリソース](#untranslated)     | CLI が変更を加えないリソース。                          |

## 設定 [#config]

`files` の下に `androidStrings` エントリを追加します。Android のベースリソースファイルは `res/values/strings.xml` で、そのパスにはロケール修飾子が含まれないため、`[locale]` プレースホルダーを置く場所がありません。`include` にはベースファイルを指定し、`transform` を使って翻訳後の出力をロケール修飾付きのディレクトリへ振り分けます。

```json title="gt.config.json"
{
  "defaultLocale": "en",
  "locales": ["es", "fr", "pl"],
  "files": {
    "androidStrings": {
      "include": ["res/values/strings.xml"],
      "transform": {
        "match": "res/values/(.*)",
        "replace": "res/values-{locale}/$1"
      }
    }
  }
}
```

この設定では、CLIは `res/values/strings.xml` を読み込み、`res/values-es/strings.xml`、`res/values-fr/strings.xml`、`res/values-pl/strings.xml` を書き出します。すべてのファイルキーについては[設定リファレンス](/docs/cli/reference/config#files)を参照してください。

これは標準的なAndroidプロジェクトで使用すべき構造で、他のファイル形式とは異なります。`res/values-[locale]/strings.xml` のようなパターンでは、プレースホルダーが `defaultLocale` に解決されて `res/values-en/strings.xml` を探しますが、標準的なプロジェクトにこのファイルは存在しません。結果としてどのファイルにも一致せず、何も翻訳されないまま実行が終了します。

ソース文字列を `res/values-en/` のようなロケール修飾付きディレクトリに置いている場合は、代わりにプレースホルダー形式を使用し、`transform` を削除してください。

```json title="gt.config.json"
{
  "files": {
    "androidStrings": {
      "include": ["res/values-[locale]/strings.xml"]
    }
  }
}
```

`androidStrings` キーを使用するには `gt` 2.19.0 以降が必要です。

## リソースディレクトリの修飾子 [#qualifiers]

Android は `values-*` ディレクトリ名からロケールを解析し、解析できない名前の場合はビルドが失敗します。そのため、パス内のロケールは必ずしも [`locales`](/docs/cli/reference/config#locales) に記述したとおりの表記になるとは限りません。`androidStrings` の場合、CLI は `[locale]` プレースホルダーと `{locale}` 変換プレースホルダーの両方で、ロケールを Android のリソース修飾子に変換します:

| 設定したロケール  | リソースディレクトリ             |
| --------- | ---------------------- |
| `es`      | `res/values-es`        |
| `fr-CA`   | `res/values-fr-rCA`    |
| `zh-Hans` | `res/values-b+zh+Hans` |
| `es-419`  | `res/values-b+es+419`  |

リージョンの subtag は従来の `-r` 形式になり、script の subtag や数値のリージョンには BCP 47 の `b+` 形式が使われます。この変換は `androidStrings` にのみ適用され、その他のファイル形式では設定したとおりのロケールがそのまま使われます。

## 複数形 [#plurals]

Android の数量文字列は、CLDR カテゴリごとに `<item quantity="...">` を 1 つずつ持つ `<plurals>` 要素です。翻訳されたファイルには、対象言語が実際に使用するカテゴリが含まれるため、ソースと同じ組み合わせになることはほとんどありません。英語は `one` と `other` の 2 つから選択しますが、ポーランド語は整数の数に対して 3 つの形式を使い、アラビア語は 6 つ、中国語は 1 つだけを使います。

```xml title="res/values/strings.xml"
<plurals name="photo_count">
  <item quantity="one">%d photo</item>
  <item quantity="other">%d photos</item>
</plurals>
```

CLIは各`<plurals>`を対象言語のCLDRルールに従って再構築し、その言語に必要なカテゴリを追加し、選択されることのないカテゴリを削除します。Androidは数量をCLDRのみで解決するため、対象言語で使われないカテゴリは到達不能となり、ソースに存在する`zero`も含めて削除されます。翻訳後のelementがソースと同じ`quantity`値を持つとは考えないでください。代わりに、代表的な数でレンダリングされた出力を比較してください。

## 翻訳されないリソース [#untranslated]

CLI は、リソースに翻訳可能なテキストが含まれている場合、`<string>` の値と `<string-array>` の各項目を翻訳します。

CLI は次のリソースを翻訳に送らず、翻訳されたファイルにそのまま残します。

* `translatable="false"` が指定されたリソース。API キーやブランド名、デバッグ用の値を除外するための標準的な方法です。この属性は AAPT の読み取り方に合わせて照合されるため、`False` や `FALSE` も有効です。
* 引用符で囲まれておらず、前後の空白を除いたテキストが `@` または `?` で始まる値。これらはテキストではなく別のリソースを参照しています。引用符で囲まれた値やエスケープされた `\@` の値は翻訳可能なままです。
* いずれかの項目がリソース参照である `<plurals>` または `<string-array>` リソース全体。CLI は壊れた参照を生成する危険を避けるため、リソース全体を変更せずに残します。
* `<bool>`、`<integer>`、`<color>` など、ユーザーに表示されるテキストを含まないリソース型。

リソースの直前に書かれたコメントは context として翻訳エンジンに渡されるため、短い文字列や複数の意味に取れる文字列の意味を明確にするのに活用してください。

## Sitemap

See the full [sitemap](https://generaltranslation.com/sitemap.md) for all pages.
