This constant hash holds the mapping from long language names to the usual POSIX locale specifications
Return the shortest language for the current GetText locale
# File lib/rbot/language.rb, line 36 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 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 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' end
# File lib/rbot/language.rb, line 71 def initialize(bot, language) @bot = bot set_language language end
# File lib/rbot/language.rb, line 127 def get(key) if(@strings.has_key?(key)) return @strings[key][rand(@strings[key].length)] else raise "undefined language key" end end
# File lib/rbot/language.rb, line 123 def rescan scan end
# File lib/rbot/language.rb, line 135 def save File.open(@file, "w") {|file| @strings.each {|key,val| file.puts "#{key}:" val.each_value {|v| file.puts " #{v}" } } } end
# File lib/rbot/language.rb, line 108 def scan @strings = Hash.new current_key = nil IO.foreach(@file) {|l| next if l =~ /^$/ next if l =~ /^\s*#/ if(l =~ /^(\S+):$/) @strings[$1] = Array.new current_key = $1 elsif(l =~ /^\s*(.*)$/) @strings[current_key] << $1 end } end
# File lib/rbot/language.rb, line 77 def set_language(language) 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 warning "Unable to set locale, unknown language #{language} (#{lang_str})" end file = Config::datadir + "/languages/#{lang_str}.lang" unless(FileTest.exist?(file)) raise "no such language: #{lang_str} (no such file #{file})" end @language = lang_str @file = file scan return if @bot.plugins.nil? @bot.plugins.core_modules.each { |p| if p.respond_to?('set_language') p.set_language(@language) end } @bot.plugins.plugins.each { |p| if p.respond_to?('set_language') p.set_language(@language) end } end