iOS・Flutter のプレースホルダーチェッカー

ソース文字列と翻訳を貼り付けると、抜けた、名前が変わった、型が変わった、順序が入れ替わったプレースホルダーを検出します。Apple の書式(%@、%1$@、%lld)にも Flutter の ICU メッセージにも対応。無料・登録不要で、テキストがブラウザの外に出ることはありません。

プレースホルダーを比較する

チェックする翻訳

比較はブラウザ内で行われ、何もアップロードされません。

コピー&ペーストなしで、書き出し前にすべての翻訳をチェック

LocalePilot は、すべての翻訳のプレースホルダー(%@、%1$@、%lld、ICU)を自動でソースと照合し、QA センターに一覧表示し、ブロッキングの問題が直るまで書き出しを止めるデスクトップアプリです。macOS 版を最終調整中です。メールアドレスを登録すると、リリース時にお知らせします。

ツールが比較するもの

  • Apple の書式:%@、%1$@、%d、%ld、%lld、%.2f、%u、%i、%s を位置ごとに比較します。%% はテキストです。
  • Flutter の ICU プレースホルダー:{name}。plural や select の分岐内も対象です。

%e や %x のような珍しい変換は「20%en」のようなテキストをエラーと誤認しないよう、あえて無視しています。

よくあるミス

  • 指定子の欠落:クラッシュはしませんが、名前や数値が画面から消えます。
  • 型の変更:%lld を %@ に置き換えると、整数をオブジェクトとして読むことになり、クラッシュのおそれがあります。
  • 位置指定なしの順序変更:順序を入れ替えるには、すべての引数に番号を付けます(%1$@、%2$@)。番号付きと番号なしの混在は未定義動作です。
  • フランス語の「20 % de remise」:パーセント記号の前のスペースにより、% d が指定子として読まれます。記号を二重にしてください:%%。
  • ICU プレースホルダーの名前変更:{count} を {nombre} に変えると、Flutter ではすべてのロケールの API が変わります。

これらのケースはiOS 書式指定子のガイドとICU プレースホルダーのガイドで詳しく解説しています。

ツールの制限

このツールが比較するのはプレースホルダーだけです。番号のない 2 つの %@ が入れ替わっていても、訳文の質が悪くても検出できません。ICU のアポストロフィによるエスケープ(Flutter の use-escaping オプション)は解釈せず、'{' は波括弧として読みます。比較は 1 文字列ずつです。ファイル全体には、ARB 不足キーチェッカーか、すべてのキーをチェックするエディタを使ってください。

よくある質問

どの iOS 書式指定子を認識しますか?

%@、%1$@(およびその他の位置)、%d、%ld、%lld、%.2f、%u、%i、%s です。%% はテキストとして扱います。%e や %x のような珍しい変換は意図的に無視しています。

なぜ「20 % de remise」が検出されるのですか?

書式文字列では「% d」が有効な指定子(スペースは printf のフラグ)になるため、「%lld % de remise」には引数 1 つに対して指定子が 2 つあることになります。「%lld %% de remise」と書いてください。

翻訳で引数の順序を変えられますか?

はい、すべての引数に番号を付ければ変えられます。%1$@ は 1 番目、%2$@ は 2 番目の引数で、文中のどこにあってもかまいません。1 つの文字列の中では、すべてに番号を付けるか、どれにも付けないかのどちらかです。

Flutter の ICU メッセージもチェックできますか?

はい。波括弧で囲まれたプレースホルダーを、plural や select の分岐内も含めてソースと比較します。

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

いいえ。比較はページ内で行われ、リリース前の文字列も含めて何も送信されません。

LocalePilot との違いは?

このツールは文字列を 1 つずつ比較します。LocalePilot は macOS 版を最終調整中のデスクトップアプリで、ARB、.strings、.xcstrings ファイルのすべてのキーを比較し、ブロッキングの問題があれば書き出しを止めます。

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

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

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