ファイル構造で i18n 遅延検索を使用するための Rails
-
20-12-2019 - |
質問
言及する
[1]これ Rails の国際化:i18n はネストされたロケール ディレクトリで検索します
[2]これ http://guides.rubyonrails.org/i18n.html#organization-of-locale-files
このレール ガイドでは、どのように構造化できるかを示すだけで、その後は途切れてしまいます。指定されたファイル構造で検索する方法については何も言及されていませんでした。
それで、とにかくファイル構造でLazy Lookを使用する方法があるかどうか疑問に思っていました
次のディレクトリを検討してください
config/locales app/views
|locales |views
|-defaults |-fruits
|--en.yml |--apple
|--views |--banana
|---fruits |-meats
|----en.yml |--chicken
|---meat |--beef
|----en.yml
config/application.rb
config.i18n.load_path += Dir["#{Rails.root.to_s}/config/locales/**/**/*.{rb,yml}"]
.yml
locales/views/fruits/en.yml| locales/views/meats/en.yml
|
en: | en:
produce: "Produce" | meat_section: "Meat Section" <--- shared key within folder
|
apple: | chicken:
red: "Red" | white_meat: "White Meat"
|
banana: | beef:
yellow: "Yellow" | red_meat: "Red Meat"
locales/defaults/en.yml
en:
repeat_key:
market: "Market" <------- shared key across folders
これを行う方法はありますか?またはそれに近いもの??
views/fruits/apple.html.haml 内
= t('.red') <------- unique key in apple
= t('produce') <------- shared key within fruits folder
= t('repeat_key.maket') <------- repeat key across fruits and meat folders
次のコードが機能することはわかっていますが、私は Apple ディレクトリにいるので、一意のキーの遅延検索を使用する方法があるはずです。
views/fruits/apple.html.haml 内
= t('apple.red') <------- unique key in apple
= t('produce') <------- shared key within fruits folder
= t('repeat_key.maket') <------- repeat key across fruits and meat folders
それが可能であればそう思います。重複キーを最小限に抑えることができ、追加のエイリアスを追加する必要がある場合は、必要なときに追加できます。なぜなら、ほとんどの翻訳チームは単語ごとに料金を請求すると思うからです。
解決
レールが選択されたネストレベルのためにすべての.ymlファイルを実際に引っ張って、それらを1つに組み合わせることを見つけましたが、それはフードの下で起こる最終的な.ymlと私たちが見ることができないもの(少なくとも私はできませんでした。それを見る方法を見つける。追加では、.ymlの内部が構造化されている限り、.ymlの名前は関係なく、怠惰なルックアップが機能します。
最後に、私は次のように地域を整理しました、それはそれを整理するより良い方法だと思います。
|config
|-locales
|--en
|---en.yml
|---fruits.en.yml
|---meat.en.yml
.
.yml
locales/en/fruits.en.yml| locales/en/meats.en.yml
|
en: | en:
fruits: | meats:
produce: "Produce" | meat_section: "Meat Section" <-shared key within folder
|
apple: | chicken:
red: "Red" | white_meat: "White Meat"
|
banana: | beef:
yellow: "Yellow" | red_meat: "Red Meat"
.
ロケール/ en / en.yml
en:
repeat_key:
market: "Market" <------- shared key across folders
.
views / fruits / apple.html.haml
= t('.red') <------- unique key in apple
= t('fruits.produce') <------- shared key within fruits folder
= t('repeat_key.maket') <------- repeat key across fruits and meat folders
.
この条約
- "。"のキーAKA怠惰なこれは、 のどちらを示すものを示すものです。
- Forterのファイル名が、共有キーとその場所の場所
- フォルダ間で多くの繰り返しのキーはrepeat_keyの下に行くことができ、それらはen / en.yml のプレゼンスです。
他のヒント
@エアウィック219。
遅延検索を使用したい場合は、ファイルを準備する必要があると思います config/locales/views/fruits/apple/en.yml
.
フォルダ内に共有キーが欲しい場合は、ちょっと冗長ですがこんな感じを追加してみてはいかがでしょうか。
config/locales/views/shared/en.yml
,
en:
shared:
fruits:
produce: "Produce"
= t('shared.fruits.produce')
または、遅延検索の使用をあきらめます:(