class TkMsgCatalog
# File tk/lib/tk/msgcat.rb, line 58 def self.callback(namespace, locale, src_str, *args) src_str = sprintf(src_str, *args) unless args.empty? cmd_tbl = TkMsgCatalog::UNKNOWN_CBTBL[TkCore::INTERP.__getip] cmd = cmd_tbl[namespace] cmd = cmd_tbl['::'] unless cmd # use global scope as interp default return src_str unless cmd # no cmd -> return src-str (default action) begin cmd.call(locale, src_str) rescue SystemExit exit(0) rescue Interrupt exit!(1) rescue Exception => e begin msg = _toUTF8(e.class.inspect) + ': ' + _toUTF8(e.message) + "\n" + "\n---< backtrace of Ruby side >-----\n" + _toUTF8(e.backtrace.join("\n")) + "\n---< backtrace of Tk side >-------" if TkCore::WITH_ENCODING msg.force_encoding('utf-8') else msg.instance_variable_set(:@encoding, 'utf-8') end rescue Exception msg = e.class.inspect + ': ' + e.message + "\n" + "\n---< backtrace of Ruby side >-----\n" + e.backtrace.join("\n") + "\n---< backtrace of Tk side >-------" end fail(e, msg) end end
# File tk/lib/tk/msgcat.rb, line 288 def self.def_unknown_proc(cmd=Proc.new) TkMsgCatalog::UNKNOWN_CBTBL[TkCore::INTERP.__getip]['::'] = cmd end
# File tk/lib/tk/msgcat.rb, line 224 def self.load(dir) self.load_rb(dir) end
# File tk/lib/tk/msgcat.rb, line 196 def self.load_rb(dir) count = 0 preferences().each{|loc| file = File.join(dir, loc + self::MSGCAT_EXT) if File.readable?(file) count += 1 eval(open(file){|f| f.read}) end } count end
# File tk/lib/tk/msgcat.rb, line 192 def self.load_tk(dir) number(tk_call('::msgcat::mcload', dir)) end
# File tk/lib/tk/msgcat.rb, line 171 def self.locale tk_call('::msgcat::mclocale') end
# File tk/lib/tk/msgcat.rb, line 178 def self.locale=(locale) tk_call('::msgcat::mclocale', locale) end
# File tk/lib/tk/msgcat.rb, line 164 def self.maxlen(*src_strings) tk_call('::msgcat::mcmax', *src_strings).to_i end
# File tk/lib/tk/msgcat.rb, line 92 def initialize(namespace = nil) if namespace.kind_of?(TkNamespace) @namespace = namespace elsif namespace == nil @namespace = TkNamespace.new('::') # global namespace else @namespace = TkNamespace.new(namespace) end @path = @namespace.path @msgcat_ext = '.msg' end
# File tk/lib/tk/msgcat.rb, line 27 def self.package_name PACKAGE_NAME end
# File tk/lib/tk/msgcat.rb, line 185 def self.preferences tk_split_simplelist(tk_call('::msgcat::mcpreferences')) end
# File tk/lib/tk/msgcat.rb, line 229 def self.set_translation(locale, src_str, trans_str=None, enc='utf-8') if trans_str && trans_str != None trans_str = Tk.UTF8_String(_toUTF8(trans_str, enc)) Tk.UTF8_String(tk_call_without_enc('::msgcat::mcset', locale, _get_eval_string(src_str, true), trans_str)) else Tk.UTF8_String(tk_call_without_enc('::msgcat::mcset', locale, _get_eval_string(src_str, true))) end end
# File tk/lib/tk/msgcat.rb, line 259 def self.set_translation_list(locale, trans_list, enc='utf-8') # trans_list ::= [ [src, trans], [src, trans], ... ] list = [] trans_list.each{|src, trans| if trans && trans != None list << _get_eval_string(src, true) list << Tk.UTF8_Stirng(_toUTF8(trans, enc)) else list << _get_eval_string(src, true) << '' end } number(tk_call_without_enc('::msgcat::mcmset', locale, list)) end
# File tk/lib/tk/msgcat.rb, line 291 def def_unknown_proc(cmd=Proc.new) TkMsgCatalog::UNKNOWN_CBTBL[TkCore::INTERP.__getip][@namespace.path] = cmd end
# File tk/lib/tk/msgcat.rb, line 212 def load_rb(dir) count = 0 preferences().each{|loc| file = File.join(dir, loc + @msgcat_ext) if File.readable?(file) count += 1 @namespace.eval(open(file){|f| f.read}) end } count end
# File tk/lib/tk/msgcat.rb, line 208 def load_tk(dir) number(@namespace.eval{tk_call('::msgcat::mcload', dir)}) end
# File tk/lib/tk/msgcat.rb, line 174 def locale @namespace.eval{tk_call('::msgcat::mclocale')} end
# File tk/lib/tk/msgcat.rb, line 181 def locale=(locale) @namespace.eval{tk_call('::msgcat::mclocale', locale)} end
# File tk/lib/tk/msgcat.rb, line 167 def maxlen(*src_strings) @namespace.eval{tk_call('::msgcat::mcmax', *src_strings).to_i} end
# File tk/lib/tk/msgcat.rb, line 106 def method_missing(id, *args) # locale(src, trans) ==> set_translation(locale, src, trans) loc = id.id2name case args.length when 0 # set locale self.locale=(loc) when 1 # src only, or trans_list if args[0].kind_of?(Array) # trans_list #list = args[0].collect{|src, trans| # [ Tk::UTF8_String.new(src), Tk::UTF8_String.new(trans) ] #} self.set_translation_list(loc, args[0]) else # src #self.set_translation(loc, Tk::UTF8_String.new(args[0])) self.set_translation(loc, args[0]) end when 2 # src and trans, or, trans_list and enc if args[0].kind_of?(Array) else #self.set_translation(loc, args[0], Tk::UTF8_String.new(args[1])) self.set_translation(loc, *args) end when 3 # src and trans and enc self.set_translation(loc, *args) else super(id, *args) # fail NameError, "undefined method `#{name}' for #{self.to_s}", error_at end end
# File tk/lib/tk/msgcat.rb, line 188 def preferences tk_split_simplelist(@namespace.eval{tk_call('::msgcat::mcpreferences')}) end
# File tk/lib/tk/msgcat.rb, line 242 def set_translation(locale, src_str, trans_str=None, enc='utf-8') if trans_str && trans_str != None trans_str = Tk.UTF8_String(_toUTF8(trans_str, enc)) Tk.UTF8_String(@namespace.eval{ tk_call_without_enc('::msgcat::mcset', locale, _get_eval_string(src_str, true), trans_str) }) else Tk.UTF8_String(@namespace.eval{ tk_call_without_enc('::msgcat::mcset', locale, _get_eval_string(src_str, true))}) end end
# File tk/lib/tk/msgcat.rb, line 272 def set_translation_list(locale, trans_list, enc='utf-8') # trans_list ::= [ [src, trans], [src, trans], ... ] list = [] trans_list.each{|src, trans| if trans && trans != None list << _get_eval_string(src, true) list << Tk.UTF8_String(_toUTF8(trans, enc)) else list << _get_eval_string(src, true) << '' end } number(@namespace.eval{ tk_call_without_enc('::msgcat::mcmset', locale, list) }) end
Commenting is here to help enhance the documentation. For example, sample code, or clarification of the documentation.
If you have questions about Ruby or the documentation, please post to one of the Ruby mailing lists. You will get better, faster, help that way.
If you wish to post a correction of the docs, please do so, but also file bug report so that it can be corrected for the next release. Thank you.