我目前正在一个项目中工作,出于某种原因,每种语言都有两个文件具有几乎相同的内容:
config/locales/en/my_translations.yml
config/locales/en/my_special_translations.yml
config/locales/pt/my_translations.yml
config/locales/pt/my_special_translations.yml
具有相同名称的文件具有相同的内容,已翻译为不同的语言。这里的问题是my_translations
和my_special_translations
有很多重复的代码。下面我展示了一个假数据示例,以显示重复和差异的位置:
config/locales/en/my_translations.yml
es:
animals:
happy_animals:
dog: Dog
cat: Cat
horse: Horse
sad_animals:
cow: Cow
elephant: Elephant
config/locales/en/my_special_translations.yml
es:
special_animals: # This line is different
happy_animals:
dog: Dog
cat: Cat
horse: Horse
sad_animals:
cow: Farm cow # This line is different
elephant: Elephant
这只是一个例子,但我有几百行的文件,其中只有少数或不同。有没有办法减少或避免文件之间的这种重复?
修改
我使用此代码的方式如下:
animals_scope = special? ? 'special_animals' : 'animals'
animals_hash = I18n.translate(animals_scope, locale: current_locale)
animals_hash.keys.each do|animal_key|
# Stuff
end
也就是说,对于.yml文件中的每个元素,我正在执行一些操作
答案 0 :(得分:3)
您可以使用YAML anchors and aliases并仅覆盖不同的值:
es:
animals: &ANIMALS
happy_animals:
dog: Dog
cat: Cat
horse: Horse
sad_animals:
cow: Cow
elephant: Elephant
special_animals:
<<: *ANIMALS
sad_animals:
cow: Farm cow