Module: GetText::TextDomainManager

### Home Classes Methods

### In Files

- lib/gettext/text_domain_manager.rb

### Methods

- #bind_to
- #cached=
- #cached?
- #clear_all_text_domains
- #clear_caches
- #dump_all_text_domains
- #output_charset
- #output_charset=
- #restore_all_text_domains
- #text_domain_pool
- #translate_plural_message
- #translate_singular_message

### Class/Module Index

Quicksearch

- GetText
- GetText::ClassInfo
- GetText::ErbParser
- GetText::GladeParser
- GetText::LocalePath
- GetText::MO
- GetText::MO::HeaderRev1
- GetText::MO::InvalidFormat
- GetText::NoboundTextDomainError
- GetText::PO
- GetText::PO::NonExistentEntryError
- GetText::POEntry
- GetText::POEntry::InvalidTypeError
- GetText::POEntry::NoMsgctxtError
- GetText::POEntry::NoMsgidError
- GetText::POEntry::NoMsgidPluralError
- GetText::POEntryForRubyParser
- GetText::POParser
- GetText::ParseError
- GetText::RubyParser
- GetText::TextDomain
- GetText::TextDomainGroup
- GetText::TextDomainManager
- GetText::Tools
- GetText::Tools::MsgInit
- GetText::Tools::MsgInit::ArgumentError
- GetText::Tools::MsgInit::Error
- GetText::Tools::MsgInit::ValidationError
- GetText::Tools::MsgMerge
- GetText::Tools::Task
- GetText::Tools::XGetText

No matching classes.

# GetText::TextDomainManager

### Public Instance Methods

bind_to(klass, domainname, options = {}) click to toggle source

bind text domain to the class.

    # File lib/gettext/text_domain_manager.rb, line 66
    def bind_to(klass, domainname, options = {})
      warn "Bind the domain '#{domainname}' to '#{klass}'. " if $DEBUG

      charset = options[:output_charset] || self.output_charset
      text_domain = create_or_find_text_domain(domainname,options[:path],charset)
      target_klass = ClassInfo.normalize_class(klass)
      create_or_find_text_domain_group(target_klass).add(text_domain)
      @@gettext_classes << target_klass unless @@gettext_classes.include? target_klass

      text_domain
    end

cached=(val) click to toggle source

Set the value whether cache messages or not. true to cache messages, otherwise false.

Default is true. If $DEBUG is false, messages are not checked even if this value is true.

    # File lib/gettext/text_domain_manager.rb, line 42
    def cached=(val)
      @@cached = val
      TextDomain.cached = val
    end

cached?() click to toggle source

Return the cached value.

    # File lib/gettext/text_domain_manager.rb, line 48
    def cached?
      TextDomain.cached?
    end

clear_all_text_domains() click to toggle source

for testing.

    # File lib/gettext/text_domain_manager.rb, line 201
    def clear_all_text_domains
      @@text_domain_pool = {}
      @@text_domain_group_pool = {}
      @@gettext_classes = []
      clear_caches
    end

clear_caches() click to toggle source

for testing.

    # File lib/gettext/text_domain_manager.rb, line 209
    def clear_caches
      @@singular_message_cache = {}
      @@plural_message_cache = {}
    end

dump_all_text_domains() click to toggle source

for testing.

    # File lib/gettext/text_domain_manager.rb, line 185
    def dump_all_text_domains
      [
        @@text_domain_pool.dup,
        @@text_domain_group_pool.dup,
        @@gettext_classes.dup,
      ]
    end

output_charset() click to toggle source

Gets the output charset.

    # File lib/gettext/text_domain_manager.rb, line 53
    def output_charset
      @@output_charset
    end

output_charset=(charset) click to toggle source

Sets the output charset.The program can have a output charset.

    # File lib/gettext/text_domain_manager.rb, line 58
    def output_charset=(charset)
      @@output_charset = charset
      @@text_domain_pool.each do |key, text_domain|
        text_domain.output_charset = charset
      end
    end

restore_all_text_domains(dumped_all_text_domains) click to toggle source

for testing.

    # File lib/gettext/text_domain_manager.rb, line 194
    def restore_all_text_domains(dumped_all_text_domains)
      @@text_domain_pool, @@text_domain_group_pool, @@gettext_classes =
        dumped_all_text_domains
      clear_caches
    end

text_domain_pool(domainname) click to toggle source

Find text domain by name

    # File lib/gettext/text_domain_manager.rb, line 33
    def text_domain_pool(domainname)
      @@text_domain_pool[domainname]
    end

translate_plural_message(klass, arg1, arg2, arg3 = "|", arg4 = "|") click to toggle source

This function is similar to the get_singular_message function as it finds the message catalogs in the same way. But it takes two extra arguments for plural form. The msgid parameter must contain the singular form of the string to be converted. It is also used as the key for the search in the catalog. The msgid_plural parameter is the plural form. The parameter n is used to determine the plural form. If no message catalog is found msgid1 is returned if n == 1, otherwise msgid2. And if msgid includes "div", it returns a last part of msgid separeted "div".

- msgid: the singular form with "div". (e.g. "Special|An apple", "An apple")

- msgid_plural: the plural form. (e.g. "%{num} Apples")

- n: a number used to determine the plural form.

- div: the separator. Default is "|".

- Returns: the localized text which key is msgid_plural if n is plural(follow plural-rule) or msgid. "plural-rule" is defined in po-file.

or

- msgid, msgid_plural

    : msgid and msgid_plural an Array

- n: a number used to determine the plural form.

- div: the separator. Default is "|".

    # File lib/gettext/text_domain_manager.rb, line 139
    def translate_plural_message(klass, arg1, arg2, arg3 = "|", arg4 = "|")
      klass = ClassInfo.normalize_class(klass)
      # parse arguments
      if arg1.kind_of?(Array)
        msgid = arg1[0]
        msgid_plural = arg1[1]
        n = arg2
        if arg3 and arg3.kind_of? Numeric
          raise ArgumentError, _("ngettext: 3rd parmeter is wrong: value = %{number}") % {:number => arg3}
        end
        div = arg3
      else
        msgid = arg1
        msgid_plural = arg2
        raise ArgumentError, _("ngettext: 3rd parameter should be a number, not nil.")  unless arg3
        n = arg3
        div = arg4
      end

      key = [Locale.current, klass, msgid, msgid_plural, div].hash
      msgs = @@plural_message_cache[key]
      unless (msgs and @@cached)
        # Find messages from related classes.
        msgs = nil
        each_text_domains(klass) do |text_domain, lang|
          msgs = text_domain.translate_plural_message(lang, msgid, msgid_plural)
          break if msgs
        end

        msgs = [[msgid, msgid_plural], TextDomain::DEFAULT_PLURAL_CALC] unless msgs

        msgstrs = msgs[0]
        if div and msgstrs[0] == msgid and index = msgstrs[0].rindex(div)
          msgstrs[0] = msgstrs[0][(index + 1)..-1]
        end
        @@plural_message_cache[key] = msgs
      end

      # Return the singular or plural message.
      msgstrs = msgs[0]
      plural = msgs[1].call(n)
      return msgstrs[plural] if plural.kind_of?(Numeric)
      return plural ? msgstrs[1] : msgstrs[0]
    end

translate_singular_message(klass, msgid, div = nil) click to toggle source

Translates msgid, but if there are no localized text, it returns a last part of msgid separeted "div" or whole of the msgid with no "div".

- msgid: the message id.

- div: separator or nil.

- Returns: the localized text by msgid. If there are no localized text, it returns a last part of msgid separeted "div".

    # File lib/gettext/text_domain_manager.rb, line 96
    def translate_singular_message(klass, msgid, div = nil)
      klass = ClassInfo.normalize_class(klass)
      key = [Locale.current, klass, msgid, div].hash
      msg = @@singular_message_cache[key]
      return msg if msg and @@cached
      # Find messages from related classes.
      each_text_domains(klass) do |text_domain, lang|
        msg = text_domain.translate_singular_message(lang, msgid)
        break if msg
      end

      # If not found, return msgid.
      msg ||= msgid
      if div and msg == msgid
        if index = msg.rindex(div)
          msg = msg[(index + 1)..-1]
        end
      end
      @@singular_message_cache[key] = msg
    end

[Validate]

Generated with the Darkfish Rdoc Generator 2.