Rails I18N: ActiveRecord对象本地化
一直以来使用 Changing human attribute labels in Rails validation messages 中介绍的方法来本地化 ActiveRecord 字段名称。该方法简单实用,比方说有这样一个 User model:
# == Schema Information
# Schema version: 20081028111521
#
# Table name: users
#
# id :integer not null, primary key
# login :string(255)
# email :string(255)
class User < ActiveRecord::Base
#...
end
只要在该类中加入以下代码,就可以在 validation 的错误信息中显示中文字段名:
humanize_attributes :login => "用户名",
:email => "电邮"
现在 Rails 2.2 为我们带来了强大的 I18N 功能,没有必要再用上述方法来实现本地化了。首先,在 environment.rb 中指定本地化语言:
config.i18n.default_locale = :cn
然后在 config/locales 目录下新建 cn.yml 文件,并进行以下设置:
cn:
activerecord:
models:
user: "用户"
attributes:
user:
login: "用户名"
email: "电邮"
非常优雅方便。
Error messages 也可以用同样的方法进行设置。比方说,以前会用:
validates_presence_of :login, :message => "不能为空"
现在只要在配置文件中加入相应信息即可:
activerecord:
errors:
messages:
blank: '不能为空'
旧版本的 rails 应用中还需要用到老方法。为方便起见,弄了个 plugin,github 地址:
PS: 可以在 script/console 下检查效果:
>> User.human_attribute_name('login')
=> "用户名"
>> I18n.translate :'activerecord.attributes.user.email'
=> "电邮"