Rails 使用 i18n 延迟查找文件结构
-
20-12-2019 - |
题
指的是
[1] 这个 Rails 国际化:i18n 使用嵌套语言环境目录查找
[2] 这个 http://guides.rubyonrails.org/i18n.html#organization-of-locale-files
其中导轨仅显示如何构造它,但之后它就会被切断。它没有提到如何查找给定的文件结构
所以我想知道是否有办法对文件结构使用惰性查找
考虑以下目录
config/locales app/views
|locales |views
|-defaults |-fruits
|--en.yml |--apple
|--views |--banana
|---fruits |-meats
|----en.yml |--chicken
|---meat |--beef
|----en.yml
配置/应用程序.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
我想如果这可能的话。它可以最大限度地减少重复键,如果我们需要添加额外的别名,我们可以在必要时添加它,因为我相信大多数翻译团队按字收费
解决方案
我发现Rails实际上将为所选嵌套级别提取所有的.MYML文件,并将它们组合到一个,而是将其发生在引擎盖下的最终的。找到一种方法来看看);在额外的情况下,只要里面的。内部是结构化和懒惰的抬头就可以工作,那么.MYML名称无关紧要。
最后我确实组织了以下方式,我认为这是一个更好的组织它的方法。
|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"
.
locales / en / en.yml
en:
repeat_key:
market: "Market" <------- shared key across folders
.
在视图/果实/ 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
.
通过本公约
- 带“。”的关键又名懒惰抬头看,这表明它在 中是哪个。
- 前面的文件名的键显示共享密钥以及它的位置
- 跨文件夹跨文件夹的密钥可以在Replop_key下进行,而那些则在en / en.yml中存在
其他提示
@AirWick219。
如果您想使用延迟查找,我认为您需要准备文件 config/locales/views/fruits/apple/en.yml
.
如果您想在文件夹内共享密钥,如何添加类似的内容,尽管它有点多余。
config/locales/views/shared/en.yml
,
en:
shared:
fruits:
produce: "Produce"
= t('shared.fruits.produce')
或者放弃使用惰性查找:(