【问题标题】:Internationalization: Passing variables in HAML to YAML (Rails)国际化:将 HAML 中的变量传递给 YAML(Rails)
【发布时间】:2014-01-16 14:26:13
【问题描述】:

Rails/HAML/YAML 中的国际化存在语法问题,在连接字符串时将 JavaScript (?) 变量传递给 yaml。

在国际化之前,HAML 文件如下所示:

Dear {{order.name}},

我更改了它,以下工作正常 - 在 en.yml 中

en:
  salutation: "Dear %{customer_name},"

在 HAML 文件中:

= I18n.t('.salutation', customer_name: "Robert")

但是,我想将 {{order.name}} 中的值分配给它,而不是“Robert”。以下方法不起作用:

= I18n.t('.salutation', customer_name: {{order.name}})
= I18n.t('.salutation', customer_name: order.name)
= I18n.t('.salutation', customer_name: @order.name)

将变量排除在 yaml 之外并使用 {{variable}} 语法在 HAML 中构建字符串的解决方法并不方便,因为我们在不同的地方使用了多个 yaml 项目,撕掉会很麻烦字符串分开(尤其是翻译文件)。

谢谢你,很抱歉这个新手问题,但我在网上找不到任何东西......

【问题讨论】:

  • 指定I18n.t('.salutation', customer_name: @order.name)时会出现哪个错误?
  • Dear {{order.name}}, 看起来不像 HAML。看起来像液体
  • 对我来说看起来像是一些 JS 前端框架。
  • {{order.name}} 应该是 JS 前端(推特引导程序,如果我是正确的)。
  • @majioja:没有真正的错误信息,只是没有显示文字...

标签: ruby-on-rails internationalization haml yaml


【解决方案1】:

我相信您需要插入要传递给I18n.t 方法的字符串:

= I18n.t('.salutation', customer_name: "#{order.name}")

注意:我没有对此进行测试,但我相信它会起作用。

【讨论】:

  • 感谢您的回答!我已经尝试过了,但不幸的是它似乎不起作用......但是,我确实通过将变量直接插入到 yml 文件中找到了解决方案:salutation: "Dear {{order.name}},",并将 HAML 文件保持为简单:= I18n.t '.salutation'
【解决方案2】:

您需要将{{order.name}} 作为字符串传递:

= I18n.t('.salutation', customer_name: '{{order.name}}')

这将像您期望的那样输出Dear {{order.name}}

【讨论】:

    猜你喜欢
    • 2012-10-14
    • 1970-01-01
    • 2012-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多