ネストされたICUメッセージ
plural、select、フォーマット引数をネストされたICUメッセージで組み合わせる方法。ネストルール、深さの制限、複雑なメッセージを翻訳可能に保つ戦略を解説。
Advanced
詳細な説明
ICUメッセージ引数のネスト
ICU MessageFormatは、plural、select、selectordinalブロックのケース内に引数をネストすることをサポートしています。これにより、複数の変数に同時に適応する複雑なメッセージが可能になります。
基本的なネスト:Select + Plural
{gender, select,
male {He has {count, plural,
=0 {no photos}
one {# photo}
other {# photos}
}}
other {They have {count, plural,
=0 {no photos}
one {# photo}
other {# photos}
}}
}
gender="male"、count=5の場合:"He has 5 photos"
ネストのベストプラクティス
- 2レベルまでに制限: 深いネストは翻訳をほぼ不可能にする
- 変化する要素を外側に: 性別が文全体に影響する場合、selectを最外側の引数にする
- 重複は許容: 翻訳者が理解できない断片化されたメッセージを作るより、各ケースで類似テキストを繰り返す方が良い
- 分割を検討: 3つ以上のネスト引数が必要な場合、別々のメッセージに分割することを検討
アンチパターン:過度な断片化
文を分割して重複を最小化しようとしないこと:
// 悪い例:断片は自然に翻訳できない
{gender, select, male {He} female {She} other {They}} has {count, plural, one {# item} other {# items}}.
// 良い例:各ケースに完全な文
{gender, select,
male {He has {count, plural, one {# item} other {# items}}.}
other {They have {count, plural, one {# item} other {# items}}.}
}
ユースケース
ソーシャル通知、ECサイトの注文サマリー、または複数の動的要因に同時に適応する必要があるアクティビティフィードなどの複雑なUIシナリオのメッセージパターンを設計するi18nアーキテクト。