用I18n.t提交按钮助手

我想为提交按钮编写一个帮助程序,它会考虑操作(创建或更新)以获得正确的翻译。 他们来了 :

fr: submit: create: user: "Créer mon compte" product: "Déposer l'objet" session: "Se connecter" update: user: "Mettre à jour mon compte" product: "Modifier l'objet" 

我试过这个:

 def submit_button(model) if model == nil I18n.t('submit.create.%{model}') else I18n.t('submit.update.%{model}') end end 

但它没有用,rspec发给我的是:

 Capybara::ElementNotFound: Unable to find button ... 

我知道这是一个语法问题,但我找不到如何使这项工作……

你不需要帮助器,你可以使用普通导轨实现它。 您唯一需要的是正确订购您的I18n YAML

 fr: helpers: submit: # This will be the default ones, will take effect if no other # are specifically defined for the models. create: "Créer %{model}" update: "Modifier %{model}" # Those will however take effect for all the other models below # for which we define a specific label. user: create: "Créer mon compte" update: "Mettre à jour mon compte" product: create: "Déposer l'objet" update: "Modifier l'objet" session: create: "Se connecter" 

之后,您只需要像这样定义提交按钮:

 <%= f.submit class: 'any class you want to apply' %> 

Rails将获取按钮所需的标签。

你可以在这里看到更多关于它的信息

 def submit_button(model) if model == nil I18n.t("submit.create.#{model}") else I18n.t("submit.update.#{model}") end end 

从helper或view发送局部变量时,%{}在en.yml文件中使用。

您需要模型的名称而不是模型对象本身。

请尝试以下方法:

 def submit_button(model) model_name = model.class.name.underscore if model.new_record? I18n.t("submit.create.#{model_name}") else I18n.t("submit.update.#{model_name}") end end 

model一定不能为零。