首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

I18n兑现多语言包

2012-12-28 
I18n实现多语言包转自:http://yangzb.iteye.com/blog/598150localization 插件介绍在 Rails 2.2 版本之前,

I18n实现多语言包
转自:http://yangzb.iteye.com/blog/598150

localization 插件介绍

在 Rails 2.2 版本之前,Rails 应用程序都是采用localization插件实现应用程序的本地化,支持多语言。localization有点类似于gettext,使用很简单的方法就可以为你的应用实现多语言支持,进而实现应用的本地化。Rails 2.2 之后,Rails 引进了 I18n 模块,因此不需额外安装插件就支持多语言。
安装

这个插件的安装方式与其他的Rails插件安装没啥太大区别,只需要在Rails项目目录中按照如下命令安装即可:

RAILS_ROOT> ruby script\plugin install localization


使用

当localization插件安装完成之后,Rails项目启动之后将自动载入他,我们需要在Rails项目目录中建立一个lang目录用来存放语言包。

推荐的做法是在lang目录下建立的语言包的文件名应该与语言名能够对应起来,例如我们要建立一个中文语言包,我们就需要在RAILS_ROOT/lang/目录下建立一个名为zh_CN.rb的文件。内容如下:

Localization.define('zh_CN') do |l|l.store 'Hello world', '你好,世界'  end


然后在application.rb文件中加入如下内容,定义需要使用的语言名:
Localization.lang = 'zh_CN'


再打开一个模板文件,在其中输入如下内容:
<title><%= _("Hello world") %></title>


启动Rails项目,浏览这个页面,你就会在标题栏看到中文的标题


一、Rails I18n(国际化)
   Rails在 2.2 版本以后已经把 I18n 模块引入了 Rails 框架,以前的多语言支持大都采用 localization 插件完成的。在 Rails 2.2 版本后,我们只需要在配置文件中开启 I18n,并写相应语种的资源文件就可以了。

二、例子演示
    1、开启I18n
         创建一个配置文件,用于存放本地化的信息( RailsProject> config/initializers/i18n.rb),文件内容如下:

       
 I18n.default_locale = 'zh'         LOCALES_DIRECTORY = "#{RAILS_ROOT}/config/locales/"         LANGUAGES = {              'English' => 'en',              'Chinese' => 'zh'          }

 
         参数解释:
              I18n.default_locale 指定默认的本地语言
              LOCALES_DIRECTORY 指定存放多国语言文件的目录
              LANGUAGES 存储所支持语种

      2、在layout文件中加入一个下拉框,给用于提供语种选择(RailsProject> app/views/layouts/base.rhtml ),添加代码如下 :
        
 <% form_tag '', :method => 'GET', do %>            <%= select_tag 'locale', options_for_select(LANGUAGES, I18n.locale),:onchange => 'this.form.submit()' %>             <%= submit_tag 'submit' %>           <% end %>


    注解:LANGUAGES 就是刚在配置文件中声明的LANGUAGES

        3、创建一个前置过滤器,用于设定本地化语言(RailsProject> app/controllers/application.rb),代码如下 :
      
 class ApplicationController < ActionController::Base  layout "base"  before_filter :set_locale  ...........  protected  def set_locale    session[:locale] = params[:locale] if params[:locale]    I18n.locale = session[:locale] || I18n.default_locale    locale_path = "#{LOCALES_DIRECTORY}#{I18n.locale}.yml"    unless I18n.load_path.include? locale_path       I18n.load_path << locale_path       I18n.backend.send(:init_translations)    end  rescue Exception => err    logger.error err    flash.now[:notice] = "#{I18n.locale} translation not available"    I18n.load_path -= [locale_path]    I18n.locale = session[:locale] = I18n.default_locale  endend


4、用I18n.translate方法(简写I18n.t,甚至t),将页面中写死的字符串替换掉(RailsProject> app/views/layouts/base.rhtml),代码如下 :
        
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"                       "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" ><html><head>  <title><%= I18n.t 'base.title' %></title></head><body>   ............</body></html>


   5、在存放多国语言目录下加入各种语种文件
      
 RailsProject> config/locales/zh.yml  代码如下        zh:           base:              title: "演示Rails的国际化支持"          RailsProject> config/locales/en.yml 代码如下       en:          base:              title: "Show Rails internationalization support"

至此,重启服务器,你就可以看到双语网站了。

热点排行