web-dev-qa-db-ja.com

Rails国際化ymlファイル内で変数を渡す

すぐにymlファイルで宣言された変数を使用したいと思います。たとえば、site_nameおよびdescriptionで使用したい。

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

どうすれば結合できますか*site_name追加テキスト付きの変数?

37
alex

簡単に言えば、YAMLで エイリアス を使用したい方法で文字列補間を行うことはできないと思います。

あなたの場合、私がすることは私のロケールファイルに次のようなものがあります:

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がリンクしている質問とは別に、この道を進むことに決める前に、以下を確認してください。

  • このStackOverflowの回答 i18n文字列の連結について(tl; dr翻訳チームのために使用しないでください)。
  • StackOverflowの質問 here および here は、質問に似ています。
57
Paul Fioravanti

例のように、次の構文を使用できます。

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

この例は、 dictionaries を使用したRuby i18n YAMLファイルのRailsのリファクタリングから取得されました。

6
felipeclopes