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