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 65
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 41
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 47
def cached?
  TextDomain.cached?
end
clear_all_textdomains() click to toggle source

for testing.

# File lib/gettext/runtime/textdomain_manager.rb, line 184
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 192
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 52
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 57
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 32
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 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, _("3rd parmeter is wrong: value = %{number}") % {:number => arg3}
    end
    div = arg3
  else
    msgid = arg1
    msgid_plural = arg2
    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 96
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

[Validate]

Generated with the Darkfish Rdoc Generator 2.