mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
Initial revision
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@1337 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
e32f6a8269
commit
f8ab487e4d
14 changed files with 2209 additions and 0 deletions
187
lib/irb/locale.rb
Normal file
187
lib/irb/locale.rb
Normal file
|
|
@ -0,0 +1,187 @@
|
|||
#
|
||||
# irb/locale.rb - internationalization module
|
||||
# $Release Version: 0.7.3$
|
||||
# $Revision$
|
||||
# $Date$
|
||||
# by Keiju ISHITSUKA(keiju@ishitsuka.com)
|
||||
#
|
||||
# --
|
||||
#
|
||||
#
|
||||
#
|
||||
|
||||
require "kconv"
|
||||
|
||||
module IRB
|
||||
class Locale
|
||||
@RCS_ID='-$Id$-'
|
||||
|
||||
JPDefaultLocale = "ja"
|
||||
LOCALE_DIR = "/lc/"
|
||||
|
||||
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,
|
||||
}
|
||||
|
||||
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
|
||||
|
||||
def String(mes)
|
||||
mes = super(mes)
|
||||
case @lang
|
||||
when /^ja/
|
||||
mes = Kconv::kconv(mes, LC2KCONV[@lang])
|
||||
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)}
|
||||
super *ary
|
||||
end
|
||||
|
||||
def printf(*opts)
|
||||
s = format(*opts)
|
||||
print s
|
||||
end
|
||||
|
||||
def puts(*opts)
|
||||
ary = opts.collect{|opt| String(opts)}
|
||||
super *ary
|
||||
end
|
||||
|
||||
autoload :Tempfile, "tempfile"
|
||||
|
||||
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
|
||||
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
|
||||
|
||||
|
||||
|
||||
|
||||
Loading…
Add table
Add a link
Reference in a new issue