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

ale*_*lex 36 yaml ruby-on-rails internationalization ruby-on-rails-3

我想在那里使用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
Run Code Online (Sandbox Code Playgroud)

如何将*site_name变量与其他文本组合在一起?

Pau*_*nti 56

简而言之,我相信,你不能以你想要的方式在YAML中使用别名进行字符串插值.

在你的情况下,我会做的是在我的语言环境文件中有如下内容:

en:
  site_name: "Site Name"
  static_pages:
    company:
      description: ! '%{site_name} is an online system'
Run Code Online (Sandbox Code Playgroud)

然后使用站点名称作为参数调用适当的视图:

t('.description', site_name: t('site_name'))
Run Code Online (Sandbox Code Playgroud)

这会得到你"Site Name is an online system".

但是,如果您迫切希望在YAML文件中使用别名将字符串连接在一起,则以下完全未推荐的代码也可以通过使字符串成为数组的两个元素来工作:

en:
  site_name: &site_name "Site Name"
  static_pages:
    company:
      description:
        - *site_name
        - "is an online system"
Run Code Online (Sandbox Code Playgroud)

然后你会join在适当的视图中的数组像这样:

t('.description').join(" ")
Run Code Online (Sandbox Code Playgroud)

哪个也能帮到你"Site Name is an online system".

但是,在您决定沿着这条路走下去之前,除了@felipeclopes链接到的问题之外,请看一下:


fel*_*pes 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
Run Code Online (Sandbox Code Playgroud)

这个例子取自:使用字典重构Ruby on Rails i18n YAML文件


归档时间:

查看次数:

34001 次

最近记录:

12 年,11 月 前