【问题标题】:Passing variables inside rails internationalization yml file在rails国际化yml文件中传递变量
【发布时间】:2012-10-14 21:05:48
【问题描述】:

我想使用在 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 变量与附加文本结合起来?

【问题讨论】:

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


【解决方案1】:

简短的回答是,我相信,不,你不能使用 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 链接到的问题之外,请先看看:

【讨论】:

  • 谢谢你,保罗,如此详细的回答。现在我知道了join 这个技巧,它可能有用。但总结一下我选择在 .yml 文件中多次写入站点名称的所有选项。它不符合 DRY 原则,但比其他棘手的选项更好。
  • 我意识到这已经相当老了,但我很好奇“描述:!'%{site_name} 是一个在线系统'”中的爆炸(!)的目的?
【解决方案2】:

您可以使用以下语法,如示例中所示:

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

【讨论】:

  • 问题是关于在 yml 文件中传递变量,而不是从视图到 yml
  • 抱歉,您可以在这里找到答案:stackoverflow.com/questions/11097572/… 阅读 cmets,看到解决方案的其他人不支持它。希望这会有所帮助!
  • 谢谢,很有用。编辑你的答案请“使用 & 和 * 语法”,这样我就可以投票给你的答案。但这不是完整的解决方案。我已经编辑了我的问题。
  • 答案已编辑。感谢您接受它,希望这可以帮助您解决问题。
  • 我已经投票了,谢谢。但是不能接受,因为这个解决方案不完整。我已经编辑了问题。
猜你喜欢
  • 2014-01-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-07
相关资源
最近更新 更多