Adds a branch for unlimited project hierarchy.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/branches/work@2148 e93f8b46-1217-0410-a6f0-8f06a7374b81
This commit is contained in:
@@ -0,0 +1,97 @@
|
||||
# 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
|
||||
Reference in New Issue
Block a user