原创作者: hideto   阅读:695次   评论:0条   更新时间:2011-05-26    
每天一剂Rails良药之Adding Support for Localization里我们讲到了globalize插件
今天来看另一个提供本地化功能的插件localization,localization的特性:
1,支持任何数量的languages和locales
2,定义singluar/plural翻译的简单方法
3,使用lambdas来提供基于Ruby代码的动态翻译
4,定制应用程序的不同实例

安装好该插件后,自动就可以使用它了
我们在RAILS_ROOT/lang/目录下定义翻译文件,如lang/de_DE.rb:
Localization.define('de_DE') do |l|
  l.store '%d entries', ['Ein Eintrag', '%d Eintr@#$ge']
  l.store '(time)', lambda { |t| t.strftime('%H:%M') }
end

在application.rb里定义:
Localization.lang = 'de_DE'

在视图里使用_()方法来翻译:
<%=_ '%d entries', 1 %>     # singular variant is chosen
<%=_ '%d entries', 4 %>     # plural variant is chosen
<%=_ '(time)', Time.now %>  # call the block with a parameter

因为_()方法是对Object类的扩展,所以我们可以在任何地方使用它(models/controllers/views/libs)
我们看看localization.rb里的一段代码:
module Localization
# ...
  def self._(string_to_localize, *args)
    translated = @@l10s[@@lang][string_to_localize] || string_to_localize
    return translated.call(*args).to_s  if translated.is_a? Proc
    if translated.is_a? Array
      translated = if translated.size == 3 
        translated[args[0]==0 ? 0 : (args[0]>1 ? 2 : 1)]
      else
        translated[args[0]>1 ? 1 : 0]
      end
    end
    sprintf translated, *args
  end
# ...
end

class Object
  def _(*args); Localization._(*args); end
end
评论 共 0 条 请登录后发表评论

发表评论

您还没有登录,请您登录后再发表评论

文章信息

Global site tag (gtag.js) - Google Analytics