指的是

[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
.

通过本公约

  1. 带“。”的关键又名懒惰抬头看,这表明它在
  2. 中是哪个。
  3. 前面的文件名的键显示共享密钥以及它的位置
  4. 跨文件夹跨文件夹的密钥可以在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')

或者放弃使用惰性查找:(

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top