多个i18n提交助手以进行相同的控制器操作?

时间:2017-04-28 20:34:07

标签: ruby-on-rails ruby-on-rails-4 internationalization

我有一些i18n助手设置如下:

en:
  helpers:
    submit:
      post:
        create: "Save and Continue"
        update: "Update"

现在在_form.html.erb

<%= f.submit %>

这很有效。

现在,我向:status模型添加了Post属性,并希望根据:update值为@post.status操作提供不同的消息。类似的东西:

en:
  helpers:
    submit:
      post:
        create: "Save and Continue"
        update: "Update"
          publish: "Save Draft"

这在i18n下很容易实现吗?或者我应该只写一个帮手?

2 个答案:

答案 0 :(得分:2)

en:
  foo: "bar"

这些是翻译键 - 不是帮助者。 Rails中的助手是包含辅助方法的模块。

  

这在i18n下很容易实现吗?或者我应该只写一个帮手?

是和否。

导轨形成助手只需根据动作翻译按钮。这对于99%的时间使用它是足够好的。

您可以使用Rails i18n模块定义翻译。并创建一个帮助方法来覆盖您的案例:

module PostHelper
  def post_submit_button(form_builder)
    post = form_builder.object
    if object.persisted?
      concat( form_builder.submit( 
        I18n.t("helpers.submit.post.update.#{post.status}")
      )
    else
      concat( form_builder.submit )
    end    
  end
end

答案 1 :(得分:1)

在I18n下绝对可行。你基本上会做类似

的事情
message = I18n.t("helpers.submit.post.update.#{post.status}")

假设post是你的帖子模型的一个实例。