2014-12-15 3 views
2

Я использую 4.1.4 YAML файлы локалей Rails, чтобы сохранить некоторые переводы, например:Можно ли высушить ямль?

en: 
    words: 
    en: 
     passport: "passport" 
     ticket: "ticket" 
     train: "train" 
de: 
    words: 
    en: 
     passport: "passport" 
     ticket: "ticket" 
     train: "train" 

С этим я могу использовать t("words.#{to_language}.train") вернуть train для немецкого потребителя (I18n.locale ==: де) который выбрал английский как его to_language.

Мой вопрос: есть ли способ, которым я не могу повториться и что-то вроде кода ниже?

en OR de: 
    words: 
    en: 
     passport: "passport" 
     ticket: "ticket" 
     train: "train" 

Возможно, я могу присвоить все содержание слов переменной, а затем просто сделать:

en: 
    all_words 
de: 
    all_words 

Благодаря

ответ

4
all_words: &all_words 
    words: 
    en: 
     passport: "passport" 
     ticket: "ticket" 
     train: "train" 

en: 
    <<: *all_words 

de: 
    <<: *all_words 

И вы, конечно, вы можете указать ключ и его будет отменять включенное значение по умолчанию.

8

Да, YAML позволяет вам repeat nodes via reference. В частности, у YAML Ruby есть что-то нестандартное, называемое "merge key", которое будет полезно в вашей конкретной ситуации.

Например, если у вас есть, скажем:

base_fruits: &default # Alias the keys here into `default`. 
    apple: one 
    banana: two 

, то вы можете сделать

fruit_basket_one: 
    <<: *default  # Include all the keys from the alias `default`. 
    coconut: three  # Add another key too. 

fruit_basket_two: 
    <<: *default 
    durian: five 
    pear: six 

Таким образом, вы можете сделать что-то вроде:

en: 
    words: 
    en: &all_en_words 
     passport: "passport" 
     ticket: "ticket" 
     train: "train" 

de: 
    words: 
    en: 
     <<: *all_en_words 
     custom_word: "custom translation" 

Я бы сказал, что это вероятно, это не самый подходящий способ сделать это. Если de пользователь хочет en переводов, то они должны просто использовать en. В противном случае вам понадобится N^2-отображение для каждой пары (фактический язык, желаемый язык), а не только список N переводов, который намного проще поддерживать.

Смежные вопросы