Ruby-GetText-Package HOWTO for Ruby on Rails
原文地址�我上篇blog里的�接
Ruby-GetText-Package
是对
ROR
有力的支持。
这个指南通过一个包含了
GetText
的小的
blog
应用来说明如何在
ROR
中来使用
Ruby-GetText-Package
。
让我们开始开发一个本地化的
blog
应用
这个指南中关于这个
blog
应用的信息如下:
Appliction name: blog
Textdomain name: blog
Version: 1.0.0
charset: UTF-8 - Almost of all cases, UTF-8 is recommanded.
它有一��名叫
articles
的表:
CREATE TABLE `articles` (
`id` int(11) NOT NULL auto_increment,
`title` varchar(255) NOT NULL default '',
`description` text NOT NULL,
`lastupdate` date default NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
然后�我����建�@��
database
并且
script/generate.
命令�砩�成
blog
��用。
一.��文件
(一)
.
在
config/environment.rb
中如下�O置
:
$KCODE=’u’
require ‘jcode’
.
.
require ‘gettext/rails’
�O置字符集的�Z句放到起始位,然后
require
那句放到文件尾部。
(二)
.
在
ApplicationController
中如下�O置:
整����用系�y都需要�{用
init_gettext
,于是:
class ApplicationController < ActionController::Base
init_gettext "blog"
end
到�F在�橹梗�你就能�l�F�@����C消息已�被本地化了。
(三)
.
init_gettext
�x�:
你也可以�O置
charset
和
content_type
在�@里。
�定
textdomain
到
M/V/C
ActionController::Base.init_gettext(
textdomain
,
options
= {})
options:
:charset �C
�出字符集
.
默�J是
"UTF-8"
:content_type �C
文本�型。默�J是
"text/html"
:locale_path - locale
目�地址
.
默�J是
RAILS_ROOT
或者是
plugin root
根目�。
如果你想�槊恳��
controller
�O置�iT的
textdomain
,你需要在每一��
controller
里�{用
init_gettext
如:
class BlogController < ApplicationController
init_gettext "blog"
:
:
end
注意
:
Ruby-GetText
�O置了正�_的字符集。所以你自己就�]必要再像下面的�O置那�佣啻艘慌e了。
#Needless!
(也不是不需要,我���理中文�y�a的�r候需要)
before_filter :set_charset
def set_charset
headers['Content-Type'] = "text/html;charset=utf-8"
end
��我���理中文�y�a的�r候,把�@���^�V器放到
A
pplicationController.rb
中就可以了。注意
Charset
�O置��
GB2312.
(
四
)
Controllers
�O置
�倪@��_始,你可以在需要的�r候用下面的�@些
function
:
��
controllers
或是
views
用
Gettext
方法。下面的例子演示了��一��
controller
blog_controller.rb
class BlogController < ApplicationController
:
:
def create
@article = Article.new(params[:article])
if @article.save
flash[:notice] = _('Article was successfully created.') #Here!
redirect_to :action => 'list'
else
render :action => 'new'
end
end
:
:
end
下面是改
view
的一��例子:
<h1><%= _('Editing article') %></h1>
<%= start_form_tag :action => 'update', :id => @article %>
<%= render_partial 'form' %>
<p><%= submit_tag _('Edit') %></p>
<%= end_form_tag %>
<p>
<%= link_to _('Show'), :action => 'show', :id => @article %> |
<%= link_to _('Destroy'), {:action => 'destroy', :id => @article}, :confirm => _('Are you sure?') %> |
<%= link_to _('Back'), :action => 'list' %>
</p>
error_messages_for, error_message_on
都被本地化了,你不需要做任何事情。
�呵姨��^
N
段:)
(五) .
Rakefile
��建
lib/tasks/gettext.rake
:
desc "Update pot/po files."
task :updatepo do
require 'gettext/utils'
GetText.update_pofiles("blog", Dir.glob("{app,lib,bin}/**/*.{rb,rhtml}"), "blog
1.0.0
")
end
desc "Create mo-files"
task :makemo do
require 'gettext/utils'
GetText.create_mofiles(true, "po", "locale")
end
注意:
po
文件�A放到系�y根目�下,在
po
目�下��建
zh
文件�A。然后�\行命令:
rake updatepo
��在
po
目�下��建一��
blog.pot
文件。
在blog.pot文件中,如下
#: app/views/blog/edit.rhtml:1
msgid "Editing article"
msgstr ""
在msgstr里�O置本地化�Z言信息。
然后
�\行:
rake makemo
然后在�\行一遍
rake updatepo
在
zh
文件�A下����建一��
blog.po
文件。
然后��臃��掌鳎��L�吧。。。。
只翻�g其中一�c�c�热荨!!7��g的�^程中,使自己的思�S更加集中。。。是��不�e的�W�方法。