localization.rb
上传用户:netsea168
上传日期:2022-07-22
资源大小:4652k
文件大小:2k
源码类别:

Ajax

开发平台:

Others

  1. module Localization
  2.   mattr_accessor :lang
  3.   
  4.   @@l10s = { :default => {} }
  5.   @@lang = :default
  6.   
  7.   def self._(string_to_localize, *args)
  8.     translated = @@l10s[@@lang][string_to_localize].nil? ? string_to_localize : @@l10s[@@lang][string_to_localize]
  9.     return translated.call(*args).to_s  if translated.is_a? Proc
  10.     if translated.is_a? Array
  11.       translated = if translated.size == 3 
  12.         translated[args[0]==0 ? 0 : (args[0]>1 ? 2 : 1)]
  13.       else
  14.         translated[args[0]>1 ? 1 : 0]
  15.       end
  16.     end
  17.     sprintf translated, *args
  18.   end
  19.   
  20.   def self.__(string_to_localize, *args)
  21.     translated = @@l10s[@@lang][string_to_localize].nil? ? string_to_localize : @@l10s[@@lang][string_to_localize]
  22.     return translated.call(*args).to_s  if translated.is_a? Proc
  23.     if translated.is_a? Array
  24.       translated = if translated.size == 3 
  25.         translated[args[0]==0 ? 0 : (args[0]>1 ? 2 : 1)]
  26.       else
  27.         translated[args[0]>1 ? 1 : 0]
  28.       end
  29.     end
  30.     translated
  31.   end
  32.   
  33.   def self.define(lang = :default)
  34.     @@l10s[lang] ||= {}
  35.     yield @@l10s[lang]
  36.   end
  37.   
  38.   def self.load
  39.     Dir.glob("#{RAILS_ROOT}/lang/*.rb"){ |t| require t }
  40.     Dir.glob("#{RAILS_ROOT}/lang/custom/*.rb"){ |t| require t }
  41.   end
  42.   
  43.   # Generates a best-estimate l10n file from all views by
  44.   # collecting calls to _() -- note: use the generated file only
  45.   # as a start (this method is only guesstimating)
  46.   def self.generate_l10n_file
  47.     "Localization.define('en_US') do |l|n" <<
  48.     Dir.glob("#{RAILS_ROOT}/app/views/**/*.rhtml").collect do |f| 
  49.       ["# #{f}"] << File.read(f).scan(/<%.*[^w]_s*["'](.*?)["']/)
  50.     end.uniq.flatten.collect do |g|
  51.       g.starts_with?('#') ? "n  #{g}" : "  l.store '#{g}', '#{g}'"
  52.     end.uniq.join("n") << "nend"
  53.   end
  54.   
  55. end
  56. class Object
  57.   def _(*args); Localization._(*args); end
  58.   def __(*args); Localization.__(*args); end
  59. end