Index: hiki/command.rb =================================================================== RCS file: /cvsroot/hiki/hiki/hiki/command.rb,v retrieving revision 1.9 diff -u -p -r1.9 command.rb --- hiki/command.rb 6 Mar 2004 01:02:07 -0000 1.9 +++ hiki/command.rb 7 Apr 2004 10:29:45 -0000 @@ -9,18 +9,18 @@ require 'hiki/plugin' require 'hiki/aliaswiki' require "style/#{$style}/parser" require "hiki/hiki_formatter" -require "messages/#{$lang}" include Amrita include Hiki::Util -include Hiki::Messages module Hiki class Command def initialize(cgi, db) - @db = db - @params = cgi.params @cgi = cgi + @params = cgi.params + init_lang + + @db = db @cmd = @params['c'][0] @p = case @params.keys.size when 0 @@ -582,6 +582,40 @@ module Hiki if redirect_mode and result redirect(@cgi, @plugin.hiki_url(@p)) + end + end + + def init_lang + lang = nil + langs = @params['l'].collect{|l| l.untaint} + accept_language + [$lang] + langs.each do |l| + begin + require "messages/#{l}" + Object.__send__(:include, Hiki::Messages) + $lang = lang = l + case $lang + when 'en', 'fr', 'it' + $charset = 'ISO-8859-1' + end + load 'hiki/global.rb' + break + rescue LoadError + end + end + raise MessageNotFound.new(langs) if lang.nil? + end + + def accept_language + @cgi.accept_language.split(',').collect do |entry| + lang, quality = entry.split(';') + if /^q=(.+)/ =~ quality + quality = $1.to_f + else + quality = 1.0 + end + [lang, quality] + end.sort {|e1, e2| e2[1] <=> e1[1]}.collect do |lang, quality| + lang.untaint end end end Index: hiki/util.rb =================================================================== RCS file: /cvsroot/hiki/hiki/hiki/util.rb,v retrieving revision 1.8 diff -u -p -r1.8 util.rb --- hiki/util.rb 15 Feb 2004 02:48:35 -0000 1.8 +++ hiki/util.rb 7 Apr 2004 10:29:45 -0000 @@ -46,6 +46,16 @@ end module Hiki class PluginException < Exception; end + class Error < StandardError; end + + class MessageNotFound < Error + attr_reader :langs + def initialize(langs) + @langs = langs + super("available message doesn't found in #{@langs.inspect}") + end + end + module Util CONF_S = %w($site_name $author_name $mail $theme $password $theme_url $sidebar_class $main_class $theme_path) CONF_F = %w($mail_on_update $use_sidebar $auto_link)