]> git.netwichtig.de Git - user/henk/code/ruby/rbot.git/blobdiff - lib/rbot/load-gettext.rb
fix: gettext updated each_textdomain > each_text_domains
[user/henk/code/ruby/rbot.git] / lib / rbot / load-gettext.rb
index 5e2ec1860450306b4e8311ec37038449f271b4d9..6377b88232fb2d7d5eea7d4d25c94615f8a0c736 100644 (file)
@@ -18,7 +18,9 @@ end
   require 'gettext/version'
 
   gettext_version = GetText::VERSION.split('.').map {|n| n.to_i}
-  include Comparable # for Array#>=
+  class ::Array
+    include Comparable # for Array#>=
+  end
   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
@@ -27,7 +29,11 @@ end
 
   include GetText
 
-  rbot_locale_path = File.join(Irc::Bot::Config.datadir, "../locale/%{locale}/LC_MESSAGES/%{name}.mo")
+  rbot_locale_path = File.join(Irc::Bot::Config.datadir,
+    gettext_version < [2, 2, 0] ?
+      "../locale/%{locale}/LC_MESSAGES/%{name}.mo" :
+      "../locale/%{lang}/LC_MESSAGES/%{name}.mo")
+
   if gettext_version < [2, 0, 0]
     add_default_locale_path(rbot_locale_path)
   else
@@ -41,7 +47,29 @@ end
   else
     warning 'This version of ruby-gettext does not support non-cached mode; mo files are not reloaded when setting language'
   end
-  bindtextdomain 'rbot'
+
+  begin
+    bindtextdomain 'rbot'
+  rescue NoMethodError => e
+    error e
+    warning 'Trying to work around RubyGems/GetText incompatibility'
+    module ::Gem
+      def self.all_load_paths
+        result = []
+
+        Gem.path.each do |gemdir|
+          each_load_path all_partials(gemdir) do |load_path|
+            result << load_path
+          end
+        end
+
+        result
+      end
+    end
+    retry
+  end
+
+
 
   module GetText
     # patch for ruby-gettext 1.x to cope with anonymous modules used by rbot.
@@ -73,7 +101,7 @@ end
         opts = {:with_messages => false, :with_paths => false, :out => STDOUT}.merge(options)
         ret = nil
         # this is for 2.1.0
-        TextDomainManager.each_textdomains(self) {|textdomain, lang|
+        TextDomainManager.each_text_domains(self) {|textdomain, lang|
           opts[:out].puts "TextDomain name: #{textdomain.name.inspect}"
           opts[:out].puts "TextDomain current locale: #{lang.to_s.inspect}"
           opts[:out].puts "TextDomain current mo path: #{textdomain.instance_variable_get(:@locale_path).current_path(lang).inspect}"