プレースホルダーの崩れを検出する方法
プレースホルダーは、名前、件数、価格、日付などを実行時に差し込むための重要なトークンです。訳文の中で少し変わるだけで、画面表示に影響します。
対応形式:JSON、YAML、XLIFF、Android XML、Apple .strings/.xcstrings、Java .properties
例
{
"cart.items": "{count} items in your cart",
"hello": "Hello {name}"
}{
"cart.items": "カートに{total}件の商品があります",
"hello": "こんにちは{name}"
}{count} が消えて {total} に変わっている
{name} の括弧が全角になっているなぜ問題になるか
プレースホルダーが欠けたり名前が変わったりすると、画面上で値が差し込まれない、エラーになる、意図しない文字列が表示されるといった問題につながります。
日本語では、入力中に括弧や記号が全角になることもあります。見た目は似ていても、アプリ側のトークンとしては別物です。
誰が確認するべきか
開発側はプレースホルダーの仕様を決めますが、翻訳・レビュー・納品の過程で崩れることがあります。PMやベンダー側で納品前に確認しておくと、開発側での差し戻しを減らせます。
LocaleQAは対応形式の同じパス、リソース名、ユニットにある原文と訳文を比較し、プレースホルダーの種類と個数を一定のルールで確認します。文法の自然さは判定しません。
なぜ崩れやすいか
プレースホルダーは翻訳対象の文中に混ざっているため、翻訳メモリの置換、手作業での修正、日本語入力中の全角化などで変わることがあります。括弧やパーセント記号は見た目が似ていても、実行時には別の文字として扱われます。
検出結果をレポートとして残しておくと、どのキーのどのトークンを直すべきかを開発・翻訳・QA間で確認しやすくなります。
日本語案件で起きる具体的な流れ
たとえば、翻訳者が日本語入力のまま「{name}」の前後を修正し、波括弧まで「{name}」に置き換えると、見た目はほぼ同じでもアプリは値を差し込めません。%1$sが%1$sになる、%@が%@になるといった全角化も同じ種類の問題です。
もう一つは、翻訳メモリから似た文を再利用した際に、{count}を含む訳文へ{total}を持つ別の文の訳が入るケースです。文章として自然でも、実行時トークンの名前や型が原文と一致しないため、納品前に文字列単位で比較する必要があります。