我在页面中有一个标题,我希望看起来像这样:
' Aanpassen bewoner' ' Aanpassen gebruiker'
' Aanpassen'是编辑的荷兰人。 ' bewoner',' gebruiker'是高级用户的翻译类名。
我已将活动记录类翻译成文件,如下所示:
nl:
activerecord:
models:
user:
one: 'Gebruiker'
有没有办法在视图中(或在辅助类中)编写一次头,所以它需要当前显示的模型并显示翻译?理想情况下,我只有一行代码,我可以在所有类的所有编辑视图中使用(只要它们当然是翻译的)。
答案 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 将为您提供其他形式。