Parent

GetText::TextDomain

GetText::TextDomain class manages mo-files of a textdomain.

Usually, you don’t need to use this class directly.

Notice: This class is unstable. APIs will be changed.

Constants

DEFAULT_PLURAL_CALC
DEFAULT_SINGLE_CALC

Attributes

output_charset[R]
mofiles[R]
name[R]

Public Class Methods

add_default_locale_path(path) click to toggle source

Add default locale path. Usually you should use GetText.add_default_locale_path instead.

  • path: a new locale path. (e.g.) “/usr/share/locale/%{lang}/LC_MESSAGES/%{name}.mo” (‘locale’ => “ja_JP“, ‘name’ => “textdomain”)

  • Returns: the new DEFAULT_LOCALE_PATHS

    # File lib/gettext/runtime/textdomain.rb, line 47
47:     def self.add_default_locale_path(path)
48:       warn "Deprecated. Use GetText::LocalePath.add_default_rule instead."
49:       LocalePath.add_default_rule(path)
50:     end
cached=(val) click to toggle source

Set to cache the mo-file or not.

  • val: true if cached, otherwise false.

    # File lib/gettext/runtime/textdomain.rb, line 39
39:     def self.cached=(val)
40:       @@cached = val
41:     end
cached?() click to toggle source

Cache the mo-file or not. Default is true. If $DEBUG is set then false.

    # File lib/gettext/runtime/textdomain.rb, line 33
33:     def self.cached?
34:       @@cached
35:     end
new(name, topdir = nil, output_charset = nil) click to toggle source

Creates a new GetText::TextDomain.

  • name: the textdomain name.

  • topdir: the locale path (“%{topdir}/%{lang}/LC_MESSAGES/%{name}.mo”) or nil.

  • output_charset: output charset.

  • Returns: a newly created GetText::TextDomain object.

    # File lib/gettext/runtime/textdomain.rb, line 57
57:     def initialize(name, topdir = nil, output_charset = nil)
58:       @name, @output_charset = name, output_charset
59: 
60:       @locale_path = LocalePath.new(@name, topdir)
61:       @mofiles = {}
62:     end

Public Instance Methods

clear() click to toggle source

Clear cached mofiles.

     # File lib/gettext/runtime/textdomain.rb, line 139
139:     def clear
140:       @mofiles = {}
141:     end
output_charset=(charset) click to toggle source

Set output_charset.

  • charset: output charset.

     # File lib/gettext/runtime/textdomain.rb, line 145
145:     def output_charset=(charset)
146:       @output_charset = charset
147:       clear
148:     end
translate_singluar_message(lang, msgid) click to toggle source

Translates the translated string.

  • lang: Locale::Tag::Simple’s subclass.

  • msgid: the original message.

  • Returns: the translated string or nil.

     # File lib/gettext/runtime/textdomain.rb, line 68
 68:     def translate_singluar_message(lang, msgid)
 69:       return "" if msgid == "" or msgid.nil?
 70: 
 71:       lang_key = lang.to_s
 72: 
 73:       mofile = nil
 74:       if self.class.cached?
 75:         mofile = @mofiles[lang_key]
 76:       end
 77:       unless mofile
 78:         mofile = load_mo(lang)
 79:       end
 80:      
 81:       if (! mofile) or (mofile ==:empty)
 82:         return nil
 83:       end
 84: 
 85:       msgstr = mofile[msgid]
 86:       if msgstr and (msgstr.size > 0)
 87:         msgstr
 88:       elsif msgid.include?("\0000")
 89:         # Check "aaa\000bbb" and show warning but return the singluar part.
 90:         ret = nil
 91:         msgid_single = msgid.split("\0000")[0]
 92:         mofile.each{|key, val| 
 93:           if key =~ /^#{Regexp.quote(msgid_single)}\0000/
 94:             # Usually, this is not caused to make po-files from rgettext.
 95:             warn %[Warning: n_("#{msgid_single}", "#{msgid.split("\000")[1]}") and n_("#{key.gsub(/\000/, '", "')}") are duplicated.]
 96:             ret = val
 97:             break
 98:           end
 99:         }
100:         ret
101:       else
102:         ret = nil
103:         mofile.each{|key, val| 
104:           if key =~ /^#{Regexp.quote(msgid)}\0000/
105:             ret = val.split("\0000")[0]
106:             break
107:           end
108:         }
109:         ret
110:       end
111:     end

Private Instance Methods

load_mo(lang) click to toggle source

Load a mo-file from the file. lang is the subclass of Locale::Tag::Simple.

     # File lib/gettext/runtime/textdomain.rb, line 153
153:     def load_mo(lang)
154:       lang = lang.to_posix unless lang.kind_of? Locale::Tag::Posix
155:       lang_key = lang.to_s
156: 
157:       mofile = @mofiles[lang_key]
158:       if mofile
159:         if mofile == :empty
160:           return :empty
161:         elsif ! self.class.cached?
162:           mofile.update!
163:         end
164:         return mofile
165:       end
166: 
167:       path = @locale_path.current_path(lang)
168: 
169:       if path
170:         charset = @output_charset || lang.charset || Locale.charset || "UTF-8"
171:         @mofiles[lang_key] = MOFile.open(path, charset)
172:       else
173:         @mofiles[lang_key] = :empty
174:       end
175:     end

Disabled; run with --debug to generate this.

[Validate]

Generated with the Darkfish Rdoc Generator 1.1.6.