来源:railscn.com
直接复制了,懒得整理。
传统的做法是用gettext来按locale处理文本,详见Using Gettext To Translate Your Rails Application
一般为了简化编码从页面到代码到数据库统统用utf-8,否则就需要用iconv来转码了。。。
一些标准设置:environment.rb里加
$KCODE = 'u'
require 'jcode'
为了让字符串按utf-8处理。
ApplicationController里加
before_filter :set_charset
def set_charset
if request.xhr?
@headers["Content-Type"] = "text/javascript; charset=utf-8"
else
@headers["Content-Type"] = "text/html; charset=utf-8"
end
end
Robbin问我Time.now的格式怎么办,日期、货币、数字的格式不是简单文本替换了,这个gettext没法处理。看了一下Rails的三个本地化插件,其中
Globalize开发较活跃。安装如下
plugin/insall http://svn.globalize-rails.org/svn/globalize/globalize/trunk
或者用配合1.1的开发版本
plugin/install http://svn.globalize-rails.org/svn/globalize/globalize/branches/for-1.1
然后执行
ruby script/generate globalize
来产生migration文件,执行
rake migrate
更新数据库。然后在environment.rb里加上
include Globalize
Locale.set_base_language 'en-US'
Locale.set 'en-US'
也可以换别的编码标准如zh-CN,注意这里locale中间是-不是_。
然后可以用各种格式了:
>>Locale.language
=>English
>>Locale.set 'zh-CN'
=>...
>>Time.now.localize '%d %B %Y'
=>'05 六月 2005' (这个在console里还是乱码,不过在页面上正常)
>>Locale.set 'es-ES' (西班牙)
>>Time.now.loc '%d %B %Y' (localize的简写)
=>'05 Junio 2006'
还有和AR结合的用法,和gettext差不多。更多的内容参考
Globalize主页。
关于ror开发中文网站的相关信息,
railscn wiki上也有。