beast rev 2066
[beast-modified.git] / vendor / plugins / gibberish / lib / gibberish / localize.rb
blob4af2fed9cc905f5eb84d5ca63869c2fffb331070
1 module Gibberish
2   module Localize
3     @@default_language = :en
4     mattr_reader :default_language
6     @@reserved_keys = [ :limit ]
7     mattr_reader :reserved_keys
9     def add_reserved_key(*key)
10       (@@reserved_keys += key.flatten).uniq!
11     end
12     alias :add_reserved_keys :add_reserved_key
14     @@languages = {}
15     def languages
16       @@languages.keys
17     end
19     @@current_language = nil
20     def current_language
21       @@current_language || default_language
22     end
24     def current_language=(language)
25       load_languages! if defined? RAILS_ENV && RAILS_ENV == 'development'
27       language = language.to_sym if language.respond_to? :to_sym
28       @@current_language = @@languages[language] ? language : nil
29     end
31     def use_language(language)
32       start_language = current_language
33       self.current_language = language
34       yield
35       self.current_language = start_language
36     end
38     def default_language?
39       current_language == default_language
40     end
42     def translations
43       @@languages[current_language] || {}
44     end
46     def translate(string, key, *args)
47       return if reserved_keys.include? key
48       target = translations[key] || string
49       interpolate_string(target.dup, *args.dup)
50     end
52     def load_languages!
53       language_files.each do |file| 
54         key = File.basename(file, '.*').to_sym
55         @@languages[key] = YAML.load_file(file).symbolize_keys
56       end
57       languages
58     end
60   private
61     def interpolate_string(string, *args)
62       string.gsub(/\{\w+\}/) { args.shift }
63     end
65     def language_files
66       Dir[File.join(RAILS_ROOT, 'lang', '*.{yml,yaml}')]
67     end
68   end
69 end