プレースホルダー

プレースホルダーの崩れを検出する方法

プレースホルダーは、名前、件数、価格、日付などを実行時に差し込むための重要なトークンです。訳文の中で少し変わるだけで、画面表示に影響します。

対応形式:JSON、YAML、XLIFF、Android XML、Apple .strings/.xcstrings、Java .properties

原文JSON
{
  "cart.items": "{count} items in your cart",
  "hello": "Hello {name}"
}
訳文JSON
{
  "cart.items": "カートに{total}件の商品があります",
  "hello": "こんにちは{name}"
}
検出したいこと
{count} が消えて {total} に変わっている
{name} の括弧が全角になっている

なぜ問題になるか

プレースホルダーが欠けたり名前が変わったりすると、画面上で値が差し込まれない、エラーになる、意図しない文字列が表示されるといった問題につながります。

日本語では、入力中に括弧や記号が全角になることもあります。見た目は似ていても、アプリ側のトークンとしては別物です。

誰が確認するべきか

開発側はプレースホルダーの仕様を決めますが、翻訳・レビュー・納品の過程で崩れることがあります。PMやベンダー側で納品前に確認しておくと、開発側での差し戻しを減らせます。

LocaleQAは対応形式の同じパス、リソース名、ユニットにある原文と訳文を比較し、プレースホルダーの種類と個数を一定のルールで確認します。文法の自然さは判定しません。

なぜ崩れやすいか

プレースホルダーは翻訳対象の文中に混ざっているため、翻訳メモリの置換、手作業での修正、日本語入力中の全角化などで変わることがあります。括弧やパーセント記号は見た目が似ていても、実行時には別の文字として扱われます。

検出結果をレポートとして残しておくと、どのキーのどのトークンを直すべきかを開発・翻訳・QA間で確認しやすくなります。

日本語案件で起きる具体的な流れ

たとえば、翻訳者が日本語入力のまま「{name}」の前後を修正し、波括弧まで「{name}」に置き換えると、見た目はほぼ同じでもアプリは値を差し込めません。%1$sが%1$sになる、%@が%@になるといった全角化も同じ種類の問題です。

もう一つは、翻訳メモリから似た文を再利用した際に、{count}を含む訳文へ{total}を持つ別の文の訳が入るケースです。文章として自然でも、実行時トークンの名前や型が原文と一致しないため、納品前に文字列単位で比較する必要があります。

関連ページ