module GetText::TextDomainManager

Public Instance Methods

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

bind textdomain to the class.

# File lib/gettext/runtime/textdomain_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
  textdomain = create_or_find_textdomain(domainname,options[:path],charset)
  target_klass = ClassInfo.normalize_class(klass)
  create_or_find_textdomain_group(target_klass).add(textdomain)
  @@gettext_classes << target_klass unless @@gettext_classes.include? target_klass

  textdomain
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/runtime/textdomain_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/runtime/textdomain_manager.rb, line 48
def cached?
  TextDomain.cached?
end
clear_all_textdomains() click to toggle source

for testing.

# File lib/gettext/runtime/textdomain_manager.rb, line 186
def clear_all_textdomains
  @@textdomain_pool = {}
  @@textdomain_group_pool = {}
  @@gettext_classes = []
  clear_caches
end
clear_caches() click to toggle source

for testing.

# File lib/gettext/runtime/textdomain_manager.rb, line 194
def clear_caches
  @@singular_message_cache = {}
  @@plural_message_cache = {}
end
output_charset() click to toggle source

Gets the output charset.

# File lib/gettext/runtime/textdomain_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/runtime/textdomain_manager.rb, line 58
def output_charset=(charset)
  @@output_charset = charset
  @@textdomain_pool.each do |key, textdomain|
    textdomain.output_charset = charset
  end
end
textdomain_pool(domainname) click to toggle source

Find textdomain by name

# File lib/gettext/runtime/textdomain_manager.rb, line 33
def textdomain_pool(domainname)
  @@textdomain_pool[domainname]
end
translate_plural_message(klass, arg1, arg2, arg3 = "|", arg4 = "|") click to toggle source

This function is similar to the get_singluar_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/runtime/textdomain_manager.rb, line 140
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_textdomains(klass) do |textdomain, lang|
      msgs = textdomain.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_singluar_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/runtime/textdomain_manager.rb, line 97
def translate_singluar_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_textdomains(klass) do |textdomain, lang|
    msg = textdomain.translate_singluar_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