【问题标题】:rails check_box value using translation I18nrails check_box 值使用翻译 I18n
【发布时间】:2014-12-18 12:03:44
【问题描述】:

只是想知道在使用普通(非常简单)形式的复选框时我应该如何在 Rails 中进行国际化; 这是我尝试过的:

view/form文件:

<%= f.check_box :do_you_agree, {}, t('submissions.yes'), t('submissions.no') %>
<%= f.check_box :do_you_agree, {}, I18n.t('submissions.yes'), I18n.t('submissions.no') %>
<%= f.check_box :do_you_agree, {}, "#{t('submissions.yes')}", "#{t('submissions.no')}" %>

...他们都回来了: translation_missing 在 HTML 中。

当我使用时:

<%= f.check_box :do_you_agree, {}, 'NO', 'YES' %>

...一切正常!

YML 文件没问题。非常感谢。

【问题讨论】:

  • 在其他地方的html页面中打印出I18n.t('submissions.yes')是否有效
  • @ant,是的,确实有效。我猜问题出在 check_box 选项/语法中

标签: ruby-on-rails forms checkbox rails-i18n


【解决方案1】:

在您的config/application.rb 中,您必须有config.i18n.default_locale = :es 行(例如:es 表示西班牙语)

而且yml必须是这样的:

es:
  submissions:
    'yes': Si
    'no': No

编辑:将是/否键设为显式字符串。它会起作用的。

为什么?因为 Rails 使用 psych gem 进行 yaml 转换。并且 psych 返回 true 和 false 以及所有这些值(请参阅链接)。

那么,如果你这样定义一个语言环境:

es:
  submissions:
    yes: Si
    no: No

在 rails 控制台你会得到:

irb> I18n.t('submissions')
=> {true=>"Si",false=>"No"}
irb> I18n.t('submissions')[true]
=> "Si"
irb> I18n.t('submissions.true')
=> "translation missing: es.submissions.true"

【讨论】:

  • 没错,即使您没有回答问题。
  • @embasbm :我回答为什么您必须在语言环境文件上使用带有键是/否、开/关和真/假的字符串。
猜你喜欢
  • 2015-04-20
  • 1970-01-01
  • 2013-06-08
  • 2015-03-25
  • 2011-10-11
  • 2018-06-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多