Class | Irc::Bot::Language |
In: |
lib/rbot/language.rb
|
Parent: | Object |
Lang2Locale | = | { :english => 'en', :british_english => 'en_GB', :american_english => 'en_US', :italian => 'it', :french => 'fr', :german => 'de', :dutch => 'nl', :japanese => 'ja', :russian => 'ru', :finnish => 'fi', :traditional_chinese => 'zh_TW', :simplified_chinese => 'zh_CN' | This constant hash holds the mapping from long language names to the usual POSIX locale specifications |
language | [R] |
Return the shortest language for the current GetText locale
# File lib/rbot/language.rb, line 36 36: def Language.from_locale 37: return 'english' unless defined?(GetText) 38: lang = locale.language 39: if locale.country 40: str = lang + "_#{locale.country}" 41: if Lang2Locale.value?(str) 42: # Get the shortest key in Lang2Locale which maps to the given lang_country 43: lang_str = Lang2Locale.select { |k, v| v == str }.transpose.first.map { |v| v.to_s }.sort { |a, b| a.length <=> b.length }.first 44: if File.exist?(File.join(Config::datadir, "languages/#{lang_str}.lang")) 45: return lang_str 46: end 47: end 48: end 49: # lang_country didn't work, let's try lan 50: if Lang2Locale.value?(lang) 51: # Get the shortest key in Lang2Locale which maps to the given lang 52: lang_str = Lang2Locale.select { |k, v| v == lang }.transpose.first.map { |v| v.to_s }.sort { |a, b| a.length <=> b.length }.first 53: if File.exist?(File.join(Config::datadir, "/languages/#{lang_str}.lang")) 54: return lang_str 55: end 56: end 57: # all else fail, return 'english' 58: return 'english' 59: end
# File lib/rbot/language.rb, line 71 71: def initialize(bot, language) 72: @bot = bot 73: set_language language 74: end
# File lib/rbot/language.rb, line 127 127: def get(key) 128: if(@strings.has_key?(key)) 129: return @strings[key][rand(@strings[key].length)] 130: else 131: raise "undefined language key" 132: end 133: end
# File lib/rbot/language.rb, line 135 135: def save 136: File.open(@file, "w") {|file| 137: @strings.each {|key,val| 138: file.puts "#{key}:" 139: val.each_value {|v| 140: file.puts " #{v}" 141: } 142: } 143: } 144: end
# File lib/rbot/language.rb, line 108 108: def scan 109: @strings = Hash.new 110: current_key = nil 111: IO.foreach(@file) {|l| 112: next if l =~ /^$/ 113: next if l =~ /^\s*#/ 114: if(l =~ /^(\S+):$/) 115: @strings[$1] = Array.new 116: current_key = $1 117: elsif(l =~ /^\s*(.*)$/) 118: @strings[current_key] << $1 119: end 120: } 121: end
# File lib/rbot/language.rb, line 77 77: def set_language(language) 78: lang_str = language.to_s.downcase.gsub(/\s+/,'_') 79: lang_sym = lang_str.intern 80: if defined?(GetText) and Lang2Locale.key?(lang_sym) 81: setlocale(Lang2Locale[lang_sym]) 82: debug "locale set to #{locale}" 83: rbot_gettext_debug 84: else 85: warning "Unable to set locale, unknown language #{language} (#{lang_str})" 86: end 87: 88: file = Config::datadir + "/languages/#{lang_str}.lang" 89: unless(FileTest.exist?(file)) 90: raise "no such language: #{lang_str} (no such file #{file})" 91: end 92: @language = lang_str 93: @file = file 94: scan 95: return if @bot.plugins.nil? 96: @bot.plugins.core_modules.each { |p| 97: if p.respond_to?('set_language') 98: p.set_language(@language) 99: end 100: } 101: @bot.plugins.plugins.each { |p| 102: if p.respond_to?('set_language') 103: p.set_language(@language) 104: end 105: } 106: end