]> git.netwichtig.de Git - user/henk/code/ruby/rbot.git/blob - lib/rbot/language.rb
Allow plugins to do things when the language is changed. Will be used e.g. by lart...
[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(bot, language)
16       @bot = bot
17       set_language language
18     end
19     attr_reader :language
20
21     def set_language(language)
22       file = Config::datadir + "/languages/#{language}.lang"
23       unless(FileTest.exist?(file))
24         raise "no such language: #{language} (no such file #{file})"
25       end
26       @language = language
27       @file = file
28       scan
29       return if @bot.plugins.nil?
30       @bot.plugins.core_modules.each { |p|
31         if p.respond_to?('set_language')
32           p.set_language(@language)
33         end
34       }
35       @bot.plugins.plugins.each { |p|
36         if p.respond_to?('set_language')
37           p.set_language(@language)
38         end
39       }
40     end
41
42     def scan
43       @strings = Hash.new
44       current_key = nil
45       IO.foreach(@file) {|l|
46         next if l =~ /^$/
47         next if l =~ /^\s*#/
48         if(l =~ /^(\S+):$/)
49           @strings[$1] = Array.new
50           current_key = $1
51         elsif(l =~ /^\s*(.*)$/)
52           @strings[current_key] << $1
53         end
54       }
55     end
56
57     def rescan
58       scan
59     end
60
61     def get(key)
62       if(@strings.has_key?(key))
63         return @strings[key][rand(@strings[key].length)]
64       else
65         raise "undefined language key"
66       end
67     end
68
69     def save
70       File.open(@file, "w") {|file|
71         @strings.each {|key,val|
72           file.puts "#{key}:"
73           val.each_value {|v|
74             file.puts "   #{v}"
75           }
76         }
77       }
78     end
79   end
80
81 end
82 end