]> git.netwichtig.de Git - user/henk/code/ruby/rbot.git/blob - lib/rbot/language.rb
Sun Jul 31 02:20:08 BST 2005 Tom Gilbert <tom@linuxbrit.co.uk>
[user/henk/code/ruby/rbot.git] / lib / rbot / language.rb
1 module Irc
2 module Language
3
4   class Language
5     BotConfig.register BotConfigEnumValue.new('core.language', 
6       :default => "english", :wizard => true,
7       :values => Dir.new(Config::DATADIR + "/languages").collect {|f|
8                    f =~ /\.lang$/ ? f.gsub(/\.lang$/, "") : nil
9                  }.compact,   
10       :on_change => Proc.new {|bot, v| bot.lang.set_language v},
11       :desc => "Which language file the bot should use")
12     
13     def initialize(language)
14       set_language language
15     end
16
17     def set_language(language)
18       file = Config::DATADIR + "/languages/#{language}.lang"
19       unless(FileTest.exist?(file))
20         raise "no such language: #{language} (no such file #{file})"
21       end
22       @language = language
23       @file = file
24       scan
25     end
26
27     def scan
28       @strings = Hash.new
29       current_key = nil
30       IO.foreach(@file) {|l|
31         next if l =~ /^$/
32         next if l =~ /^\s*#/
33         if(l =~ /^(\S+):$/)
34           @strings[$1] = Array.new
35           current_key = $1
36         elsif(l =~ /^\s*(.*)$/)
37           @strings[current_key] << $1
38         end
39       }
40     end
41
42     def rescan
43       scan
44     end
45
46     def get(key)
47       if(@strings.has_key?(key))
48         return @strings[key][rand(@strings[key].length)]
49       else
50         raise "undefined language key"
51       end
52     end
53
54     def save
55       File.open(@file, "w") {|file|
56         @strings.each {|key,val|
57           file.puts "#{key}:"
58           val.each_value {|v|
59             file.puts "   #{v}"
60           }
61         }
62       }
63     end
64   end
65
66 end
67 end