2012-10-24 7 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

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 

この例では、から取られましたあなたが望む方法は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ファイルで別名を使うために必死ならコードは、文字列は、アレイの2つの要素であることが持っていることによって働くだろう完全に非推奨:

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を、DRはためないでくださいあなたの翻訳チームのために)。あなたの質問に似ている
  • StackOverflowの質問herehere
+0

Paulさん、ありがとうございました。 今、私はこのトリックを 'join'で知っています。それは役に立つかもしれません。 しかし、私はサイト名を.ymlファイルに複数回書き込むことを選択したすべてのオプションを要約しています。 DRYの原則には合致しませんが、他のトリッキーなオプションよりも優れています。 – alex

+0

私はこれがかなり古くなっていることを認識していますが、 "description:! '%{site_name}はオンラインシステムです"というバグの目的については興味がありますか? –

6

あなたは例のように、次の構文を使用することができます。短い答えはあなたがYAMLの文字列補間を行うことができないいいえ、私は信じている、あるRefactoring Ruby on Rails i18n YAML files using dictionaries

+0

質問です – alex

+0

は申し訳ありませんがYMLしない観点から、YMLファイル内varaiblesを渡すことについて、あなたはここで答えを見つけることができます:http://stackoverflow.com/questions/11097572/refactoring-ruby-on-rails-i18n-yaml-files-using-dictionaries コメントを読む、それは他の人によってサポートされていませんでした解決策を見た人。 これが役立つことを願っています! – felipeclopes

+0

Thx、それは便利です。あなたの答えを編集するpls "use&and * syntax"ので、私はあなたの答えを投票することができます。 しかし、それは完全な解決策ではありません。私は自分の質問を編集しました。 – alex