论坛首页 编程语言技术论坛

rails 3 的国际化不是真正的国际化而仅是本地化

浏览 6169 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (6) :: 隐藏帖 (0)
作者 正文
   发表时间:2011-12-24   最后修改:2011-12-26
我试了一下,我觉得rails应该说是支持本地化,但并不能算从真正意义上支持国际化。也就是说,虽然你定义了一堆资源文件比如:zh.yml,en.yml等,但在一个时间内你只能选择一种语言,也就是不能像J2EE一样,浏览器根据你的区域和语言设置自动显示不同的语言
   发表时间:2011-12-29   最后修改:2011-12-29
根据浏览器设置选择语言

gem:

https://github.com/iain/http_accept_language

示例

https://github.com/chloerei/code_campo/blob/859beb022edcfbe0270cfd4d9d4e13c84dfa7892/app/controllers/application_controller.rb#L9
1 请登录后投票
   发表时间:2011-12-29  
1楼,很高兴你在研究rails,麻烦不要随便下结论。多看多学
0 请登录后投票
   发表时间:2011-12-29  
不要闹笑话就好...
1 请登录后投票
   发表时间:2011-12-30  
感谢回复,试了一下,我用的是rails 3,发现你给的sample有些问题,可能这个plugin并不能很好地支持rails 3.由于只是个简单的例子,所以没有做登陆之类的。因此把application_controoler.rb改成如下:
class ApplicationController < ActionController::Base
 
  protect_from_forgery 
  before_filter :set_locale
 
  def set_locale
    I18n.locale = set_locale_from_accept_language_header || I18n.default_locale
  end
 
  def set_locale_from_accept_language_header
    available = %w{en en-US zh zh-CN}
    request.compatible_language_from(available)   
  end
end

结果报错:
undefined method `compatible_language_from' for #<ActionDispatch::Request:0x4e5c940>
0 请登录后投票
   发表时间:2011-12-30  
根据以下网址:http://guides.rubyonrails.org/i18n.html

把application_controller.rb改成如下内容后解决

class ApplicationController < ActionController::Base
 
  protect_from_forgery 
  before_filter :set_locale
 
  def set_locale
    I18n.locale = extract_locale_from_accept_language_header  || I18n.default_locale
  end
 
  def extract_locale_from_accept_language_header 
  request.env['HTTP_ACCEPT_LANGUAGE'].scan(/^[a-z]{2}/).first
  end
end
1 请登录后投票
   发表时间:2011-12-30  
要安装 http_accept_language 这个 gem

在 Gemfile 里面写

gem 'http_accept_language'


然后 bundle

guides 的方法也行,省一个 gem,不过降格能力没有那个 gem 好。
1 请登录后投票
论坛首页 编程语言技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics