用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
一定不能为零。