12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697 |
- # Copyright (c) 2005-2006 David Barri
-
- puts "GLoc v#{GLoc::VERSION} running in development mode. Strings can be modified at runtime."
-
- module GLoc
- class << self
-
- alias :actual_add_localized_strings :add_localized_strings
- def add_localized_strings(lang, symbol_hash, override=true, strings_charset=nil)
- _verbose_msg {"dev::add_localized_strings #{lang}, [#{symbol_hash.size}], #{override}, #{strings_charset ? strings_charset : 'nil'}"}
- STATE.push [:hash, lang, {}.merge(symbol_hash), override, strings_charset]
- _force_refresh
- end
-
- alias :actual_load_localized_strings :load_localized_strings
- def load_localized_strings(dir=nil, override=true)
- _verbose_msg {"dev::load_localized_strings #{dir ? dir : 'nil'}, #{override}"}
- STATE.push [:dir, dir, override]
- _get_lang_file_list(dir).each {|filename| FILES[filename]= nil}
- end
-
- alias :actual_clear_strings :clear_strings
- def clear_strings(*languages)
- _verbose_msg {"dev::clear_strings #{languages.map{|l|l.to_s}.join(', ')}"}
- STATE.push [:clear, languages.clone]
- _force_refresh
- end
-
- alias :actual_clear_strings_except :clear_strings_except
- def clear_strings_except(*languages)
- _verbose_msg {"dev::clear_strings_except #{languages.map{|l|l.to_s}.join(', ')}"}
- STATE.push [:clear_except, languages.clone]
- _force_refresh
- end
-
- # Replace methods
- [:_l, :_l_rule, :_l_has_string?, :similar_language, :valid_languages, :valid_language?].each do |m|
- class_eval <<-EOB
- alias :actual_#{m} :#{m}
- def #{m}(*args)
- _assert_gloc_strings_up_to_date
- actual_#{m}(*args)
- end
- EOB
- end
-
- #-------------------------------------------------------------------------
- private
-
- STATE= []
- FILES= {}
-
- def _assert_gloc_strings_up_to_date
- changed= @@force_refresh
-
- # Check if any lang files have changed
- unless changed
- FILES.each_pair {|f,mtime|
- changed ||= (File.stat(f).mtime != mtime)
- }
- end
-
- return unless changed
- puts "GLoc reloading strings..."
- @@force_refresh= false
-
- # Update file timestamps
- FILES.each_key {|f|
- FILES[f]= File.stat(f).mtime
- }
-
- # Reload strings
- actual_clear_strings
- STATE.each {|s|
- case s[0]
- when :dir then actual_load_localized_strings s[1], s[2]
- when :hash then actual_add_localized_strings s[1], s[2], s[3], s[4]
- when :clear then actual_clear_strings(*s[1])
- when :clear_except then actual_clear_strings_except(*s[1])
- else raise "Invalid state id: '#{s[0]}'"
- end
- }
- _verbose_msg :stats
- end
-
- @@force_refresh= false
- def _force_refresh
- @@force_refresh= true
- end
-
- alias :super_get_internal_state_vars :_get_internal_state_vars
- def _get_internal_state_vars
- super_get_internal_state_vars + [ STATE, FILES ]
- end
-
- end
- end
|