Class Irc::Bot::Language
In: lib/rbot/language.rb
Parent: Object
BasicUserMessage JoinMessage NamesMessage WhoisMessage ModeChangeMessage KickMessage MotdMessage QuitMessage BanlistMessage UserMessage NoSuchTargetMessage TopicMessage NickMessage WelcomeMessage UnknownMessage InviteMessage PartMessage NetmaskList UserList ArrayOf ChannelList Netmask User\n[lib/rbot/botuser.rb\nlib/rbot/irc.rb] Channel Singleton RfcCasemap StrictRfcCasemap AsciiCasemap Casemap PrivMessage NoticeMessage TokyoCabinet::BDB CIBDB Btree CIBtree Socket MessageQueue QueueRing Client DBHash\n[lib/rbot/registry/bdb.rb\nlib/rbot/registry/tc.rb] DBTree\n[lib/rbot/registry/bdb.rb\nlib/rbot/registry/tc.rb] Server NetmaskDb Bot\n[lib/rbot/botuser.rb\nlib/rbot/config.rb\nlib/rbot/ircbot.rb\nlib/rbot/language.rb\nlib/rbot/message.rb\nlib/rbot/messagemapper.rb\nlib/rbot/plugins.rb\nlib/rbot/rbotconfig.rb\nlib/rbot/registry/bdb.rb\nlib/rbot/registry/tc.rb] lib/rbot/ircsocket.rb lib/rbot/rfc2812.rb lib/rbot/registry/tc.rb lib/rbot/irc.rb lib/rbot/maskdb.rb lib/rbot/message.rb lib/rbot/messagemapper.rb lib/rbot/botuser.rb lib/rbot/registry/tc.rb (null) BotConfig PKGConfig ServerOrCasemap Irc dot/m_35_0.png

Methods

from_locale   get   new   rescan   save   scan   set_language  

Constants

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

Attributes

language  [R] 

Public Class methods

Return the shortest language for the current GetText locale

[Source]

    # 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

[Source]

    # File lib/rbot/language.rb, line 71
71:     def initialize(bot, language)
72:       @bot = bot
73:       set_language language
74:     end

Public Instance methods

[Source]

     # 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

[Source]

     # File lib/rbot/language.rb, line 123
123:     def rescan
124:       scan
125:     end

[Source]

     # 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

[Source]

     # 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

[Source]

     # 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

[Validate]