I18n我遇到了问题。我找不到正确的方法来翻译ActionController错误消息,如
The action '...' could not be found for ...Controller
我在此存储库中的任何此示例文件中找不到翻译:https://github.com/svenfuchs/rails-i18n/blob/master/rails/locale/en.yml
我找到了验证错误等的解决方案,但没有找到这种错误。
是否可以使用I18n文件翻译此类错误消息?
更新:我想翻译它们,因为它们会向用户显示。我在这个railscast中做到了:http://railscasts.com/episodes/53-handling-exceptions-revised
所有例外都由railsapp本身处理,而不是通过具有此配置的middelware处理:
config.exceptions_app = self.routes
然后将所有例外路由到单个操作:
match '(errors)/:status', to: 'errors#show', constraints: {status: /\d{3}/} # via: :all
在此操作中,错误消息由变量使用:
def show
@exception = env["action_dispatch.exception"]
respond_to do |format|
format.html { render action: request.path[1..-1] }
format.json { render json: {status: request.path[1..-1], error: @exception.message} }
end
end
此变量随后显示在生产视图中:
<h1>Forbidden.</h1>
<% if @exception %>
<p><%= @exception.message %></p>
<% else %>
<p>You are not authorized to perform that action.</p>
<% end %>
现在错误消息是动态的。我认为一般来说这是一件好事,因为用户可以获得更多信息,以及如何避免特定错误。但是有太多的信息。我不希望他们看到例如哪个控制器处理了该动作。因此,我希望将错误消息“翻译”为更安全的变体。
答案 0 :(得分:1)
您可以使用例外类名作为I18n
翻译的密钥。这样,您可以在翻译文件中使用异常类名称(基本上是异常),然后使用您自己的单词来处理该特定异常。
I18n.t(@exception.class.name.underscore, default: "Generic Error")