##// END OF EJS Templates
Fixed that the project jump box does not preserve current tab after r2304....
Fixed that the project jump box does not preserve current tab after r2304. git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@2312 e93f8b46-1217-0410-a6f0-8f06a7374b81

File last commit:

r741:e4f0864e3a7f
r2310:41f3bae9170c
Show More
gloc-internal.rb
134 lines | 4.0 KiB | text/x-ruby | RubyLexer
# Copyright (c) 2005-2006 David Barri
require 'iconv'
require 'gloc-version'
module GLoc
class GLocError < StandardError #:nodoc:
end
class InvalidArgumentsError < GLocError #:nodoc:
end
class InvalidKeyError < GLocError #:nodoc:
end
class RuleNotFoundError < GLocError #:nodoc:
end
class StringNotFoundError < GLocError #:nodoc:
end
class << self
private
def _add_localized_data(lang, symbol_hash, override, target) #:nodoc:
lang= lang.to_sym
if override
target[lang] ||= {}
target[lang].merge!(symbol_hash)
else
symbol_hash.merge!(target[lang]) if target[lang]
target[lang]= symbol_hash
end
end
def _add_localized_strings(lang, symbol_hash, override=true, strings_charset=nil) #:nodoc:
_charset_required
# Convert all incoming strings to the gloc charset
if strings_charset
Iconv.open(get_charset(lang), strings_charset) do |i|
symbol_hash.each_pair {|k,v| symbol_hash[k]= i.iconv(v)}
end
end
# Convert rules
rules= {}
old_kcode= $KCODE
begin
$KCODE= 'u'
Iconv.open(UTF_8, get_charset(lang)) do |i|
symbol_hash.each {|k,v|
if /^_gloc_rule_(.+)$/ =~ k.to_s
v= i.iconv(v) if v
v= '""' if v.nil?
rules[$1.to_sym]= eval "Proc.new do #{v} end"
end
}
end
ensure
$KCODE= old_kcode
end
rules.keys.each {|k| symbol_hash.delete "_gloc_rule_#{k}".to_sym}
# Add new localized data
LOWERCASE_LANGUAGES[lang.to_s.downcase]= lang
_add_localized_data(lang, symbol_hash, override, LOCALIZED_STRINGS)
_add_localized_data(lang, rules, override, RULES)
end
def _charset_required #:nodoc:
set_charset UTF_8 unless CONFIG[:internal_charset]
end
def _get_internal_state_vars
[ CONFIG, LOCALIZED_STRINGS, RULES, LOWERCASE_LANGUAGES ]
end
def _get_lang_file_list(dir) #:nodoc:
dir= File.join(RAILS_ROOT,'{.,vendor/plugins/*}','lang') if dir.nil?
Dir[File.join(dir,'*.{yaml,yml}')]
end
def _l(symbol, language, *arguments) #:nodoc:
symbol= symbol.to_sym if symbol.is_a?(String)
raise InvalidKeyError.new("Symbol or String expected as key.") unless symbol.kind_of?(Symbol)
translation= LOCALIZED_STRINGS[language][symbol] rescue nil
if translation.nil?
raise StringNotFoundError.new("There is no key called '#{symbol}' in the #{language} strings.") if CONFIG[:raise_string_not_found_errors]
translation= symbol.to_s
end
begin
return translation % arguments
rescue => e
raise InvalidArgumentsError.new("Translation value #{translation.inspect} with arguments #{arguments.inspect} caused error '#{e.message}'")
end
end
def _l_has_string?(symbol,lang) #:nodoc:
symbol= symbol.to_sym if symbol.is_a?(String)
LOCALIZED_STRINGS[lang].has_key?(symbol.to_sym) rescue false
end
def _l_rule(symbol,lang) #:nodoc:
symbol= symbol.to_sym if symbol.is_a?(String)
raise InvalidKeyError.new("Symbol or String expected as key.") unless symbol.kind_of?(Symbol)
r= RULES[lang][symbol] rescue nil
raise RuleNotFoundError.new("There is no rule called '#{symbol}' in the #{lang} rules.") if r.nil?
r
end
def _verbose_msg(type=nil)
return unless CONFIG[:verbose]
x= case type
when :stats
x= valid_languages.map{|l| ":#{l}(#{LOCALIZED_STRINGS[l].size}/#{RULES[l].size})"}.sort.join(', ')
"Current stats -- #{x}"
else
yield
end
puts "[GLoc] #{x}"
end
public :_l, :_l_has_string?, :_l_rule
end
private
unless const_defined?(:LOCALIZED_STRINGS)
LOCALIZED_STRINGS= {}
RULES= {}
LOWERCASE_LANGUAGES= {}
end
end