# try to load gettext, or provide fake getttext functions
begin
+# workaround for gettext not checking empty LANGUAGE
+if ENV["LANGUAGE"] and ENV["LANGUAGE"].empty?
+ ENV.delete "LANGUAGE"
+end
+
require 'gettext/version'
gettext_version = GetText::VERSION.split('.').map {|n| n.to_i}
- include Comparable # required for Array#between?
- unless gettext_version.between? [1, 8, 0], [1, 10, 0]
- raise GetTextVersionError, "Unsupported ruby-gettext version installed: #{gettext_version.join '.'}; supported versions are 1.8.0-1.10.0"
+ include Comparable # for Array#>=
+ unless gettext_version >= [1, 8, 0]
+ raise GetTextVersionError, "Unsupported ruby-gettext version installed: #{gettext_version.join '.'}; supported versions are 1.8.0 and above"
end
require 'gettext'
include GetText
+ rbot_locale_path = File.join(Irc::Bot::Config.datadir, "../locale/%{locale}/LC_MESSAGES/%{name}.mo")
+ if gettext_version < [2, 0, 0]
+ add_default_locale_path(rbot_locale_path)
+ else
+ LocalePath.add_default_rule(rbot_locale_path)
+ end
+
+ if GetText.respond_to? :cached=
+ GetText.cached = false
+ elsif TextDomain.respond_to? :cached=
+ TextDomain.cached = false
+ else
+ warning 'This version of ruby-gettext does not support non-cached mode; mo files are not reloaded when setting language'
+ end
bindtextdomain 'rbot'
module GetText
- # patch for ruby-gettext 1.8.0 up to 1.10.0 (and more?) to cope with anonymous
- # modules used by rbot
- # FIXME remove the patch when ruby-gettext is fixed, or rbot switches to named modules
- if !instance_methods.include?('orig_bound_targets')
+ # patch for ruby-gettext 1.x to cope with anonymous modules used by rbot.
+ # bound_targets and related methods are not used nor present in 2.x, and
+ # this patch is not needed
+ if respond_to? :bound_targets, true
alias :orig_bound_targets :bound_targets
- end
- def bound_targets(*a) # :nodoc:
- orig_bound_targets(*a) rescue orig_bound_targets(Object)
+
+ def bound_targets(*a) # :nodoc:
+ bt = orig_bound_targets(*a) rescue []
+ bt.empty? ? orig_bound_targets(Object) : bt
+ end
end
require 'stringio'
log "gettext loaded"
rescue LoadError, GetTextVersionError
- warn "failed to load ruby-gettext package: #{$!}; translations are disabled"
+ warning "failed to load ruby-gettext package: #{$!}; translations are disabled"
+
+ # undefine GetText, in case it got defined because the error was caused by a
+ # wrong version
+ if defined?(GetText)
+ Object.module_eval { remove_const("GetText") }
+ end
# dummy functions that return msg_id without translation
def _(s)
args[0]
end
+ def bindtextdomain_to(*args)
+ end
+
# the following extension to String#% is from ruby-gettext's string.rb file.
# it needs to be included in the fallback since the source already use this form