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