2001-04-30 21:38:21 +04:00
|
|
|
#
|
|
|
|
# irb/locale.rb - internationalization module
|
2002-07-09 15:17:17 +04:00
|
|
|
# $Release Version: 0.9$
|
2001-04-30 21:38:21 +04:00
|
|
|
# $Revision$
|
|
|
|
# $Date$
|
|
|
|
# by Keiju ISHITSUKA(keiju@ishitsuka.com)
|
|
|
|
#
|
|
|
|
# --
|
|
|
|
#
|
|
|
|
#
|
|
|
|
#
|
|
|
|
|
2001-06-22 18:16:25 +04:00
|
|
|
autoload :Tempfile, "tempfile"
|
|
|
|
autoload :Kconv, "kconv"
|
2001-04-30 21:38:21 +04:00
|
|
|
|
|
|
|
module IRB
|
|
|
|
class Locale
|
|
|
|
@RCS_ID='-$Id$-'
|
|
|
|
|
|
|
|
JPDefaultLocale = "ja"
|
|
|
|
LOCALE_DIR = "/lc/"
|
|
|
|
|
|
|
|
def initialize(locale = nil)
|
|
|
|
@lang = locale || ENV["IRB_LANG"] || ENV["LC_MESSAGES"] || ENV["LC_ALL"] || ENV["LANG"]
|
|
|
|
@lang = "C" unless @lang
|
|
|
|
end
|
|
|
|
|
|
|
|
attr_reader :lang
|
|
|
|
|
2002-11-22 12:14:24 +03:00
|
|
|
@@LC2KCONV = {
|
|
|
|
# "ja" => Kconv::JIS,
|
|
|
|
# "ja_JP" => Kconv::JIS,
|
|
|
|
"ja_JP.ujis" => Kconv::EUC,
|
|
|
|
"ja_JP.euc" => Kconv::EUC,
|
|
|
|
"ja_JP.eucJP" => Kconv::EUC,
|
|
|
|
"ja_JP.sjis" => Kconv::SJIS,
|
|
|
|
"ja_JP.SJIS" => Kconv::SJIS,
|
|
|
|
}
|
|
|
|
|
2001-04-30 21:38:21 +04:00
|
|
|
def String(mes)
|
|
|
|
mes = super(mes)
|
|
|
|
case @lang
|
|
|
|
when /^ja/
|
2001-06-22 18:16:25 +04:00
|
|
|
mes = Kconv::kconv(mes, @@LC2KCONV[@lang])
|
2001-04-30 21:38:21 +04:00
|
|
|
else
|
|
|
|
mes
|
|
|
|
end
|
|
|
|
mes
|
|
|
|
end
|
|
|
|
|
|
|
|
def format(*opts)
|
|
|
|
String(super(*opts))
|
|
|
|
end
|
|
|
|
|
|
|
|
def gets(*rs)
|
|
|
|
String(super(*rs))
|
|
|
|
end
|
|
|
|
|
|
|
|
def readline(*rs)
|
|
|
|
String(super(*rs))
|
|
|
|
end
|
|
|
|
|
|
|
|
def print(*opts)
|
|
|
|
ary = opts.collect{|opt| String(opt)}
|
2001-06-27 19:35:04 +04:00
|
|
|
super(*ary)
|
2001-04-30 21:38:21 +04:00
|
|
|
end
|
|
|
|
|
|
|
|
def printf(*opts)
|
|
|
|
s = format(*opts)
|
|
|
|
print s
|
|
|
|
end
|
|
|
|
|
|
|
|
def puts(*opts)
|
|
|
|
ary = opts.collect{|opt| String(opts)}
|
2001-06-27 19:35:04 +04:00
|
|
|
super(*ary)
|
2001-04-30 21:38:21 +04:00
|
|
|
end
|
|
|
|
|
|
|
|
def require(file, priv = nil)
|
|
|
|
rex = Regexp.new("lc/#{Regexp.quote(file)}\.(so|o|sl|rb)?")
|
|
|
|
return false if $".find{|f| f =~ rex}
|
|
|
|
|
|
|
|
case file
|
|
|
|
when /\.rb$/
|
|
|
|
begin
|
|
|
|
load(file, priv)
|
|
|
|
$".push file
|
|
|
|
return true
|
|
|
|
rescue LoadError
|
|
|
|
end
|
|
|
|
when /\.(so|o|sl)$/
|
|
|
|
return super
|
|
|
|
end
|
|
|
|
|
|
|
|
begin
|
|
|
|
load(f = file + ".rb")
|
|
|
|
$".push f #"
|
|
|
|
return true
|
|
|
|
rescue LoadError
|
|
|
|
return ruby_require(file)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
alias toplevel_load load
|
|
|
|
|
|
|
|
def load(file, priv=nil)
|
|
|
|
dir = File.dirname(file)
|
|
|
|
dir = "" if dir == "."
|
|
|
|
base = File.basename(file)
|
|
|
|
|
|
|
|
if /^ja(_JP)?$/ =~ @lang
|
|
|
|
back, @lang = @lang, "C"
|
|
|
|
end
|
|
|
|
begin
|
|
|
|
if dir[0] == ?/ #/
|
|
|
|
lc_path = search_file(dir, base)
|
|
|
|
return real_load(lc_path, priv) if lc_path
|
|
|
|
end
|
|
|
|
|
|
|
|
for path in $:
|
|
|
|
lc_path = search_file(path + "/" + dir, base)
|
|
|
|
return real_load(lc_path, priv) if lc_path
|
|
|
|
end
|
|
|
|
ensure
|
|
|
|
@lang = back if back
|
|
|
|
end
|
|
|
|
raise LoadError, "No such file to load -- #{file}"
|
|
|
|
end
|
|
|
|
|
|
|
|
def real_load(path, priv)
|
|
|
|
tmp_base = path.tr("./:", "___")
|
|
|
|
lc_file = Tempfile.new(tmp_base)
|
|
|
|
File.foreach(path) do |line|
|
|
|
|
line = self.String(line)
|
|
|
|
lc_file.print(line)
|
|
|
|
end
|
|
|
|
lc_file.close
|
|
|
|
toplevel_load lc_file.path, priv
|
2002-07-09 15:17:17 +04:00
|
|
|
lc_file.close(true)
|
2001-04-30 21:38:21 +04:00
|
|
|
end
|
|
|
|
private :real_load
|
|
|
|
|
|
|
|
def find(file , paths = $:)
|
|
|
|
dir = File.dirname(file)
|
|
|
|
dir = "" if dir == "."
|
|
|
|
base = File.basename(file)
|
|
|
|
if dir[0] == ?/ #/
|
|
|
|
return lc_path = search_file(dir, base)
|
|
|
|
else
|
|
|
|
for path in $:
|
|
|
|
if lc_path = search_file(path + "/" + dir, base)
|
|
|
|
return lc_path
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
nil
|
|
|
|
end
|
|
|
|
|
|
|
|
def search_file(path, file)
|
|
|
|
if File.exists?(p1 = path + lc_path(file, "C"))
|
|
|
|
if File.exists?(p2 = path + lc_path(file))
|
|
|
|
return p2
|
|
|
|
else
|
|
|
|
end
|
|
|
|
return p1
|
|
|
|
else
|
|
|
|
end
|
|
|
|
nil
|
|
|
|
end
|
|
|
|
private :search_file
|
|
|
|
|
|
|
|
def lc_path(file = "", lc = @lang)
|
|
|
|
case lc
|
|
|
|
when "C"
|
|
|
|
LOCALE_DIR + file
|
|
|
|
when /^ja/
|
|
|
|
LOCALE_DIR + "ja/" + file
|
|
|
|
else
|
|
|
|
LOCALE_DIR + @lang + "/" + file
|
|
|
|
end
|
|
|
|
end
|
|
|
|
private :lc_path
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|