每天一剂Rails良药之Adding Support for Localization

本文介绍如何使用Rails结合Globalize插件实现多语言支持,包括安装配置步骤、代码示例及国际化最佳实践。
今天来看看Rails对于不同locale的支持,我们使用Globalize插件
[code]
ruby script/plugin install \
http://svn.globalize-rails.org/svn/globalize/globalize/trunk
[/code]
然后我们生成migration文件
[code]
ruby script/generate globalize
[/code]
然后运行
[code]
rake db:migrate
[/code]
然后我们需要在config/environment.rb里设置语言和默认locale
[code]
include Globalize
Locale.set_base_language 'en-US'
Locale.set 'en-US'
[/code]
然后我们允许用户选择locale
[code]
class AccountsController < ApplicationController

def login
authentication....
session[:user] = user.id
session[:locale] = user.locale
redirect_to (go_url || home_url)
end

def logout
@session[:user] = nil
redirect_to home_url
end

def change_locale
session[:locale] = params[:locale] unless params[:locale].blank?
end

end
[/code]
然后我们给ApplicationController添加一个before_filter
[code]
before_filter :set_locale
def set_locale
Locale.set session[:locale] unless session[:locale].blank?
true
end
[/code]
我们来看看Globalize的一些helper方法,t()为translations,/()为printf-looking,如
[code]
<% unless params[:search].blank? %>
<p><%= "Found %d products." / @products.size %></p>
<% end %>

<%= link_to "Remove".t, :action => 'remove', :id => item.product_id %>
[/code]
对于时间和货币使用loc()方法
[code]
<%= Time.now.loc "%H:%M %Z" %>
[/code]
Globalize甚至可以翻译Model
[code]
class Product < ActiveRecord::Base
translates :name, :description
end
[/code]
需要注意的是我们的Rails程序需要一致使用utf8编码
1,config/environment.rb
[code]
$KCODE ='u'
require 'jcode'
[/code]
2,config/database.yml
对MySQL
[code]
encoding: utf8
[/code]
对PostgreSQL
[code]
encoding: unicode
[/code]
3,ApplicationController
[code]
after_filter :set_charset
def set_charset
unless @headers["Content-Type"] =~ /charset/i
@headers["Content-Type"] ||= ""
@headers["Content-Type"] += "; charset=utf-8"
end
end
[/code]
更多细节参考[url]http://www.globalize-rails.org[/url]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值