Flutter ARB ファイル用 ICU 複数形ジェネレーター

言語を選ぶと、それぞれに必要な複数形カテゴリを例の数値とともに表示し、ARB ファイルにそのまま貼り付けられる ICU メッセージを生成します。無料・登録不要で、すべてブラウザ内で完結します。

複数形メッセージを生成する

言語

次に、すべての翻訳がプレースホルダーを保っているか確認

LocalePilot はすべての ARB ファイルを開き、各翻訳の ICU プレースホルダーをソースと照合し、不足キーを検出し、バックアップ付きで書き出すデスクトップアプリです。macOS 版を最終調整中です。メールアドレスを登録すると、リリース時にお知らせします。

言語によって複数形が変わる理由

zero、one、two、few、many、other のカテゴリは、各言語の CLDR ルールに従います。英語では one は 1 だけを意味し、フランス語では 0 と 1 を含みます。ロシア語やポーランド語には few と many が加わり、アラビア語は 6 つすべてを使い、日本語は other の 1 つだけです。英語用に書いた 2 分岐のメッセージは、翻訳すると分岐が足りなくなることがあります。

このツールはこれらのルールをブラウザ(Intl.PluralRules)から読み取ります。表示されるカテゴリと例の数値はその言語自身のもので、保守すべき対応表はありません。

gen-l10n での =1 の落とし穴

=1 の分岐は、flutter gen-l10n が生成するコードでは one カテゴリになります。フランス語ではこのカテゴリがゼロにも適用されるため、count = 0 のときに「1 article restant」(残り 1 件)と表示されてしまいます。数値をテキストに入れた one カテゴリを使うか、=0 の分岐を追加してください。ツールではチェックボックスで追加できます。詳しくはICU 複数形とプレースホルダーのガイドをご覧ください。

結果の使い方

  1. 各言語の "key": "{count, plural, …}" の行を、対応する app_xx.arb ファイルにコピーします。
  2. @key メタデータは、テンプレートファイルに一度だけ追加します。
  3. flutter gen-l10n を実行します。other の分岐がなかったり波括弧が閉じていなかったりすると、ファイル名を示して生成が止まります。

その後、プレースホルダーを落としたり名前を変えたりした翻訳がないかは、ARB 不足キーチェッカーで確認できます。

ツールの制限

このツールが生成するのはメッセージの構造だけで、各形式のテキストは自分で書きます。select メッセージや入れ子の複数形には対応しておらず、l10n.yaml で use-escaping を有効にしている場合のアポストロフィの二重化も行いません。

よくある質問

日本語に必要な複数形カテゴリは?

other だけです。日本語の CLDR ルールには単数・複数の区別がないので、other の分岐 1 つで足ります。ソース言語(英語など)の one の分岐を日本語にコピーする必要はありません。

なぜ other の分岐は必須なのですか?

flutter gen-l10n は other の分岐がない複数形を拒否し、ファイル名を示して生成を中止します。このツールは常に other を追加します。

=1 と one の違いは?

生成されるコードでは、=1 は one カテゴリになります。フランス語ではこのカテゴリが 0 も含みます。one の分岐に数値を入れるか、=0 を追加してください。

テキストはサーバーに送信されますか?

いいえ。メッセージはブラウザの複数形ルールを使ってページ内で組み立てられ、何も送信されません。

一覧にない言語でも使えますか?

はい。自由入力欄にその言語のコード(例:cs や sv)を入力してください。ブラウザが認識するコードであれば使えます。

LocalePilot との違いは?

このツールは複数形メッセージを 1 つ作るだけです。LocalePilot は macOS 版を最終調整中のデスクトップアプリで、すべての ARB ファイルを開き、書き出し前に各翻訳の ICU プレースホルダーをチェックします。

リリース時にお知らせを受け取る

LocalePilot は最終調整中です。メールアドレスを登録すると、リリース時にお知らせします。

  • macOS 12 以降 · Ollama または LM Studio は任意
  • アプリの表示言語は英語、フランス語、スペイン語、イタリア語、ポルトガル語です。