gloc-dev.rb
97 lines
| 3.1 KiB
| text/x-ruby
|
RubyLexer
|
r10 | # 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 | ||||