回答がすでに受け入れられていることは知っていますが、この質問は私に考える材料を与えてくれました。Rails i18n yml ファイルの別の構造を共有して検討/批判できるようにしようと思いました。
私がしたいことを考えると
t('.some_translation')
デフォルトのアプリ構造を維持して、ビューのように省略形の「遅延」ルックアップを使用できるようにします。
- 特に同じだけでなく、同じ文脈/意味を持つ単語では、できるだけ多くの文字列の繰り返しを避けます。
- キーを 1 回変更するだけで、参照されているすべての場所にキーが反映されます。
次のようなconfig/locales/en.ymlファイルの場合:
activerecord:
attributes:
user:
email: Email
name: Name
password: Password
password_confirmation: Confirmation
models:
user: User
users:
fields:
email: Email
name: Name
password: Password
confirmation: Confirmation
sessions:
new:
email: Email
password: Password
かなりの繰り返しがあり、「電子メール」や「パスワード」などの単語の文脈は明確であり、それぞれのビューで同じ意味を持っていることがわかります。"Email" を "email" に変更する場合、それらすべてを変更しなければならないのは少し面倒なので、何らかの辞書を参照するように文字列をリファクタリングしたいと思います。&
では、次のようなアンカーを使用してファイルの先頭に辞書ハッシュを追加するのはどうでしょうか。
dictionary:
email: &email Email
name: &name Name
password: &password Password
confirmation: &confirmation Confirmation
activerecord:
attributes:
user:
email: *email
name: *name
password: *password
password_confirmation: *confirmation
models:
user: User
users:
fields:
email: *email
name: *name
password: *password
confirmation: *confirmation
sessions:
new:
email: *email
password: *password
ビューでまったく同じ単語/フレーズの複数のインスタンスを取得するたびに、辞書にリファクタリングできます。ベース言語のキーの辞書翻訳がターゲット言語にとって意味をなさない場合は、ターゲット言語の参照値を静的文字列に変更するか、ターゲット言語の辞書に追加のエントリとして追加します。各言語の辞書が大きくなりすぎて扱いにくい場合は、別のファイルにリファクタリングできると確信しています。
i18n yaml ファイルを構造化するこの方法は、私が試したいくつかのローカル テスト アプリでうまく機能するように見えました。すばらしいLocaleappが将来、この種のアンカー/参照をサポートしてくれることを願っています。とにかく、この辞書の話はすべてオリジナルのアイデアである可能性はありません.YAMLでのアンカー参照、または一般的な「辞書」の概念全体に他の問題がありますか? それとも、デフォルトのバックエンドを完全に取り除いて、Redisなどに置き換えるほうがよいのでしょうか?