# class TkMsgCat

class TkMsgCatalog

### Constants

MSGCAT_EXT
PACKAGE_NAME
TkCommandNames

  extend TkMsgCatalog

UNKNOWN_CBTBL

### Attributes

msgcat_ext[RW]

### Public Class Methods

[](*args)
Alias for: translate
callback(namespace, locale, src_str, *args) click to toggle source

    # File lib/tk/msgcat.rb, line 59
    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

def_unknown_proc(cmd=Proc.new) click to toggle source

    # File lib/tk/msgcat.rb, line 292
    def self.def_unknown_proc(cmd=Proc.new)
      TkMsgCatalog::UNKNOWN_CBTBL[TkCore::INTERP.__getip]['::'] = cmd
    end

load(dir) click to toggle source

    # File lib/tk/msgcat.rb, line 235
    def self.load(dir)
      self.load_rb(dir)
    end

load_rb(dir) click to toggle source

    # File lib/tk/msgcat.rb, line 199
    def self.load_rb(dir)
      count = 0
      preferences().each{|loc|
        file = File.join(dir, loc + self::MSGCAT_EXT)
        if File.readable?(file)
          count += 1
          if TkCore::WITH_ENCODING
            eval(IO.read(file, :encoding=>"ASCII-8BIT"))
          else
            eval(IO.read(file))
          end
        end
      }
      count
    end

load_tk(dir) click to toggle source

    # File lib/tk/msgcat.rb, line 195
    def self.load_tk(dir)
      number(tk_call('::msgcat::mcload', dir))
    end

locale() click to toggle source

    # File lib/tk/msgcat.rb, line 174
    def self.locale
      tk_call('::msgcat::mclocale')
    end

locale=(locale) click to toggle source

    # File lib/tk/msgcat.rb, line 181
    def self.locale=(locale)
      tk_call('::msgcat::mclocale', locale)
    end

maxlen(*src_strings) click to toggle source

    # File lib/tk/msgcat.rb, line 167
    def self.maxlen(*src_strings)
      tk_call('::msgcat::mcmax', *src_strings).to_i
    end

mc(*args)
Alias for: translate
new(namespace = nil) click to toggle source

    # File lib/tk/msgcat.rb, line 93
    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

package_name() click to toggle source

    # File lib/tk/msgcat.rb, line 28
    def self.package_name
      PACKAGE_NAME
    end

preferences() click to toggle source

    # File lib/tk/msgcat.rb, line 188
    def self.preferences
      tk_split_simplelist(tk_call('::msgcat::mcpreferences'))
    end

set_translation(locale, src_str, trans_str=None, enc='utf-8') click to toggle source

    # File lib/tk/msgcat.rb, line 240
    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(ip_eval_without_enc("::msgcat::mcset {#{locale}} {#{_get_eval_string(src_str, true)}} {#{trans_str}}"))
      else
        Tk.UTF8_String(ip_eval_without_enc("::msgcat::mcset {#{locale}} {#{_get_eval_string(src_str, true)}}"))
      end
    end

set_translation_list(locale, trans_list, enc='utf-8') click to toggle source

    # File lib/tk/msgcat.rb, line 261
    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_String(_toUTF8(trans, enc))
        else
          list << _get_eval_string(src, true) << ''
        end
      }
      #number(tk_call_without_enc('::msgcat::mcmset', locale, list))
      number(ip_eval_without_enc("::msgcat::mcmset {#{locale}} {#{_get_eval_string(list)}}"))
    end

translate(*args) click to toggle source

*args ::= form, arg, arg, …

    # File lib/tk/msgcat.rb, line 147
    def self.translate(*args)
      dst = args.collect{|src|
        tk_call_without_enc('::msgcat::mc', _get_eval_string(src, true))
      }
      Tk.UTF8_String(sprintf(*dst))
    end

Also aliased as: mc, []

### Public Instance Methods

[](*args)
Alias for: translate
def_unknown_proc(cmd=Proc.new) click to toggle source

    # File lib/tk/msgcat.rb, line 295
    def def_unknown_proc(cmd=Proc.new)
      TkMsgCatalog::UNKNOWN_CBTBL[TkCore::INTERP.__getip][@namespace.path] = cmd
    end

load(dir)
Alias for: load_rb
load_rb(dir) click to toggle source

    # File lib/tk/msgcat.rb, line 219
    def load_rb(dir)
      count = 0
      preferences().each{|loc|
        file = File.join(dir, loc + @msgcat_ext)
        if File.readable?(file)
          count += 1
          if TkCore::WITH_ENCODING
            @namespace.eval(IO.read(file, :encoding=>"ASCII-8BIT"))
          else
            @namespace.eval(IO.read(file))
          end
        end
      }
      count
    end

Also aliased as: load
load_tk(dir) click to toggle source

    # File lib/tk/msgcat.rb, line 215
    def load_tk(dir)
      number(@namespace.eval{tk_call('::msgcat::mcload', dir)})
    end

locale() click to toggle source

    # File lib/tk/msgcat.rb, line 177
    def locale
      @namespace.eval{tk_call('::msgcat::mclocale')}
    end

locale=(locale) click to toggle source

    # File lib/tk/msgcat.rb, line 184
    def locale=(locale)
      @namespace.eval{tk_call('::msgcat::mclocale', locale)}
    end

maxlen(*src_strings) click to toggle source

    # File lib/tk/msgcat.rb, line 170
    def maxlen(*src_strings)
      @namespace.eval{tk_call('::msgcat::mcmax', *src_strings).to_i}
    end

mc(*args)
Alias for: translate
method_missing(id, *args) click to toggle source
Calls superclass method TkObject#method_missing

    # File lib/tk/msgcat.rb, line 107
      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)
            # trans_list
            self.set_translation_list(loc, *args)
          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

preferences() click to toggle source

    # File lib/tk/msgcat.rb, line 191
    def preferences
      tk_split_simplelist(@namespace.eval{tk_call('::msgcat::mcpreferences')})
    end

set_translation(locale, src_str, trans_str=None, enc='utf-8') click to toggle source

    # File lib/tk/msgcat.rb, line 248
    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{
                         ip_eval_without_enc("::msgcat::mcset {#{locale}} {#{_get_eval_string(src_str, true)}} {#{trans_str}}")
                       })
      else
        Tk.UTF8_String(@namespace.eval{
                         ip_eval_without_enc("::msgcat::mcset {#{locale}} {#{_get_eval_string(src_str, true)}}")
                       })
      end
    end

set_translation_list(locale, trans_list, enc='utf-8') click to toggle source

    # File lib/tk/msgcat.rb, line 275
    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)
               ip_eval_without_enc("::msgcat::mcmset {#{locale}} {#{_get_eval_string(list)}}")
             })
    end

translate(*args) click to toggle source

    # File lib/tk/msgcat.rb, line 157
    def translate(*args)
      dst = args.collect{|src|
        @namespace.eval{tk_call_without_enc('::msgcat::mc',
                                            _get_eval_string(src, true))}
      }
      Tk.UTF8_String(sprintf(*dst))
    end

Also aliased as: mc, []