1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
|
#
# irb/locale.rb - internationalization module
# $Release Version: 0.9.5$
# $Revision$
# $Date$
# by Keiju ISHITSUKA(keiju@ruby-lang.org)
#
# --
#
#
#
autoload :Kconv, "kconv"
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"] || "C"
end
attr_reader :lang
def lc2kconv(lang)
case lang
when "ja_JP.ujis", "ja_JP.euc", "ja_JP.eucJP"
Kconv::EUC
when "ja_JP.sjis", "ja_JP.SJIS"
Kconv::SJIS
when /ja_JP.utf-?8/i
Kconv::UTF8
end
end
private :lc2kconv
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(opt)}
super(*ary)
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)
src = self.String(File.read(path))
if priv
eval("self", TOPLEVEL_BINDING).extend(Module.new {eval(src, nil, path)})
else
eval(src, TOPLEVEL_BINDING, path)
end
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.exist?(p1 = path + lc_path(file, "C"))
if File.exist?(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
|