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.define('zh_CN') do |l|l.store 'Hello world', '你好,世界' endLocalization.lang = 'zh_CN'
<title><%= _("Hello world") %></title> I18n.default_locale = 'zh' LOCALES_DIRECTORY = "#{RAILS_ROOT}/config/locales/" LANGUAGES = { 'English' => 'en', 'Chinese' => 'zh' }<% form_tag '', :method => 'GET', do %> <%= select_tag 'locale', options_for_select(LANGUAGES, I18n.locale),:onchange => 'this.form.submit()' %> <%= submit_tag 'submit' %> <% end %>
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<!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>
RailsProject> config/locales/zh.yml 代码如下 zh: base: title: "演示Rails的国际化支持" RailsProject> config/locales/en.yml 代码如下 en: base: title: "Show Rails internationalization support"