在rails国际化yml文件中传递变量

时间:2012-10-24 18:49:15

标签: ruby-on-rails ruby-on-rails-3 internationalization yaml

我想在那里使用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变量与其他文本合并?

2 个答案:

答案 0 :(得分:54)

简短的回答是,我相信,你不能按照你想要的方式使用an alias在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文件中使用别名将字符串连接在一起,则以下完全未推荐的代码也可以通过使字符串成为数组的两个元素来实现:

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链接到的问题之外,请看一下:

答案 1 :(得分: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