+ # 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
+
+ Config.register Config::EnumValue.new('core.language',
+ :default => Irc::Bot::Language.from_locale, :wizard => true,
+ :values => Proc.new{|bot|
+ Dir.new(Config::datadir + "/languages").collect {|f|
+ f =~ /\.lang$/ ? f.gsub(/\.lang$/, "") : nil
+ }.compact
+ },
+ :on_change => Proc.new {|bot, v| bot.lang.set_language v},
+ :desc => "Which language file the bot should use")
+
+ def initialize(bot, language)
+ @bot = bot
+ set_language language
+ end
+ attr_reader :language
+
+ 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)
+ GetText.set_locale(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"