Rails使用i18n懒惰查找文件结构

时间:2013-11-15 16:46:57

标签: ruby-on-rails internationalization haml rails-i18n i18n-gem

指的是

[1]这Rails Internationalization: i18n look up with nested locales directories

[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 

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 

我认为如果可行的话。它可以最小化重复键,如果我们需要添加额外的别名,我们可以在必要时添加它,因为我相信大多数翻译团队每个单词收费

2 个答案:

答案 0 :(得分:1)

我发现rails实际上会将所有.yml文件拉到一个选定的嵌套级别并将它们合并到一个但最后的.yml会发生在引擎盖下以及我们看不到的东西(至少我不能'找到一种方法来看它);另外,.yml名称无关紧要,只要.yml内部结构化并且Lazy查找就可以工作。

最后,我按照以下方式组织了区域设置,我认为这是组织它的更好方法。

|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

按照这个惯例

  1. 带有“。”的键。 aka Lazy查找这个,表明它在
  2. 中的.yml
  3. 前面带有文件名的密钥显示共享密钥及其位置
  4. 在文件夹中有很多重复的键可以在repeat_key下,并且这些键存在于en / en.yml中

答案 1 :(得分:0)

@ AirWick219。

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

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

config/locales/views/shared/en.yml

en:
  shared:
    fruits:
      produce: "Produce" 

= t('shared.fruits.produce')

或者放弃使用延迟查找:(