2

[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 

有什么办法可以做到这一点?或任何接近的东西?

在意见/水果/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.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 

我认为,如果这是可能的。它可以最大限度地减少重复键,如果我们需要添加额外的别名,我们可以在必要时添加它,因为我相信大多数翻译团队按单词收费

4

2 回答 2

1

我发现 rails 实际上会为选定的嵌套级别提取所有 .yml 文件并将它们组合成一个,但最终的 .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 

在意见/水果/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. 带“.”的键 又名懒惰查找这表明它在哪个 .yml
  2. 前面带有文件名的密钥显示该共享密钥及其位置
  3. 跨文件夹有很多重复的键可以放在repeat_key下,这些键存在于en/en.yml中
于 2013-11-18T15:55:05.557 回答
0

@AirWick219。

如果您想使用惰性查找,我认为您需要准备文件config/locales/views/fruits/apple/en.yml.

如果你想在文件夹中共享密钥,如何添加这样的东西,虽然它有点多余。

config/locales/views/shared/en.yml,

en:
  shared:
    fruits:
      produce: "Produce" 

= t('shared.fruits.produce')

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

于 2013-11-16T03:09:36.417 回答