我---7号斋主人

已婚
爱老婆
I wanna be a happy fish...

星期二, 十月 17, 2006

又一篇好文:关于ruby本地化

来源: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上也有。

没有评论: