gettext 1.7.0-mswin32 → 1.8.0-mswin32
Sign up to get free protection for your applications and to get access to all the features.
- data/ChangeLog +139 -0
- data/NEWS +31 -0
- data/README +31 -15
- data/Rakefile +3 -2
- data/bin/rgettext +1 -1
- data/bin/rmsgfmt +1 -1
- data/bin/rmsgmerge +1 -1
- data/data/locale/cs/LC_MESSAGES/rails.mo +0 -0
- data/data/locale/cs/LC_MESSAGES/rgettext.mo +0 -0
- data/data/locale/de/LC_MESSAGES/rails.mo +0 -0
- data/data/locale/de/LC_MESSAGES/rgettext.mo +0 -0
- data/data/locale/el/LC_MESSAGES/rails.mo +0 -0
- data/data/locale/el/LC_MESSAGES/rgettext.mo +0 -0
- data/data/locale/es/LC_MESSAGES/rails.mo +0 -0
- data/data/locale/es/LC_MESSAGES/rgettext.mo +0 -0
- data/data/locale/et/LC_MESSAGES/rails.mo +0 -0
- data/data/locale/fr/LC_MESSAGES/rails.mo +0 -0
- data/data/locale/fr/LC_MESSAGES/rgettext.mo +0 -0
- data/data/locale/it/LC_MESSAGES/rails.mo +0 -0
- data/data/locale/it/LC_MESSAGES/rgettext.mo +0 -0
- data/data/locale/ja/LC_MESSAGES/rails.mo +0 -0
- data/data/locale/ja/LC_MESSAGES/rgettext.mo +0 -0
- data/data/locale/ko/LC_MESSAGES/rails.mo +0 -0
- data/data/locale/ko/LC_MESSAGES/rgettext.mo +0 -0
- data/data/locale/nl/LC_MESSAGES/rails.mo +0 -0
- data/data/locale/nl/LC_MESSAGES/rgettext.mo +0 -0
- data/data/locale/pt_BR/LC_MESSAGES/rails.mo +0 -0
- data/data/locale/pt_BR/LC_MESSAGES/rgettext.mo +0 -0
- data/data/locale/ru/LC_MESSAGES/rails.mo +0 -0
- data/data/locale/ru/LC_MESSAGES/rgettext.mo +0 -0
- data/data/locale/sv/LC_MESSAGES/rgettext.mo +0 -0
- data/data/locale/zh/LC_MESSAGES/rails.mo +0 -0
- data/data/locale/zh/LC_MESSAGES/rgettext.mo +0 -0
- data/data/locale/zh_TW/LC_MESSAGES/rails.mo +0 -0
- data/data/locale/zh_TW/LC_MESSAGES/rgettext.mo +0 -0
- data/lib/gettext.rb +50 -23
- data/lib/gettext/active_record.rb +275 -0
- data/lib/gettext/locale.rb +9 -2
- data/lib/gettext/locale_cgi.rb +5 -4
- data/lib/gettext/locale_object.rb +5 -4
- data/lib/gettext/parser/{activerecord.rb → active_record.rb} +31 -14
- data/lib/gettext/parser/ruby.rb +48 -44
- data/lib/gettext/rails.rb +111 -253
- data/lib/gettext/rgettext.rb +34 -6
- data/lib/gettext/string.rb +3 -2
- data/lib/gettext/textdomain.rb +3 -3
- data/lib/gettext/version.rb +1 -1
- data/po/cs/rails.po +61 -61
- data/po/cs/rgettext.po +37 -55
- data/po/de/rails.po +73 -72
- data/po/de/rgettext.po +39 -56
- data/po/el/rails.po +60 -60
- data/po/el/rgettext.po +26 -44
- data/po/es/rails.po +60 -60
- data/po/es/rgettext.po +28 -52
- data/po/et/rails.po +118 -0
- data/po/fr/rails.po +60 -60
- data/po/fr/rgettext.po +26 -46
- data/po/it/rails.po +68 -68
- data/po/it/rgettext.po +35 -53
- data/po/ja/rails.po +62 -61
- data/po/ja/rgettext.po +27 -45
- data/po/ko/rails.po +61 -60
- data/po/ko/rgettext.po +34 -54
- data/po/nl/rails.po +59 -60
- data/po/nl/rgettext.po +35 -55
- data/po/pt_BR/rails.po +74 -73
- data/po/pt_BR/rgettext.po +36 -52
- data/po/rails.pot +61 -61
- data/po/rgettext.pot +25 -43
- data/po/ru/rails.po +61 -62
- data/po/ru/rgettext.po +26 -51
- data/po/sv/rgettext.po +27 -44
- data/po/zh/rails.po +62 -60
- data/po/zh/rgettext.po +28 -47
- data/po/zh_TW/rails.po +114 -0
- data/po/zh_TW/rgettext.po +121 -0
- data/samples/cgi/locale/zh_TW/LC_MESSAGES/helloerb1.mo +0 -0
- data/samples/cgi/locale/zh_TW/LC_MESSAGES/helloerb2.mo +0 -0
- data/samples/cgi/locale/zh_TW/LC_MESSAGES/hellolib.mo +0 -0
- data/samples/cgi/locale/zh_TW/LC_MESSAGES/main.mo +0 -0
- data/samples/cgi/po/zh_TW/helloerb1.po +67 -0
- data/samples/cgi/po/zh_TW/helloerb2.po +54 -0
- data/samples/cgi/po/zh_TW/hellolib.po +26 -0
- data/samples/cgi/po/zh_TW/main.po +79 -0
- data/samples/locale/zh_TW/LC_MESSAGES/hello.mo +0 -0
- data/samples/locale/zh_TW/LC_MESSAGES/hello2.mo +0 -0
- data/samples/locale/zh_TW/LC_MESSAGES/hello_noop.mo +0 -0
- data/samples/locale/zh_TW/LC_MESSAGES/hello_plural.mo +0 -0
- data/samples/locale/zh_TW/LC_MESSAGES/helloglade2.mo +0 -0
- data/samples/locale/zh_TW/LC_MESSAGES/hellogtk.mo +0 -0
- data/samples/locale/zh_TW/LC_MESSAGES/hellotk.mo +0 -0
- data/samples/po/hellogtk.pot +1 -1
- data/samples/po/zh_TW/hello.po +26 -0
- data/samples/po/zh_TW/hello2.po +34 -0
- data/samples/po/zh_TW/hello_noop.po +30 -0
- data/samples/po/zh_TW/hello_plural.po +28 -0
- data/samples/po/zh_TW/helloglade2.po +40 -0
- data/samples/po/zh_TW/hellogtk.po +25 -0
- data/samples/po/zh_TW/hellotk.po +26 -0
- data/samples/rails/README +8 -11
- data/samples/rails/app/controllers/application.rb +6 -9
- data/samples/rails/app/views/layouts/blog.rhtml +1 -1
- data/samples/rails/config/database.yml +1 -1
- data/samples/rails/config/environment.rb +1 -0
- data/samples/rails/db/schema.rb +90 -0
- data/samples/rails/lib/tasks/gettext.rake +1 -1
- data/samples/rails/locale/cs/LC_MESSAGES/blog.mo +0 -0
- data/samples/rails/locale/de/LC_MESSAGES/blog.mo +0 -0
- data/samples/rails/locale/el/LC_MESSAGES/blog.mo +0 -0
- data/samples/rails/locale/en/LC_MESSAGES/blog.mo +0 -0
- data/samples/rails/locale/es/LC_MESSAGES/blog.mo +0 -0
- data/samples/rails/locale/fr/LC_MESSAGES/blog.mo +0 -0
- data/samples/rails/locale/it/LC_MESSAGES/blog.mo +0 -0
- data/samples/rails/locale/ja/LC_MESSAGES/blog.mo +0 -0
- data/samples/rails/locale/ko/LC_MESSAGES/blog.mo +0 -0
- data/samples/rails/locale/nl/LC_MESSAGES/blog.mo +0 -0
- data/samples/rails/locale/pt_BR/LC_MESSAGES/blog.mo +0 -0
- data/samples/rails/locale/ru/LC_MESSAGES/blog.mo +0 -0
- data/samples/rails/locale/zh/LC_MESSAGES/blog.mo +0 -0
- data/samples/rails/locale/zh_TW/LC_MESSAGES/blog.mo +0 -0
- data/samples/rails/po/blog.pot +106 -110
- data/samples/rails/po/cs/blog.po +110 -115
- data/samples/rails/po/de/blog.po +107 -112
- data/samples/rails/po/el/blog.po +105 -109
- data/samples/rails/po/en/blog.po +107 -111
- data/samples/rails/po/es/blog.po +105 -110
- data/samples/rails/po/fr/blog.po +105 -109
- data/samples/rails/po/it/blog.po +105 -109
- data/samples/rails/po/ja/blog.po +105 -109
- data/samples/rails/po/ko/blog.po +105 -109
- data/samples/rails/po/nl/blog.po +105 -110
- data/samples/rails/po/pt_BR/blog.po +105 -109
- data/samples/rails/po/ru/blog.po +105 -107
- data/samples/rails/po/zh/blog.po +105 -109
- data/samples/rails/po/zh_TW/blog.po +107 -0
- data/samples/rails/vendor/plugins/gettext/locale/zh_TW/LC_MESSAGES/gettext_plugin.mo +0 -0
- data/samples/rails/vendor/plugins/gettext/po/zh_TW/gettext_plugin.po +30 -0
- data/test/Rakefile +44 -0
- data/test/fixtures/developer.rb +5 -0
- data/test/fixtures/developers.yml +21 -0
- data/test/fixtures/reply.rb +40 -0
- data/test/fixtures/topic.rb +23 -0
- data/test/fixtures/topics.yml +22 -0
- data/test/gettext_test.rb +2 -2
- data/test/gettext_test_active_record.rb +1479 -0
- data/test/gettext_test_rails.rb +2 -0
- data/test/locale/ja/LC_MESSAGES/active_record.mo +0 -0
- data/test/po/active_record.pot +295 -0
- data/test/po/ja/active_record.po +294 -0
- data/test/test.sh +1 -0
- data/test/test_rubyparser.rb +10 -2
- metadata +66 -6
- data/samples/rails/db/mysql.sql +0 -8
- data/samples/rails/db/postgresql.sql +0 -7
data/lib/gettext/parser/ruby.rb
CHANGED
@@ -9,7 +9,7 @@
|
|
9
9
|
You may redistribute it and/or modify it under the same
|
10
10
|
license terms as Ruby.
|
11
11
|
|
12
|
-
$Id: ruby.rb,v 1.
|
12
|
+
$Id: ruby.rb,v 1.8 2006/09/11 16:30:31 mutoh Exp $
|
13
13
|
=end
|
14
14
|
|
15
15
|
require 'irb/ruby-lex.rb'
|
@@ -80,7 +80,6 @@ class RubyLexX < RubyLex # :nodoc: all
|
|
80
80
|
def parse
|
81
81
|
until ( (tk = token).kind_of?(RubyToken::TkEND_OF_SCRIPT) && !@continue or tk.nil? )
|
82
82
|
s = get_readed
|
83
|
-
|
84
83
|
if RubyToken::TkSTRING === tk
|
85
84
|
def tk.value
|
86
85
|
@value
|
@@ -115,7 +114,7 @@ class RubyLexX < RubyLex # :nodoc: all
|
|
115
114
|
|
116
115
|
yield tk
|
117
116
|
end
|
118
|
-
|
117
|
+
|
119
118
|
return nil
|
120
119
|
end
|
121
120
|
|
@@ -142,47 +141,52 @@ module GetText
|
|
142
141
|
target = nil
|
143
142
|
msgid = nil
|
144
143
|
line_no = nil
|
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
|
-
|
185
|
-
|
144
|
+
tk = nil
|
145
|
+
begin
|
146
|
+
rl.parse do |tk|
|
147
|
+
case tk
|
148
|
+
when RubyToken::TkIDENTIFIER, RubyToken::TkCONSTANT
|
149
|
+
if ID.include?(tk.name)
|
150
|
+
target = :normal
|
151
|
+
elsif PLURAL_ID.include?(tk.name)
|
152
|
+
target = :plural
|
153
|
+
else
|
154
|
+
target = nil
|
155
|
+
end
|
156
|
+
line_no = tk.line_no.to_s
|
157
|
+
when RubyToken::TkSTRING
|
158
|
+
if target
|
159
|
+
if msgid
|
160
|
+
msgid += tk.value
|
161
|
+
else
|
162
|
+
msgid = tk.value
|
163
|
+
end
|
164
|
+
end
|
165
|
+
when RubyToken::TkPLUS, RubyToken::TkNL
|
166
|
+
#do nothing
|
167
|
+
when RubyToken::TkCOMMA
|
168
|
+
if msgid and target == :plural
|
169
|
+
msgid += "\000"
|
170
|
+
target = :normal
|
171
|
+
end
|
172
|
+
else
|
173
|
+
if msgid
|
174
|
+
key_existed = targets.assoc(msgid.gsub(/\n/, '\n'))
|
175
|
+
if key_existed
|
176
|
+
targets[targets.index(key_existed)] = key_existed <<
|
177
|
+
file_name + ":" + line_no
|
178
|
+
else
|
179
|
+
targets << [msgid.gsub(/\n/, '\n'), file_name + ":" + line_no]
|
180
|
+
end
|
181
|
+
msgid = nil
|
182
|
+
target = nil
|
183
|
+
end
|
184
|
+
end
|
185
|
+
targets
|
186
|
+
end
|
187
|
+
rescue
|
188
|
+
$stderr.puts "\n\nError: #{$!} in #{file_name}:#{tk.line_no}\n\t #{lines[tk.line_no - 1]}"
|
189
|
+
exit
|
186
190
|
end
|
187
191
|
targets
|
188
192
|
end
|
data/lib/gettext/rails.rb
CHANGED
@@ -6,11 +6,10 @@
|
|
6
6
|
You may redistribute it and/or modify it under the same
|
7
7
|
license terms as Ruby.
|
8
8
|
|
9
|
-
$Id: rails.rb,v 1.
|
9
|
+
$Id: rails.rb,v 1.51 2006/09/10 15:08:32 mutoh Exp $
|
10
10
|
=end
|
11
11
|
|
12
12
|
require 'gettext/cgi'
|
13
|
-
require 'active_record'
|
14
13
|
require 'active_support'
|
15
14
|
|
16
15
|
module GetText
|
@@ -53,34 +52,20 @@ module GetText
|
|
53
52
|
# * :charset - the charset. Generally UTF-8 is recommanded.
|
54
53
|
# And the charset is set order by "the argument of bindtextdomain"
|
55
54
|
# > HTTP_ACCEPT_CHARSET > Default charset(UTF-8).
|
56
|
-
# * :with_model - false if you want to ignore ActiveRecord support.
|
57
|
-
# * :with_helper - false if you want to ignore ApplicationHelper support.
|
58
55
|
#
|
59
56
|
# Note: Don't use locale, charset, with_model argument(not in options).
|
60
57
|
# They are remained for backward compatibility.
|
61
58
|
#
|
62
59
|
def bindtextdomain(domainname, options = {}, locale = nil, charset = nil, with_model = true)
|
63
|
-
opt = {
|
60
|
+
opt = {}
|
64
61
|
if options.kind_of? CGI
|
65
62
|
# For backward compatibility
|
66
|
-
opt.merge!(:cgi => options, :locale => locale, :charset => charset
|
63
|
+
opt.merge!(:cgi => options, :locale => locale, :charset => charset)
|
67
64
|
else
|
68
65
|
opt.merge!(options)
|
69
66
|
end
|
70
67
|
opt[:path] ||= File.join(RAILS_ROOT, "locale")
|
71
|
-
|
72
|
-
set_cgi(opt[:cgi]) if opt[:cgi]
|
73
|
-
ret = _bindtextdomain(domainname, opt)
|
74
|
-
bindtextdomain_to(ActiveRecord::Base, domainname) if opt[:with_model]
|
75
|
-
bindtextdomain_to(ApplicationHelper, domainname) if opt[:with_helper]
|
76
|
-
ret
|
77
|
-
end
|
78
|
-
|
79
|
-
def bindtextdomain_to(klass, domainname) #:nodoc:
|
80
|
-
klass.class_eval {
|
81
|
-
include GetText
|
82
|
-
textdomain(domainname)
|
83
|
-
}
|
68
|
+
_bindtextdomain(domainname, opt)
|
84
69
|
end
|
85
70
|
end
|
86
71
|
end
|
@@ -91,38 +76,91 @@ module ActionController #:nodoc:
|
|
91
76
|
helper GetText::Rails
|
92
77
|
include GetText::Rails
|
93
78
|
|
94
|
-
@@
|
79
|
+
@@gettext_domainnames = []
|
95
80
|
@@gettext_content_type = nil
|
96
81
|
|
97
82
|
prepend_before_filter :init_gettext
|
98
83
|
after_filter :init_content_type
|
84
|
+
|
99
85
|
|
100
|
-
def init_gettext_main #:nodoc:
|
101
|
-
if
|
102
|
-
|
103
|
-
|
104
|
-
bindtextdomain(@@gettext_domainname, {:cgi => cgi_}) #You need to pass CGI object first.
|
105
|
-
else
|
106
|
-
bindtextdomain(@@gettext_domainname, {:locale => @params["lang"]})
|
107
|
-
end
|
86
|
+
def init_gettext_main(cgi) #:nodoc:
|
87
|
+
cgi.params["lang"] = [@params["lang"]] if @params["lang"]
|
88
|
+
set_cgi(cgi)
|
89
|
+
set_locale_all(nil)
|
108
90
|
end
|
109
91
|
|
92
|
+
REGEXP_GETTEXT_CONTENT_TYPE = /javascript/ #:nodoc:
|
110
93
|
def init_content_type #:nodoc:
|
111
|
-
if @headers["Content-Type"] and
|
94
|
+
if @headers["Content-Type"] and REGEXP_GETTEXT_CONTENT_TYPE =~ @headers["Content-Type"]
|
112
95
|
@headers["Content-Type"] = "text/javascript; charset=#{GetText.output_charset}"
|
113
96
|
elsif ! @headers["Content-Type"]
|
114
97
|
@headers["Content-Type"] = "#{@@gettext_content_type}; charset=#{GetText.output_charset}"
|
115
98
|
end
|
116
99
|
end
|
117
100
|
|
101
|
+
def call_methods_around_init_gettext(ary) #:nodoc:
|
102
|
+
ary.each do |block|
|
103
|
+
if block.kind_of? Symbol
|
104
|
+
send(block)
|
105
|
+
else
|
106
|
+
block.call(self)
|
107
|
+
end
|
108
|
+
end
|
109
|
+
end
|
118
110
|
|
119
111
|
def init_gettext # :nodoc:
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
112
|
+
cgi = nil
|
113
|
+
if defined? request.cgi
|
114
|
+
cgi = request.cgi
|
115
|
+
end
|
116
|
+
call_methods_around_init_gettext(@@before_init_gettext)
|
117
|
+
init_gettext_main(cgi) if @@gettext_domainnames.size > 0
|
118
|
+
call_methods_around_init_gettext(@@after_init_gettext)
|
119
|
+
|
120
|
+
if ::RAILS_ENV == "development"
|
121
|
+
@@before_init_gettext = []
|
122
|
+
@@after_init_gettext = []
|
123
|
+
end
|
124
|
+
end
|
125
|
+
|
126
|
+
# Append a block which is called before initializing gettext on the each WWW request.
|
127
|
+
#
|
128
|
+
# (e.g.)
|
129
|
+
# class ApplicationController < ActionController::Base
|
130
|
+
# before_init_gettext{|controller|
|
131
|
+
# cookies = controller.cookies
|
132
|
+
# if (cookies["lang"].nil? or cookies["lang"].empty?)
|
133
|
+
# GetText.locale = "zh_CN"
|
134
|
+
# else
|
135
|
+
# GetText.locale = cookies["lang"]
|
136
|
+
# end
|
137
|
+
# }
|
138
|
+
# init_gettext "myapp"
|
139
|
+
# # ...
|
140
|
+
# end
|
141
|
+
@@before_init_gettext = []
|
142
|
+
def self.before_init_gettext(*methods, &block)
|
143
|
+
@@before_init_gettext += methods
|
144
|
+
@@before_init_gettext << block if block_given?
|
145
|
+
end
|
146
|
+
|
147
|
+
# Append a block which is called after initializing gettext on the each WWW request.
|
148
|
+
#
|
149
|
+
# The GetText.locale is set the locale which bound to the textdomains
|
150
|
+
# when gettext is initialized.
|
151
|
+
#
|
152
|
+
# (e.g.)
|
153
|
+
# class ApplicationController < ActionController::Base
|
154
|
+
# after_init_gettext {|controller|
|
155
|
+
# L10nClass.new(GetText.locale)
|
156
|
+
# }
|
157
|
+
# init_gettext "foo"
|
158
|
+
# # ...
|
159
|
+
# end
|
160
|
+
@@after_init_gettext = []
|
161
|
+
def self.after_init_gettext(*methods, &block)
|
162
|
+
@@after_init_gettext += methods
|
163
|
+
@@after_init_gettext << block if block_given?
|
126
164
|
end
|
127
165
|
|
128
166
|
# Bind a 'textdomain' to all of the controllers/views/models. Call this instead of GetText.bindtextdomain.
|
@@ -130,6 +168,7 @@ module ActionController #:nodoc:
|
|
130
168
|
# * options: options as a Hash.
|
131
169
|
# * :charset - the output charset. Default is "UTF-8"
|
132
170
|
# * :content_type - the content type. Default is "text/html"
|
171
|
+
# * :locale_path - the path to locale directory. Default is {RAILS_ROOT}/locale or {plugin root directory}/locale.
|
133
172
|
#
|
134
173
|
# locale is searched the order by @params["lang"] > "lang" value of QUERY_STRING >
|
135
174
|
# "lang" value of Cookie > HTTP_ACCEPT_LANGUAGE value > Default locale(en).
|
@@ -155,15 +194,46 @@ module ActionController #:nodoc:
|
|
155
194
|
opt.merge!(:charset => options, :content_type => content_type)
|
156
195
|
end
|
157
196
|
GetText.output_charset = opt[:charset]
|
158
|
-
@@gettext_domainname = domainname
|
159
197
|
@@gettext_content_type = opt[:content_type]
|
198
|
+
locale_path = opt[:locale_path]
|
199
|
+
unless locale_path
|
200
|
+
begin
|
201
|
+
locale_path = File.join(caller[0].split(/app.controllers/)[0] + "locale")
|
202
|
+
rescue RuntimeError
|
203
|
+
locale_path = File.join(RAILS_ROOT, "locale")
|
204
|
+
end
|
205
|
+
end
|
206
|
+
|
207
|
+
unless @@gettext_domainnames.find{|i| i[0] == domainname}
|
208
|
+
@@gettext_domainnames << [domainname, locale_path]
|
209
|
+
end
|
210
|
+
|
211
|
+
bindtextdomain(domainname, {:path => locale_path})
|
212
|
+
if defined? ActiveRecord::Base
|
213
|
+
textdomain_to(ActiveRecord::Base, domainname)
|
214
|
+
textdomain_to(ActiveRecord::Validations, domainname)
|
215
|
+
end
|
216
|
+
textdomain_to(ActionView::Base, domainname) if defined? ActionView::Base
|
217
|
+
textdomain_to(ApplicationHelper, domainname) if defined? ApplicationHelper
|
218
|
+
textdomain_to(ActionMailer::Base, domainname) if defined? ActionMailer::Base
|
160
219
|
end
|
161
220
|
|
162
221
|
# Gets the textdomain name of this controller.
|
222
|
+
# This returns the first textdomain which is bound in app/controller/*.rb.
|
223
|
+
#
|
224
|
+
# *Notice* Deprecated since 1.8.
|
163
225
|
def self.textdomainname
|
164
|
-
@@
|
226
|
+
textdomain = @@gettext_domainnames[0]
|
227
|
+
textdomain ? textdomain[0] : nil
|
165
228
|
end
|
166
229
|
|
230
|
+
# Gets the textdomain name and path of this controller which is set
|
231
|
+
# with init_gettext. *(Since 1.8)*
|
232
|
+
#
|
233
|
+
# * Returns: [[textdomainname1, path1], [textdomainname2, path2], ...]
|
234
|
+
def self.textdomains
|
235
|
+
@@gettext_domainnames
|
236
|
+
end
|
167
237
|
end
|
168
238
|
|
169
239
|
class TestRequest < AbstractRequest #:nodoc:
|
@@ -173,223 +243,9 @@ module ActionController #:nodoc:
|
|
173
243
|
@cgi
|
174
244
|
end
|
175
245
|
end
|
176
|
-
end
|
177
|
-
|
178
|
-
module ActiveRecord #:nodoc:
|
179
|
-
class Migration
|
180
|
-
extend GetText
|
181
|
-
include GetText
|
182
|
-
end
|
183
|
-
|
184
|
-
module ConnectionAdapters #:nodoc:
|
185
|
-
# An abstract definition of a column in a table.
|
186
|
-
class Column
|
187
|
-
attr_accessor :table_class
|
188
|
-
|
189
|
-
def human_name
|
190
|
-
table_class.human_attribute_name(@name)
|
191
|
-
end
|
192
|
-
end
|
193
|
-
end
|
194
|
-
|
195
|
-
module Validations # :nodoc:
|
196
|
-
def self.append_features(base) # :nodoc:
|
197
|
-
super
|
198
|
-
base.extend ClassMethods
|
199
|
-
base.class_eval{
|
200
|
-
def gettext(str) #:nodoc:
|
201
|
-
_(str)
|
202
|
-
end
|
203
|
-
def self.human_attribute_name(attribute_key_name) #:nodoc:
|
204
|
-
s_("#{self}|#{attribute_key_name.humanize}")
|
205
|
-
end
|
206
|
-
|
207
|
-
def self.human_attribute_table_name_for_error(table_name) #:nodoc:
|
208
|
-
_(table_name.gsub(/_/, " "))
|
209
|
-
end
|
210
|
-
}
|
211
|
-
end
|
212
|
-
|
213
|
-
module ClassMethods #:nodoc:
|
214
|
-
@@custom_error_messages_d = {}
|
215
|
-
|
216
|
-
# Very ugly but...
|
217
|
-
def validates_length_of(*attrs) #:nodoc:
|
218
|
-
if attrs.last.is_a?(Hash)
|
219
|
-
msg = attrs.last[:message]
|
220
|
-
if msg
|
221
|
-
@@custom_error_messages_d[msg] = /#{Regexp.escape(msg).sub(/%d/, '(\d+)')}/
|
222
|
-
end
|
223
|
-
end
|
224
|
-
validates_size_of(*attrs)
|
225
|
-
end
|
226
|
-
|
227
|
-
def custom_error_messages_d #:nodoc:
|
228
|
-
@@custom_error_messages_d
|
229
|
-
end
|
230
|
-
end
|
231
|
-
def custom_error_messages_d #:nodoc:
|
232
|
-
self.class.custom_error_messages_d
|
233
|
-
end
|
234
|
-
end
|
235
|
-
|
236
|
-
class Base
|
237
|
-
include GetText::Rails
|
238
|
-
include Validations
|
239
|
-
|
240
|
-
@@gettext_untranslate = false
|
241
|
-
@@gettext_untranslate_columns = []
|
242
|
-
|
243
|
-
# Untranslate all of the tablename/fieldnames in this model class.
|
244
|
-
def self.untranslate_all
|
245
|
-
@@gettext_untranslate = true
|
246
|
-
end
|
247
|
-
|
248
|
-
# Returns true if "untranslate_all" is called. Otherwise false.
|
249
|
-
def self.untranslate_all?
|
250
|
-
@@gettext_untranslate
|
251
|
-
end
|
252
|
-
|
253
|
-
# Sets the untranslate columns.
|
254
|
-
# (e.g.) untranslate :foo, :bar, :baz
|
255
|
-
def self.untranslate(*w)
|
256
|
-
@@gettext_untranslate_columns += w.collect{|v| v.to_s}
|
257
|
-
end
|
258
|
-
|
259
|
-
# Returns true if the column is set "untranslate".
|
260
|
-
# (e.g.) untranslate? :foo
|
261
|
-
def self.untranslate?(columnname)
|
262
|
-
@@gettext_untranslate_columns.include?(columnname)
|
263
|
-
end
|
264
|
-
|
265
|
-
def self.untranslate_data #:nodoc:
|
266
|
-
[@@gettext_untranslate, @@gettext_untranslate_columns]
|
267
|
-
end
|
268
|
-
|
269
|
-
def self.columns
|
270
|
-
unless @columns
|
271
|
-
@columns = connection.columns(table_name, "#{name} Columns")
|
272
|
-
@columns.each {|column|
|
273
|
-
column.table_class = self
|
274
|
-
column.primary = column.name == primary_key
|
275
|
-
}
|
276
|
-
end
|
277
|
-
@columns
|
278
|
-
end
|
279
|
-
|
280
|
-
# call-seq:
|
281
|
-
# set_error_message_title(msg)
|
282
|
-
#
|
283
|
-
# ((*Deprecated*))
|
284
|
-
# Use ActionView::Helpers::ActiveRecordHelper::L10n.set_error_message_title
|
285
|
-
# instead.
|
286
|
-
#
|
287
|
-
# Sets a your own title of error message dialog.
|
288
|
-
# * msg: [single_msg, plural_msg]. Usually you need to call this with Nn_().
|
289
|
-
# * Returns: [single_msg, plural_msg]
|
290
|
-
def self.set_error_message_title(msg, plural_msg = nil)
|
291
|
-
ActionView::Helpers::ActiveRecordHelper::L10n.set_error_message_title(msg, plural_msg)
|
292
|
-
end
|
293
|
-
|
294
|
-
# call-seq:
|
295
|
-
# set_error_message_explanation(msg)
|
296
|
-
#
|
297
|
-
# ((*Deprecated*))
|
298
|
-
# Use ActionView::Helpers::ActiveRecordHelper::L10n.set_error_message_explanation
|
299
|
-
# instead.
|
300
|
-
#
|
301
|
-
# Sets a your own explanation of the error message dialog.
|
302
|
-
# * msg: [single_msg, plural_msg]. Usually you need to call this with Nn_().
|
303
|
-
# * Returns: [single_msg, plural_msg]
|
304
|
-
def self.set_error_message_explanation(msg, plural_msg = nil)
|
305
|
-
ActionView::Helpers::ActiveRecordHelper::L10n.set_error_message_explanation(msg, plural_msg)
|
306
|
-
end
|
307
|
-
end
|
308
|
-
|
309
|
-
# activerecord-1.14.3/lib/active_record/validations.rb
|
310
|
-
class Errors #:nodoc:
|
311
|
-
include GetText
|
312
|
-
|
313
|
-
RE_FIELD_NAME = /%\{fn\}/ #:nodoc:
|
314
|
-
|
315
|
-
# You need to define this here, because this values will be updated by application.
|
316
|
-
default_error_messages.update(
|
317
|
-
:inclusion => N_("%{fn} is not included in the list"),
|
318
|
-
:exclusion => N_("%{fn} is reserved"),
|
319
|
-
:invalid => N_("%{fn} is invalid"),
|
320
|
-
:confirmation => N_("%{fn} doesn't match confirmation"),
|
321
|
-
:accepted => N_("%{fn} must be accepted"),
|
322
|
-
:empty => N_("%{fn} can't be empty"),
|
323
|
-
:blank => N_("%{fn} can't be blank"),
|
324
|
-
:too_long => N_("%{fn} is too long (max is %d characters)"),
|
325
|
-
:too_short => N_("%{fn} is too short (min is %d characters)"),
|
326
|
-
:wrong_length => N_("%{fn} is the wrong length (should be %d characters)"),
|
327
|
-
:taken => N_("%{fn} has already been taken"),
|
328
|
-
:not_a_number => N_("%{fn} is not a number")
|
329
|
-
)
|
330
|
-
@@default_error_messages_d = {
|
331
|
-
default_error_messages[:too_long] => /#{Regexp.escape(default_error_messages[:too_long]).sub(/%d/, '(\d+)')}/,
|
332
|
-
default_error_messages[:too_short] =>/#{Regexp.escape(default_error_messages[:too_short]).sub(/%d/, '(\d+)')}/,
|
333
|
-
default_error_messages[:wrong_length] =>/#{Regexp.escape(default_error_messages[:wrong_length]).sub(/%d/, '(\d+)')}/,
|
334
|
-
}
|
335
|
-
cattr_accessor :default_error_messages_d
|
336
|
-
|
337
|
-
def localize_error_messages # :nodoc:
|
338
|
-
errors = {}
|
339
|
-
@errors.each_key do |attr|
|
340
|
-
@errors[attr].each do |msg|
|
341
|
-
next if msg.nil?
|
342
|
-
custom_msg = nil
|
343
|
-
#Ugly but... :-<
|
344
|
-
@@default_error_messages_d.merge(@base.custom_error_messages_d).each do |key, regexp|
|
345
|
-
if regexp =~ msg
|
346
|
-
custom_msg = @base.gettext(key)
|
347
|
-
custom_msg = _(msg) if custom_msg == msg
|
348
|
-
custom_msg = _(custom_msg) % $1.to_i
|
349
|
-
break
|
350
|
-
end
|
351
|
-
end
|
352
|
-
unless custom_msg
|
353
|
-
custom_msg = @base.gettext(msg)
|
354
|
-
custom_msg = _(msg) if custom_msg == msg
|
355
|
-
end
|
356
|
-
if attr == "base"
|
357
|
-
full_message = custom_msg
|
358
|
-
elsif RE_FIELD_NAME =~ custom_msg
|
359
|
-
full_message = custom_msg % {:fn => @base.class.human_attribute_name(attr)}
|
360
|
-
else
|
361
|
-
full_message = @base.class.human_attribute_name(attr) + " " + custom_msg
|
362
|
-
end
|
363
|
-
errors[attr] = full_message
|
364
|
-
end
|
365
|
-
end
|
366
|
-
errors
|
367
|
-
end
|
368
|
-
|
369
|
-
def on(attribute) #:nodoc:
|
370
|
-
errors = localize_error_messages
|
371
|
-
if errors[attribute.to_s].nil?
|
372
|
-
nil
|
373
|
-
elsif errors[attribute.to_s].length == 1
|
374
|
-
errors[attribute.to_s].first
|
375
|
-
else
|
376
|
-
errors[attribute.to_s]
|
377
|
-
end
|
378
|
-
end
|
379
246
|
|
380
|
-
def full_messages #:nodoc:
|
381
|
-
full_messages = []
|
382
|
-
errors = localize_error_messages
|
383
|
-
errors.each do |attr, msg|
|
384
|
-
next if msg.nil?
|
385
|
-
full_messages << msg
|
386
|
-
end
|
387
|
-
full_messages
|
388
|
-
end
|
389
|
-
end
|
390
247
|
end
|
391
248
|
|
392
|
-
|
393
249
|
module ActionView #:nodoc:
|
394
250
|
class Base #:nodoc:
|
395
251
|
alias render_file_without_locale render_file #:nodoc:
|
@@ -502,8 +358,6 @@ module ActionView #:nodoc:
|
|
502
358
|
include GetText
|
503
359
|
alias distance_of_time_in_words_without_locale distance_of_time_in_words #:nodoc:
|
504
360
|
|
505
|
-
bindtextdomain("rails")
|
506
|
-
|
507
361
|
# This is FAKE constant. The messages are found by rgettext as the msgid.
|
508
362
|
MESSAGESS = [N_('less than 5 seconds'), N_('less than 10 seconds'), N_('less than 20 seconds'),
|
509
363
|
N_('half a minute'), N_('less than a minute')]
|
@@ -512,6 +366,8 @@ module ActionView #:nodoc:
|
|
512
366
|
DAYS = [/^(\d+) days?$/, Nn_('1 day', '%{num} days')]
|
513
367
|
|
514
368
|
def distance_of_time_in_words(from_time, to_time = 0, include_seconds = false)
|
369
|
+
textdomain("rails")
|
370
|
+
|
515
371
|
msg = distance_of_time_in_words_without_locale(from_time, to_time, include_seconds)
|
516
372
|
match = false
|
517
373
|
[MINUTES, HOURS, DAYS].each do |regexp, nn|
|
@@ -575,3 +431,5 @@ end
|
|
575
431
|
if ::RAILS_ENV == "development"
|
576
432
|
GetText::TextDomain.check_mo = true
|
577
433
|
end
|
434
|
+
|
435
|
+
require 'gettext/active_record'
|