Ruby on rails ActiveRecordNotFound本地化
我正在尝试本地化我的rails应用程序(webservice)。 我安装了gem'rails-i18n',运行良好 只是它不翻译ActiveRecord::RecordNotFound消息。 在rails代码中: 这条消息似乎是硬编码的Ruby on rails ActiveRecordNotFound本地化,ruby-on-rails,activerecord,internationalization,rails-i18n,Ruby On Rails,Activerecord,Internationalization,Rails I18n,我正在尝试本地化我的rails应用程序(webservice)。 我安装了gem'rails-i18n',运行良好 只是它不翻译ActiveRecord::RecordNotFound消息。 在rails代码中: 这条消息似乎是硬编码的 除了不使用模型之外,还有什么解决方案。通过“属性”查找?您可以在应用程序控制器中捕获RecordNotFound异常并返回本地化消息。通过这种方式,您还可以更改404的默认行为: class ApplicationController < ActionC
除了不使用模型之外,还有什么解决方案。通过“属性”查找?您可以在应用程序控制器中捕获RecordNotFound异常并返回本地化消息。通过这种方式,您还可以更改404的默认行为:
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
class ApplicationController:找不到
私有的
未找到def
render:json=>{:message=>I18n.t('exception.record_not_found')},
:status=>:未找到
结束
结束
我有足够的理由告诉用户更多信息:
exception.message.match/^找不到id为([\S]*)的(\w+)吗/
msg=t'activerecord.exceptions.not_found',klass:$1,id:$3
既然我想要捷克的transaltion:
cs:
activerecord:
例外情况:
未找到:“Nelze nalézt%{klass}s id=%{id}”
…当某个东西是硬编码时,唯一的方法是在YAML config中以另一种方式对其进行硬反编码:
en:
activerecord:
exceptions:
not_found: "%{model_name} not found"
还可以为模型名称设置复数形式,添加如下内容:
en:
activerecord:
models:
user:
one: Dude
other: Dudes
是的,但是我将失去显示klass和属性名称的原始消息的上下文!你需要这些信息做什么?对于用户来说,没有发现什么是无关紧要的,只是出了问题。如果要记录此类错误,可以指定not_found接受参数异常。因此,您可以访问它并记录它或其他任何东西……因为它是一个Web服务,客户端必须知道他们做错了什么,而无需联系我们的支持。您可以使用
controller\u name.classify.constantize.model\u name.human
恢复类名,甚至是本地化的,并从params
散列中获取ID等信息。将在修改默认消息后立即中断。注意:在rails4中,通过“属性\名称”查找\ u!已弃用,因此此错误的发生率大大降低。您还可以为模型名称设置复数形式,添加如下内容:en:activerecord:models:user:one:Dude其他:Dudes
en:
activerecord:
models:
user:
one: Dude
other: Dudes