如何在表单标签助手中传递i18n插值变量?

10
假设有以下en.yml文件:
#en.yml
en:
  activerecord:
    books:
       price: "Price in %{currency}"

然后在视图中可以这样做:

<%= t :price, :scope => "activerecord.attributes.book", :currency => "USD"%>

它将打印出"价格以美元计算"。

但是当这个翻译被放在一个表单中时,我无法确定如何传递货币信息。

# views/books/edit.html
f.label :price

可以理解为抛出了I18n :: MissingInterpolationArgument,但我无法确定传递缺失参数的语法是什么

# views/books/edit.html
f.label :price, :currency => "USD"

无法正常工作。

1个回答

11

我会尝试以下方法:

<%= f.label I18n.t(:price, :scope => "activerecord.attribute.book", :currency => "USD") %>

那并不真正起作用。如果“price”的翻译是“美元价格”,那么您的标签标记将如下所示:<label for="book_Price in USD">Price in USD</label>,这不是有效的HTML。 - cailinanne
我明白了,那么这个代码: <%= f.label :price, I18n.t(:price, :scope => "activerecord.books.price", :currency => "USD") %> 应该会更好。抱歉我现在无法运行和测试它...因为我在工作时没有可用的rails环境;-( - Cygnusx1
没错,这就是我开始的地方(请参见原始问题)。然而,在进行了大量调查后,我认为我看到的异常实际上是由client_side_validations模块引发的。如果未涉及client_side_validations模块,我猜您在此处评论中的第二个建议应该可以正常工作。 - cailinanne

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接