Rails 消息资源的国际化(I18n)

本文介绍如何在Rails应用中实现多语言支持。通过配置I18n模块并创建语言资源文件,可以轻松实现应用的国际化。文章详细展示了从配置到前端显示的具体步骤。
一、 概述
Rails 已经完成了资源国际化的内部实现,我们只需要在配置文件中开启 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),
:on
change => '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
end
end

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"

至此,重启服务器,你就可以看到双语网站了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值