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