Class | GetText::TextDomain |
In: |
lib/gettext/textdomain.rb
|
Parent: | Object |
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.
CONFIG_PREFIX | = | Config::CONFIG['prefix'].gsub(/\/local/, "") | The default locale paths. | |
DEFAULT_LOCALE_PATHS | = | [ "#{Config::CONFIG['datadir']}/locale/%{locale}/LC_MESSAGES/%{name}.mo", "#{Config::CONFIG['datadir'].gsub(/\/local/, "")}/locale/%{locale}/LC_MESSAGES/%{name}.mo", "#{CONFIG_PREFIX}/share/locale/%{locale}/LC_MESSAGES/%{name}.mo", "#{CONFIG_PREFIX}/local/share/locale/%{locale}/LC_MESSAGES/%{name}.mo" |
current_locale | [R] | |
current_mo | [R] | |
locale_paths | [R] | |
name | [R] |
Add default locale path. Usually you should use GetText.add_default_locale_path instead.
# File lib/gettext/textdomain.rb, line 63 63: def self.add_default_locale_path(path) 64: DEFAULT_LOCALE_PATHS.unshift(path) 65: end
Sets to check mo-file or not. See GetText::TextDoman.check_mo? for more details.
# File lib/gettext/textdomain.rb, line 47 47: def self.check_mo=(val) 48: @@check_mo = val 49: end
Check mo-file is modified or not, and if mo-file is modified, reload mo-file again. This is effective in debug mode. Default is false. If $DEBUG is true, mo-file is checked even if this value is false.
# File lib/gettext/textdomain.rb, line 40 40: def self.check_mo? 41: @@check_mo 42: end
Creates a new GetText::TextDomain.
# File lib/gettext/textdomain.rb, line 72 72: def initialize(name, topdir = nil, locale = nil) 73: @name, @topdir = name, topdir 74: @search_files = Array.new 75: 76: @locale_paths = [] 77: if ENV["GETTEXT_PATH"] 78: ENV["GETTEXT_PATH"].split(/,/).each {|i| 79: @locale_paths += ["#{i}/%{locale}/LC_MESSAGES/%{name}.mo", "#{i}/%{locale}/%{name}.mo"] 80: } 81: elsif @topdir 82: @locale_paths += ["#{@topdir}/%{locale}/LC_MESSAGES/%{name}.mo", "#{@topdir}/%{locale}/%{name}.mo"] 83: end 84: 85: unless @topdir 86: @locale_paths += DEFAULT_LOCALE_PATHS 87: 88: if defined? Gem 89: $:.each do |path| 90: if GEM_PATH_RE =~ path 91: @locale_paths += [ 92: "#{$1}/data/locale/%{locale}/LC_MESSAGES/%{name}.mo", 93: "#{$1}/data/locale/%{locale}/%{name}.mo", 94: "#{$1}/locale/%{locale}/%{name}.mo"] 95: end 96: end 97: end 98: end 99: 100: @mofiles = Hash.new 101: set_locale(locale) 102: end
Gets the translated string.
# File lib/gettext/textdomain.rb, line 117 117: def gettext(msgid) 118: return "" if msgid == "" or msgid.nil? 119: return nil unless @current_mo 120: if @current_mo[msgid] and (@current_mo[msgid].size > 0) 121: @current_mo[msgid] 122: elsif msgid.include?("\000") 123: ret = nil 124: msgid_single = msgid.split("\000")[0] 125: @current_mo.each{|key, val| 126: if key =~ /^#{Regexp.quote(msgid_single)}\000/ 127: # Usually, this is not caused to make po-files from rgettext. 128: warn %Q[Warning: n_("#{msgid_single}", "#{msgid.split("\000")[1]}") and n_("#{key.gsub(/\000/, '", "')}") are duplicated.] if $DEBUG 129: ret = val 130: break 131: end 132: } 133: ret 134: else 135: ret = nil 136: @current_mo.each{|key, val| 137: if key =~ /^#{Regexp.quote(msgid)}\000/ 138: ret = val.split("\000")[0] 139: break 140: end 141: } 142: ret 143: end 144: end
Gets the translated string. (Deprecated. Don‘t call this method directly)
# File lib/gettext/textdomain.rb, line 151 151: def ngettext(msgid, msgid_plural, n) 152: key = msgid + "\000" + msgid_plural 153: msg = gettext(key) 154: if ! msg 155: nil # do nothing. 156: elsif msg == key 157: msg = n == 1 ? msgid : msgid_plural 158: elsif msg.include?("\000") 159: ary = msg.split("\000") 160: if @current_mo 161: plural = eval(@current_mo.plural) 162: if plural.kind_of?(Numeric) 163: msg = ary[plural] 164: else 165: msg = plural ? ary[1] : ary[0] 166: end 167: else 168: msg = n == 1 ? ary[0] : ary[1] 169: end 170: end 171: msg 172: end
Compare this object has the same name, topdir and locale.
# File lib/gettext/textdomain.rb, line 198 198: def same_property?(name, topdir, locale) 199: @name == name and @topdir == topdir and @current_locale == locale 200: end
Sets a new Locale::Object.
# File lib/gettext/textdomain.rb, line 108 108: def set_locale(locale, reload = false) 109: @current_locale = locale 110: load_mo(reload) 111: self 112: end