我正在尝试本地化我的rails应用程序(webservice)。 我安装了gem'trail-i18n',效果很好。
除了它不翻译ActiveRecord :: RecordNotFound消息。 在rails代码中: https://github.com/rails/rails/blob/3-2-stable/activerecord/lib/active_record/relation/finder_methods.rb
raise RecordNotFound, "Couldn't find #{@klass.name} with #{conditions.to_a.collect {|p| p.join(' = ')}.join(', ')}"
似乎邮件是硬编码的。
是否有任何解决方案,除了不使用Model.find_by_'attribute'?
答案 0 :(得分:3)
我有理由告诉用户更多信息:
exception.message.match /^Couldn't find (\w+) with (id=([\S]*))?/
msg = t 'activerecord.exceptions.not_found', klass: $1, id: $3
因为我想要捷克语转换:
cs:
activerecord:
exceptions:
not_found: "Nelze nalézt %{klass} s id=%{id}"
..什么是硬编码的东西,唯一的方法是硬编码
答案 1 :(得分:1)
您可以捕获应用程序控制器中的RecordNotFound异常并返回本地化消息。这样您还可以更改404s的默认行为:
class ApplicationController < ActionController::Base
rescue_from ActiveRecord::RecordNotFound, :with => :not_found
private
def not_found
render :json => { :message => I18n.t('exception.record_not_found') },
:status => :not_found
end
end
答案 2 :(得分:1)
YAML配置的另一种方式:
en:
activerecord:
exceptions:
not_found: "%{model_name} not found"
您还可以为模型名称设置复数形式,添加如下:
en:
activerecord:
models:
user:
one: Dude
other: Dudes