]> git.netwichtig.de Git - user/henk/code/ruby/rbot.git/blobdiff - lib/rbot/language.rb
Language.from_locale now checks if the corresponding .lang file exist before returnin...
[user/henk/code/ruby/rbot.git] / lib / rbot / language.rb
index 7c47230367aabe713197e746b870a01c03d5cb48..57e9a6d272fcb72fce018578dd4b0eb69e722259 100644 (file)
@@ -30,18 +30,25 @@ module Language
   # Return the shortest language for the current
   # GetText locale
   def Language.from_locale
+    return 'english' unless defined?(GetText)
     lang = locale.language
     if locale.country
       str = lang + "_#{locale.country}"
       if Lang2Locale.value?(str)
         # Get the shortest key in Lang2Locale which maps to the given lang_country
-        return Lang2Locale.select { |k, v| v == str }.transpose.first.map { |v| v.to_s }.sort { |a, b| a.length <=> b.length }.first
+        lang_str = Lang2Locale.select { |k, v| v == str }.transpose.first.map { |v| v.to_s }.sort { |a, b| a.length <=> b.length }.first
+       if File.exist?(File.join(Config::datadir, "languages/#{lang_str}.lang"))
+          return lang_str
+        end
       end
     end
     # lang_country didn't work, let's try lan
     if Lang2Locale.value?(lang)
       # Get the shortest key in Lang2Locale which maps to the given lang
-      return Lang2Locale.select { |k, v| v == lang }.transpose.first.map { |v| v.to_s }.sort { |a, b| a.length <=> b.length }.first
+      lang_str = Lang2Locale.select { |k, v| v == lang }.transpose.first.map { |v| v.to_s }.sort { |a, b| a.length <=> b.length }.first
+      if File.exist?(File.join(Config::datadir, "/languages/#{lang_str}.lang"))
+        return lang_str
+      end
     end
     # all else fail, return 'english'
     return 'english'
@@ -62,23 +69,24 @@ module Language
       @bot = bot
       set_language language
     end
-    attr_reader :language, :locale
+    attr_reader :language
 
     def set_language(language)
-      l = language.to_s.gsub(/\s+/,'_').intern
-      if Lang2Locale.key?(l)
-        @locale = Lang2Locale[l]
-        setlocale(@locale)
+      lang_str = language.to_s.downcase.gsub(/\s+/,'_')
+      lang_sym = lang_str.intern
+      if defined?(GetText) and Lang2Locale.key?(lang_sym)
+        setlocale(Lang2Locale[lang_sym])
         debug "locale set to #{locale}"
+        rbot_gettext_debug
       else
-        warn "Unable to set locale, unknown language #{l}"
+        warning "Unable to set locale, unknown language #{language} (#{lang_str})"
       end
 
-      file = Config::datadir + "/languages/#{language}.lang"
+      file = Config::datadir + "/languages/#{lang_str}.lang"
       unless(FileTest.exist?(file))
-        raise "no such language: #{language} (no such file #{file})"
+        raise "no such language: #{lang_str} (no such file #{file})"
       end
-      @language = language
+      @language = lang_str
       @file = file
       scan
       return if @bot.plugins.nil?