Ruby-GetText-Package 的使用

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�方法。

你可能感兴趣的:(敏捷开发,Ruby,Ruby,Rails,DSL,ror)