I18n如何在视图

时间:2016-04-18 13:04:01

标签: ruby-on-rails rails-i18n

我在页面中有一个标题,我希望看起来像这样:

' Aanpassen bewoner' ' Aanpassen gebruiker'

' Aanpassen'是编辑的荷兰人。 ' bewoner',' gebruiker'是高级用户的翻译类名。

我已将活动记录类翻译成文件,如下所示:

nl:
  activerecord:
    models:
      user:
        one: 'Gebruiker'

有没有办法在视图中(或在辅助类中)编写一次头,所以它需要当前显示的模型并显示翻译?理想情况下,我只有一行代码,我可以在所有类的所有编辑视图中使用(只要它们当然是翻译的)。

2 个答案:

答案 0 :(得分:0)

您可以尝试从当前控制器名称猜测当前模型(这是我认为最难的部分),然后您可以尝试I18n它。以下助手就是这样做的:

# application_helper.rb
def translated_model_name(model = controller_name)
  model_class = model.to_s.singularize.camelize
  Object.const_defined?(model_class) ? model_class.constantize.model_name.human : model.to_s
end

帮助程序尝试猜测模型名称,然后使用model_name.human方法进行翻译(请参阅docs)。它可以这样在您的模板中使用:

# e.g. in users/index.html.erb
<%= translated_model_name %>
# => prints translation for the :user model

# whereas in seniors/show.html.erb
<%= translated_model_name %>
# => prints translation for the :senior model

如果无法从控制器名称自动猜出模型名称,则可以使用辅助函数的参数覆盖它:

# e.g. in some_non_model_path/index.html.erb
<%= translated_model_name(:user) %>
# => prints translation for the :user model

答案 1 :(得分:0)

使用#underscore 到那个。请参阅变形模块。所以在控制器中,

underscore(your_object.model.to_s)

会将 YourTerrificModel 转换为 your_terrific_model。翻译:

I18n::t("activerecord.model.#{underscore(your_object.model.to_s)}", count: 1)

将为您提供课程的翻译名称。计数 > 1 或计数 == 0 将为您提供其他形式。