2014-12-15 3 views
2

나는 예를 들어, 일부 번역을 저장하기 위해 레일 '4.1.4 YAML 로케일 파일을 사용하고이 나는 독일의 사용자에 대한 train을 반환 t("words.#{to_language}.train")를 사용할 수와yaml을 건조 할 수 있습니까?

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

(I18n.locale == : 드) 누가 그의 영어 to_language을 선택했습니다.

내 질문은 : 내 자신을 반복 할 수 없으며 아래 코드와 같은 것이 있습니까?

답변

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

en: 
    <<: *all_words 

de: 
    <<: *all_words 

en: 
    all_words 
de: 
    all_words 

감사합니다 그리고 당신은 물론 당신이 다음을 키를 지정할 수 있습니다

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

아마도 난 그냥 할 다음 변수에 단어의 모든 콘텐츠를 할당 할 수 있습니다 포함 된 기본값보다 우선합니다.

8

예, YAML을 사용하면 repeat nodes via reference 수 있습니다. 특히, Ruby의 YAML은 특정 상황에서 유용 할 "merge key"이라는 비표준을 가지고 있습니다. 예를 들어

, 당신이있는 경우는 말한다 :이 것을 말할 것

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

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

:

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 

그래서 만약 당신이 뭔가를 할 수 있습니다 할 수있는 하지만 아마도 그것에 대해 갈 수있는 올바른 방법이 아닙니다. de 사용자가 en 번역을 원하면 en을 사용해야합니다. 그렇지 않으면 훨씬 더 쉽게 유지할 수있는 N 개의 번역 목록 대신 (실제 언어, 원하는 언어) 모든 쌍의 N^2 매핑이 필요합니다.

관련 문제