原创作者: hideto
阅读:701次
评论: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:
在application.rb里定义:
在视图里使用_()方法来翻译:
因为_()方法是对Object类的扩展,所以我们可以在任何地方使用它(models/controllers/views/libs)
我们看看localization.rb里的一段代码:
今天来看另一个提供本地化功能的插件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 条 请登录后发表评论