2012-10-24 2 views
32

yml 파일에 선언 된 변수를 사용하고 싶습니다. 예를 들어, site_name을 선언했으며 아래에서 description에 사용하고 싶습니다.레일 변수 내부 변수 전달 yml 파일

en: 
    site_name: &site_name "Site Name" 
    static_pages: 
    company: 
     description: *site_name #this works fine 
     description: "#{*site_name} is an online system" #this doesn't work 

변수를 추가 텍스트와 결합하려면 어떻게해야합니까?

+0

**는 참조 : ** https://stackoverflow.com/questions/15777987/string-interpolation-in-yaml – dreftymac

답변

54

짧은 대답은 내가 더 당신이 YAML의 문자열 보간을 할 수없는, 생각입니다 an alias을 사용하여 원하는 방식으로

en: 
    site_name: "Site Name" 
    static_pages: 
    company: 
     description: ! '%{site_name} is an online system' 

다음 매개 변수로 사이트 이름과 해당 뷰에서 전화 :

t('.description', site_name: t('site_name')) 
귀하의 경우에는

은, 내가 무엇을 할 것이라고하는 것은 내 로케일 파일에 다음과 같은 무언가가있다

너에게 "Site Name is an online system"을 줄 것입니다.

그러나, 다음과 함께 문자열을 연결하기 위해 YAML 파일에서 별칭을 사용하는 필사적 인 경우 코드는 문자열 배열의 두 요소가 될함으로써 작동합니다 완전히 권장되지 :

en: 
    site_name: &site_name "Site Name" 
    static_pages: 
    company: 
     description: 
     - *site_name 
     - "is an online system" 

다음은 다음과 같이 해당 뷰에 배열 join 것 :

t('.description').join(" ") 

또한 당신에게 "Site Name is an online system"을 얻을 것입니다. 그러나

, 당신은 떨어져에 연결 @felipeclopes 질문에서,이 길을 가기로 결정하기 전에, 한 번 봐 가지고 합치 국제화 문자열 (TL에 관한

  • this StackOverflow answer을, 박사하지 위해 할하시기 바랍니다 당신의 번역 팀의 술).
  • StackOverflow 질문 herehere 귀하의 질문과 유사합니다.
+0

폴, 그런 상세한 답변을 해주셔서 감사합니다. 이제 'join'으로이 트릭을 알았습니다. 유용 할 수 있습니다. 그러나 .yml 파일에 사이트 이름을 여러 번 쓰기로 선택하는 모든 옵션을 요약합니다. 그것은 DRY 원칙에 따르지 않지만 다른 까다로운 옵션보다 좋습니다. – alex

+0

나는 이것이 오히려 오래되었다는 것을 알고있다. 그러나 "description :! '에서 % {site_name}은 온라인 시스템"이라고하는 쾅 (!)의 목적에 대해 궁금합니다. –

6

당신은 예에서와 같이, 다음 구문을 사용할 수 있습니다

dictionary: 
    email: &email Email 
    name: &name Name 
    password: &password Password 
    confirmation: &confirmation Confirmation 

activerecord: 
    attributes: 
    user: 
     email: *email 
     name: *name 
     password: *password 
     password_confirmation: *confirmation 
    models: 
    user: User 
users: 
    fields: 
    email: *email 
    name: *name 
    password: *password 
    confirmation: *confirmation 
sessions: 
    new: 
    email: *email 
    password: *password 

이 예제가에서 찍은 : Refactoring Ruby on Rails i18n YAML files using dictionaries

+0

질문입니다 – alex

+0

죄송 YML하지보기에서, YML 파일 내부 한다거나 할을 전달하는 방법에 대한, 그래서 당신은 여기에 답변을 찾을 수 있습니다 : http://stackoverflow.com/questions/11097572/refactoring-ruby-on-rails-i18n-yaml-files-using-dictionaries 의견을 읽고, 그것은 다른 사람에 의해 지원되지 않았습니다 해결책을 본 사람들. 희망이 도움이됩니다. – felipeclopes

+0

Thx, 유용합니다. 대답 pls "use & and * syntax"를 편집하면 대답을 투표 할 수 있습니다. 하지만 완벽한 해결책은 아닙니다. 내 질문을 편집했습니다. – alex