gettext 1.91.0 → 1.92.0
Sign up to get free protection for your applications and to get access to all the features.
- data/ChangeLog +111 -1
- data/NEWS +35 -0
- data/README +26 -24
- data/bin/rgettext +2 -2
- data/bin/rmsgfmt +2 -2
- data/bin/rmsgmerge +2 -2
- data/doc/classes/ActionView/Helpers/FormBuilder.html +11 -11
- data/doc/classes/ActionView/TemplateFinder.html +152 -0
- data/doc/classes/ActiveRecord/Base.html +87 -87
- data/doc/classes/ActiveRecord/ConnectionAdapters/Column.html +6 -6
- data/doc/classes/GetText.html +617 -491
- data/doc/classes/GetText/ActiveRecordParser.html +13 -13
- data/doc/classes/GetText/ErbContainer.html +12 -12
- data/doc/classes/GetText/ErbParser.html +6 -6
- data/doc/classes/GetText/NoboundTextDomainError.html +1 -1
- data/doc/classes/GetText/PoParser.html +11 -11
- data/doc/classes/GetText/Rails.html +20 -20
- data/doc/classes/GetText/RubyParser.html +5 -0
- data/doc/classes/GetText/TextDomain.html +53 -53
- data/doc/classes/GetText/TextDomainManager.html +54 -54
- data/doc/classes/Iconv.html +20 -20
- data/doc/classes/Locale.html +151 -151
- data/doc/classes/Locale/Object.html +92 -92
- data/doc/classes/Locale/SystemBase.html +32 -32
- data/doc/classes/Locale/SystemCGI.html +31 -31
- data/doc/classes/Locale/SystemWin32.html +6 -6
- data/doc/classes/MOFile.html +311 -293
- data/doc/classes/MOFile/HeaderRev1.html +150 -0
- data/doc/classes/Module.html +6 -6
- data/doc/created.rid +1 -1
- data/doc/files/ChangeLog.html +143 -2
- data/doc/files/README.html +31 -25
- data/doc/files/lib/gettext/active_record_rb.html +1 -1
- data/doc/files/lib/gettext/mo_rb.html +1 -1
- data/doc/files/lib/gettext/parser/active_record_rb.html +1 -1
- data/doc/files/lib/gettext/parser/ruby_rb.html +1 -1
- data/doc/files/lib/gettext/poparser_rb.html +1 -1
- data/doc/files/lib/gettext/rails_rb.html +1 -1
- data/doc/files/lib/gettext/rgettext_rb.html +1 -1
- data/doc/files/lib/gettext/rmsgfmt_rb.html +2 -1
- data/doc/files/lib/gettext/utils_rb.html +1 -1
- data/doc/files/lib/gettext/version_rb.html +1 -1
- data/doc/files/lib/gettext_rb.html +1 -1
- data/doc/fr_class_index.html +2 -0
- data/doc/fr_method_index.html +133 -129
- data/lib/gettext.rb +49 -7
- data/lib/gettext/active_record.rb +49 -4
- data/lib/gettext/mo.rb +39 -12
- data/lib/gettext/parser/active_record.rb +6 -4
- data/lib/gettext/parser/ruby.rb +11 -4
- data/lib/gettext/poparser.rb +81 -52
- data/lib/gettext/rails.rb +28 -11
- data/lib/gettext/rgettext.rb +6 -1
- data/lib/gettext/rmsgfmt.rb +3 -11
- data/lib/gettext/utils.rb +7 -3
- data/lib/gettext/version.rb +1 -1
- data/po/bs/rails.po +55 -20
- data/po/bs/rgettext.po +3 -3
- data/po/ca/rails.po +58 -31
- data/po/ca/rgettext.po +16 -18
- data/po/cs/rails.po +55 -20
- data/po/cs/rgettext.po +3 -3
- data/po/de/rails.po +55 -27
- data/po/de/rgettext.po +21 -22
- data/po/el/rails.po +60 -36
- data/po/el/rgettext.po +15 -17
- data/po/eo/rails.po +51 -23
- data/po/eo/rgettext.po +21 -20
- data/po/es/rails.po +57 -31
- data/po/es/rgettext.po +17 -18
- data/po/et/rails.po +55 -20
- data/po/fr/rails.po +56 -21
- data/po/fr/rgettext.po +3 -3
- data/po/hr/rails.po +55 -20
- data/po/hr/rgettext.po +3 -3
- data/po/hu/rails.po +54 -26
- data/po/hu/rgettext.po +18 -17
- data/po/it/rails.po +55 -20
- data/po/it/rgettext.po +3 -3
- data/po/ja/rails.po +54 -26
- data/po/ja/rgettext.po +17 -18
- data/po/ko/rails.po +56 -21
- data/po/ko/rgettext.po +3 -3
- data/po/lv/rails.po +155 -0
- data/po/lv/rgettext.po +137 -0
- data/po/nb/rails.po +61 -34
- data/po/nb/rgettext.po +22 -19
- data/po/nl/rails.po +56 -21
- data/po/nl/rgettext.po +3 -3
- data/po/pt_BR/rails.po +53 -26
- data/po/pt_BR/rgettext.po +19 -19
- data/po/rails.pot +44 -16
- data/po/rgettext.pot +3 -3
- data/po/ru/rails.po +62 -36
- data/po/ru/rgettext.po +19 -19
- data/po/sr/rails.po +87 -58
- data/po/sr/rgettext.po +38 -33
- data/po/sv/rgettext.po +3 -3
- data/po/ua/rails.po +62 -32
- data/po/ua/rgettext.po +19 -17
- data/po/vi/rails.po +56 -28
- data/po/vi/rgettext.po +35 -34
- data/po/zh/rails.po +52 -24
- data/po/zh/rgettext.po +22 -24
- data/po/zh_TW/rails.po +51 -23
- data/po/zh_TW/rgettext.po +16 -18
- data/samples/cgi/cookie.cgi +0 -0
- data/samples/cgi/helloerb1.cgi +0 -0
- data/samples/cgi/helloerb2.cgi +0 -0
- data/samples/cgi/http.rb +0 -0
- data/samples/cgi/index.cgi +0 -0
- data/samples/cgi/po/lv/helloerb1.po +65 -0
- data/samples/cgi/po/lv/helloerb2.po +52 -0
- data/samples/cgi/po/lv/hellolib.po +24 -0
- data/samples/cgi/po/lv/main.po +77 -0
- data/samples/cgi/po/nb/helloerb1.po +16 -14
- data/samples/cgi/po/nb/helloerb2.po +14 -12
- data/samples/cgi/po/nb/hellolib.po +9 -7
- data/samples/cgi/po/nb/main.po +20 -18
- data/samples/cgi/po/sr/helloerb1.po +8 -8
- data/samples/cgi/po/sr/helloerb2.po +6 -6
- data/samples/cgi/po/sr/hellolib.po +2 -2
- data/samples/cgi/po/sr/main.po +15 -15
- data/samples/cgi/po/ua/helloerb1.po +2 -2
- data/samples/cgi/po/ua/main.po +3 -3
- data/samples/hello_plural.rb +0 -0
- data/samples/makemo.rb +0 -0
- data/samples/po/lv/hello.po +24 -0
- data/samples/po/lv/hello2.po +32 -0
- data/samples/po/lv/hello_noop.po +28 -0
- data/samples/po/lv/hello_plural.po +26 -0
- data/samples/po/lv/helloglade2.po +38 -0
- data/samples/po/lv/hellogtk.po +24 -0
- data/samples/po/lv/hellotk.po +24 -0
- data/samples/po/nb/hello.po +9 -8
- data/samples/po/nb/hello2.po +9 -9
- data/samples/po/nb/hello_noop.po +10 -9
- data/samples/po/nb/hello_plural.po +10 -8
- data/samples/po/nb/helloglade2.po +10 -8
- data/samples/po/nb/hellogtk.po +9 -8
- data/samples/po/nb/hellotk.po +9 -7
- data/samples/po/sr/hello.po +2 -2
- data/samples/po/sr/hello2.po +4 -4
- data/samples/po/sr/hello_noop.po +3 -3
- data/samples/po/sr/hello_plural.po +3 -3
- data/samples/po/sr/helloglade2.po +4 -4
- data/samples/po/sr/hellogtk.po +2 -2
- data/samples/po/sr/hellotk.po +2 -2
- data/samples/po/ua/hello2.po +2 -2
- data/samples/po/ua/hello_plural.po +2 -2
- data/samples/rails/config/boot.rb +3 -2
- data/samples/rails/config/environment.rb +2 -3
- data/samples/rails/db/schema.rb +0 -0
- data/samples/rails/po/lv/blog.po +110 -0
- data/samples/rails/po/nb/blog.po +19 -15
- data/samples/rails/po/sr/blog.po +23 -23
- data/samples/rails/po/ua/blog.po +3 -3
- data/samples/rails/public/dispatch.cgi +0 -0
- data/samples/rails/public/dispatch.fcgi +0 -0
- data/samples/rails/public/dispatch.rb +0 -0
- data/samples/rails/public/javascripts/controls.js +1 -1
- data/samples/rails/public/javascripts/dragdrop.js +1 -1
- data/samples/rails/public/javascripts/effects.js +1 -1
- data/samples/rails/script/about +0 -0
- data/samples/rails/script/breakpointer +0 -0
- data/samples/rails/script/console +0 -0
- data/samples/rails/script/destroy +0 -0
- data/samples/rails/script/generate +0 -0
- data/samples/rails/script/performance/benchmarker +0 -0
- data/samples/rails/script/performance/profiler +0 -0
- data/samples/rails/script/plugin +0 -0
- data/samples/rails/script/process/reaper +0 -0
- data/samples/rails/script/process/spawner +0 -0
- data/samples/rails/script/process/spinner +0 -0
- data/samples/rails/script/runner +0 -0
- data/samples/rails/script/server +0 -0
- data/samples/rails/vendor/plugins/gettext/po/lv/gettext_plugin.po +28 -0
- data/samples/rails/vendor/plugins/gettext/po/nb/gettext_plugin.po +11 -8
- data/samples/rails/vendor/plugins/gettext/po/sr/gettext_plugin.po +5 -5
- data/src/poparser.ry +27 -6
- data/test/benchmark.rb +1 -1
- data/test/db/mysql.drop.sql +1 -0
- data/test/db/mysql.sql +13 -0
- data/test/fixtures/inept_wizard.rb +3 -0
- data/test/fixtures/people.yml +6 -0
- data/test/fixtures/topic.rb +30 -0
- data/test/fixtures/wizard.rb +5 -0
- data/test/po/active_record.pot +151 -66
- data/test/po/ja/active_record.po +177 -92
- data/test/po/ja/test_pgettext.po +41 -0
- data/test/rails/app/controllers/users_controller.rb +1 -0
- data/test/rails/app/views/articles/_form_fr.html.erb +1 -0
- data/test/rails/config/boot.rb +96 -32
- data/test/rails/config/environment.rb +3 -2
- data/test/rails/db/schema.rb +4 -4
- data/test/rails/public/dispatch.cgi +0 -0
- data/test/rails/public/dispatch.fcgi +0 -0
- data/test/rails/public/dispatch.rb +0 -0
- data/test/rails/public/javascripts/controls.js +484 -354
- data/test/rails/public/javascripts/dragdrop.js +88 -58
- data/test/rails/public/javascripts/effects.js +396 -364
- data/test/rails/public/javascripts/prototype.js +2817 -1107
- data/test/rails/script/about +0 -0
- data/test/rails/script/breakpointer +0 -0
- data/test/rails/script/console +0 -0
- data/test/rails/script/destroy +0 -0
- data/test/rails/script/generate +0 -0
- data/test/rails/script/performance/benchmarker +0 -0
- data/test/rails/script/performance/profiler +0 -0
- data/test/rails/script/plugin +0 -0
- data/test/rails/script/process/inspector +0 -0
- data/test/rails/script/process/reaper +0 -0
- data/test/rails/script/process/spawner +0 -0
- data/test/rails/script/runner +0 -0
- data/test/rails/script/server +0 -0
- data/test/rails/test/functional/articles_controller_test.rb +5 -0
- data/test/rails/test/result/en/create_error.html +3 -3
- data/test/rails/test/result/en/custom_error_message.html +3 -3
- data/test/rails/test/result/en/custom_error_message_with_plural.html +60 -60
- data/test/rails/test/result/en/multi_error_messages_for.html +6 -6
- data/test/rails/test/result/en/new.html +3 -3
- data/test/rails/test/result/fr/custom_error_message.html +3 -3
- data/test/rails/test/result/fr/custom_error_message_with_plural.html +60 -60
- data/test/rails/test/result/fr/new.html +23 -0
- data/test/rails/test/result/ja/create_error.html +3 -3
- data/test/rails/test/result/ja/custom_error_message.html +3 -3
- data/test/rails/test/result/ja/custom_error_message_with_plural.html +60 -60
- data/test/rails/test/result/ja/multi_error_messages_for.html +6 -6
- data/test/rails/test/result/ja/new.html +3 -3
- data/test/test.sh +2 -2
- data/test/test_active_record.rb +824 -20
- data/test/test_gettext.rb +34 -4
- data/test/test_java.sh +0 -0
- data/test/test_locale.rb +2 -2
- data/test/test_parser.rb +13 -2
- data/test/test_rails_caching.rb +11 -4
- data/test/testlib/pgettext.rb +33 -0
- metadata +32 -4
@@ -1,12 +1,12 @@
|
|
1
1
|
=begin
|
2
2
|
gettext/active_record.rb - GetText for ActiveRecord
|
3
3
|
|
4
|
-
Copyright (C) 2006
|
4
|
+
Copyright (C) 2006-2008 Masao Mutoh
|
5
5
|
|
6
6
|
You may redistribute it and/or modify it under the same
|
7
7
|
license terms as Ruby.
|
8
8
|
|
9
|
-
$Id: active_record.rb,v 1.
|
9
|
+
$Id: active_record.rb,v 1.25 2008/07/24 17:17:48 mutoh Exp $
|
10
10
|
=end
|
11
11
|
require 'gettext'
|
12
12
|
require 'active_record'
|
@@ -107,6 +107,34 @@ module ActiveRecord #:nodoc:
|
|
107
107
|
end
|
108
108
|
alias_method_chain :validates_length_of, :gettext
|
109
109
|
|
110
|
+
def _validates_parse_custom_messages(*attrs) #:nodoc:
|
111
|
+
if attrs.last.is_a?(Hash) and attrs.last[:message]
|
112
|
+
msg = attrs.last[:message]
|
113
|
+
key = msg.dup
|
114
|
+
msg.sub!(/%\{val\}/, '%s')
|
115
|
+
@@custom_error_messages_d[key] = /\A#{Regexp.escape(msg).sub('%s', '(.*)')}\Z/
|
116
|
+
end
|
117
|
+
attrs
|
118
|
+
end
|
119
|
+
|
120
|
+
def validates_format_of_with_gettext(*attrs) #:nodoc:
|
121
|
+
attrs = _validates_parse_custom_messages(*attrs)
|
122
|
+
validates_format_of_without_gettext(*attrs)
|
123
|
+
end
|
124
|
+
alias_method_chain :validates_format_of, :gettext
|
125
|
+
|
126
|
+
def validates_inclusion_of_with_gettext(*attrs) #:nodoc:
|
127
|
+
attrs = _validates_parse_custom_messages(*attrs)
|
128
|
+
validates_inclusion_of_without_gettext(*attrs)
|
129
|
+
end
|
130
|
+
alias_method_chain :validates_inclusion_of, :gettext
|
131
|
+
|
132
|
+
def validates_exclusion_of_with_gettext(*attrs) #:nodoc:
|
133
|
+
attrs = _validates_parse_custom_messages(*attrs)
|
134
|
+
validates_exclusion_of_without_gettext(*attrs)
|
135
|
+
end
|
136
|
+
alias_method_chain :validates_exclusion_of, :gettext
|
137
|
+
|
110
138
|
def custom_error_messages_d #:nodoc:
|
111
139
|
@@custom_error_messages_d
|
112
140
|
end
|
@@ -227,12 +255,26 @@ module ActiveRecord #:nodoc:
|
|
227
255
|
:too_short => N_("%{fn} is too short (minimum is %d characters)"),
|
228
256
|
:wrong_length => N_("%{fn} is the wrong length (should be %d characters)"),
|
229
257
|
:taken => N_("%{fn} has already been taken"),
|
230
|
-
:not_a_number => N_("%{fn} is not a number")
|
258
|
+
:not_a_number => N_("%{fn} is not a number"),
|
259
|
+
:greater_than => N_("%{fn} must be greater than %d"),
|
260
|
+
:greater_than_or_equal_to => N_("%{fn} must be greater than or equal to %d"),
|
261
|
+
:equal_to => N_("%{fn} must be equal to %d"),
|
262
|
+
:less_than => N_("%{fn} must be less than %d"),
|
263
|
+
:less_than_or_equal_to => N_("%{fn} must be less than or equal to %d"),
|
264
|
+
:odd => N_("%{fn} must be odd"),
|
265
|
+
:even => N_("%{fn} must be even")
|
231
266
|
)
|
232
267
|
@@default_error_messages_d = {
|
233
268
|
default_error_messages[:too_long] => /#{Regexp.escape(default_error_messages[:too_long]).sub(/%d/, '(\d+)')}/,
|
234
269
|
default_error_messages[:too_short] => /#{Regexp.escape(default_error_messages[:too_short]).sub(/%d/, '(\d+)')}/,
|
235
270
|
default_error_messages[:wrong_length] => /#{Regexp.escape(default_error_messages[:wrong_length]).sub(/%d/, '(\d+)')}/,
|
271
|
+
default_error_messages[:greater_than] => /#{Regexp.escape(default_error_messages[:greater_than]).sub(/%d/, '(\d+)')}/,
|
272
|
+
default_error_messages[:greater_than_or_equal_to] => /#{Regexp.escape(default_error_messages[:greater_than_or_equal_to]).sub(/%d/, '(\d+)')}/,
|
273
|
+
default_error_messages[:equal_to] => /#{Regexp.escape(default_error_messages[:equal_to]).sub(/%d/, '(\d+)')}/,
|
274
|
+
default_error_messages[:less_than] => /#{Regexp.escape(default_error_messages[:less_than]).sub(/%d/, '(\d+)')}/,
|
275
|
+
default_error_messages[:less_than_or_equal_to] => /#{Regexp.escape(default_error_messages[:less_than_or_equal_to]).sub(/%d/, '(\d+)')}/,
|
276
|
+
default_error_messages[:odd] => /#{Regexp.escape(default_error_messages[:odd]).sub(/%d/, '(\d+)')}/,
|
277
|
+
default_error_messages[:even] => /#{Regexp.escape(default_error_messages[:even]).sub(/%d/, '(\d+)')}/,
|
236
278
|
}
|
237
279
|
cattr_accessor :default_error_messages_d
|
238
280
|
|
@@ -243,7 +285,8 @@ module ActiveRecord #:nodoc:
|
|
243
285
|
if regexp =~ msg
|
244
286
|
custom_msg = @base.gettext(key)
|
245
287
|
custom_msg = _(msg) if custom_msg == msg
|
246
|
-
|
288
|
+
custom_msg = _(custom_msg) % $1
|
289
|
+
custom_msg = _(custom_msg) % {:val => $1}
|
247
290
|
break
|
248
291
|
end
|
249
292
|
end
|
@@ -252,6 +295,7 @@ module ActiveRecord #:nodoc:
|
|
252
295
|
custom_msg = @base.gettext(msg)
|
253
296
|
custom_msg = _(msg) if custom_msg == msg
|
254
297
|
end
|
298
|
+
|
255
299
|
if attr == "base"
|
256
300
|
full_message = custom_msg
|
257
301
|
elsif /%\{fn\}/ =~ custom_msg
|
@@ -290,6 +334,7 @@ module ActiveRecord #:nodoc:
|
|
290
334
|
errors.size == 1 ? errors.first : errors
|
291
335
|
end
|
292
336
|
alias_method_chain :on, :gettext
|
337
|
+
alias :[] :on
|
293
338
|
|
294
339
|
# Returns all the full error messages in an array.
|
295
340
|
# * If the error messages include %{fn}, it returns formatted text such as "foo %{fn}" => "foo Field"
|
data/lib/gettext/mo.rb
CHANGED
@@ -1,18 +1,18 @@
|
|
1
1
|
=begin
|
2
2
|
mo.rb - A simple class for operating GNU MO file.
|
3
3
|
|
4
|
-
Copyright (C) 2003-
|
4
|
+
Copyright (C) 2003-2008 Masao Mutoh
|
5
5
|
Copyright (C) 2002 Masahiro Sakai, Masao Mutoh
|
6
6
|
Copyright (C) 2001 Masahiro Sakai
|
7
7
|
|
8
|
-
Masahiro Sakai <s01397ms
|
9
|
-
Masao Mutoh <mutoh
|
8
|
+
Masahiro Sakai <s01397ms at sfc.keio.ac.jp>
|
9
|
+
Masao Mutoh <mutoh at highway.ne.jp>
|
10
10
|
|
11
11
|
You can redistribute this file and/or modify it under the same term
|
12
12
|
of Ruby. License of Ruby is included with Ruby distribution in
|
13
13
|
the file "README".
|
14
14
|
|
15
|
-
$Id: mo.rb,v 1.
|
15
|
+
$Id: mo.rb,v 1.10 2008/06/17 16:40:52 mutoh Exp $
|
16
16
|
=end
|
17
17
|
|
18
18
|
require 'gettext/iconv'
|
@@ -31,6 +31,16 @@ class MOFile < Hash
|
|
31
31
|
:hash_table_size,
|
32
32
|
:hash_table_offset)
|
33
33
|
|
34
|
+
# The following are only used in .mo files
|
35
|
+
# with minor revision >= 1.
|
36
|
+
class HeaderRev1 < Header
|
37
|
+
attr_accessor :n_sysdep_segments,
|
38
|
+
:sysdep_segments_offset,
|
39
|
+
:n_sysdep_strings,
|
40
|
+
:orig_sysdep_tab_offset,
|
41
|
+
:trans_sysdep_tab_offset
|
42
|
+
end
|
43
|
+
|
34
44
|
MAGIC_BIG_ENDIAN = "\x95\x04\x12\xde"
|
35
45
|
MAGIC_LITTLE_ENDIAN = "\xde\x12\x04\x95"
|
36
46
|
|
@@ -84,14 +94,26 @@ class MOFile < Hash
|
|
84
94
|
raise InvalidFormat.new(sprintf("Unknown signature %s", magic.dump))
|
85
95
|
end
|
86
96
|
|
87
|
-
|
88
|
-
|
97
|
+
endian_type6 = @little_endian ? 'V6' : 'N6'
|
98
|
+
endian_type_astr = @little_endian ? 'V*' : 'N*'
|
99
|
+
|
100
|
+
header = HeaderRev1.new(magic, *(io.read(4 * 6).unpack(endian_type6)))
|
89
101
|
|
102
|
+
if header.revision == 1
|
103
|
+
# FIXME: It doesn't support sysdep correctly.
|
104
|
+
header.n_sysdep_segments = io.read(4).unpack(endian_type6)
|
105
|
+
header.sysdep_segments_offset = io.read(4).unpack(endian_type6)
|
106
|
+
header.n_sysdep_strings = io.read(4).unpack(endian_type6)
|
107
|
+
header.orig_sysdep_tab_offset = io.read(4).unpack(endian_type6)
|
108
|
+
header.trans_sysdep_tab_offset = io.read(4).unpack(endian_type6)
|
109
|
+
elsif header.revision > 1
|
110
|
+
raise InvalidFormat.new(sprintf("file format revision %d isn't supported", header.revision))
|
111
|
+
end
|
90
112
|
io.pos = header.orig_table_offset
|
91
|
-
orig_table_data = io.read((4 * 2) * header.nstrings).unpack(
|
113
|
+
orig_table_data = io.read((4 * 2) * header.nstrings).unpack(endian_type_astr)
|
92
114
|
|
93
115
|
io.pos = header.translated_table_offset
|
94
|
-
trans_table_data = io.read((4 * 2) * header.nstrings).unpack(
|
116
|
+
trans_table_data = io.read((4 * 2) * header.nstrings).unpack(endian_type_astr)
|
95
117
|
|
96
118
|
original_strings = Array.new(header.nstrings)
|
97
119
|
for i in 0...header.nstrings
|
@@ -135,7 +157,7 @@ class MOFile < Hash
|
|
135
157
|
end
|
136
158
|
end
|
137
159
|
end
|
138
|
-
self[original_strings[i]] = str
|
160
|
+
self[original_strings[i]] = str.freeze
|
139
161
|
end
|
140
162
|
self
|
141
163
|
end
|
@@ -252,7 +274,12 @@ class MOFile < Hash
|
|
252
274
|
|
253
275
|
def load_from_file(filename)
|
254
276
|
@filename = filename
|
255
|
-
|
277
|
+
begin
|
278
|
+
File.open(filename, 'rb'){|f| load_from_stream(f)}
|
279
|
+
rescue => e
|
280
|
+
e.set_backtrace("File: #{@filename}")
|
281
|
+
raise e
|
282
|
+
end
|
256
283
|
end
|
257
284
|
|
258
285
|
def save_to_file(filename)
|
@@ -285,8 +312,8 @@ if $0 == __FILE__
|
|
285
312
|
puts "plural = \"#{mo.plural}\""
|
286
313
|
puts "------------------------------------------------------------------"
|
287
314
|
mo.each do |key, value|
|
288
|
-
puts "original message =
|
289
|
-
puts "translated message =
|
315
|
+
puts "original message = #{key.inspect}"
|
316
|
+
puts "translated message = #{value.inspect}"
|
290
317
|
puts "--------------------------------------------------------------------"
|
291
318
|
end
|
292
319
|
}
|
@@ -7,7 +7,7 @@
|
|
7
7
|
You may redistribute it and/or modify it under the same
|
8
8
|
license terms as Ruby.
|
9
9
|
|
10
|
-
$Id: active_record.rb,v 1.
|
10
|
+
$Id: active_record.rb,v 1.7 2008/07/14 15:35:07 mutoh Exp $
|
11
11
|
=end
|
12
12
|
|
13
13
|
require 'gettext'
|
@@ -84,7 +84,7 @@ module GetText
|
|
84
84
|
loaded_constants.each do |classname|
|
85
85
|
klass = eval(classname, TOPLEVEL_BINDING)
|
86
86
|
if klass.is_a?(Class) && klass < ActiveRecord::Base
|
87
|
-
unless klass.untranslate_all?
|
87
|
+
unless (klass.untranslate_all? || klass.abstract_class?)
|
88
88
|
add_target(targets, file, ::Inflector.singularize(klass.table_name.gsub(/_/, " ")))
|
89
89
|
unless klass.class_name == classname
|
90
90
|
add_target(targets, file, ::Inflector.singularize(classname.gsub(/_/, " ").downcase))
|
@@ -117,8 +117,10 @@ module GetText
|
|
117
117
|
def add_target(targets, file, msgid) # :nodoc:
|
118
118
|
file_lineno = "#{file}:-"
|
119
119
|
key_existed = targets.assoc(msgid)
|
120
|
-
if key_existed
|
121
|
-
|
120
|
+
if key_existed
|
121
|
+
unless targets[targets.index(key_existed)].include?(file_lineno)
|
122
|
+
targets[targets.index(key_existed)] = key_existed << file_lineno
|
123
|
+
end
|
122
124
|
else
|
123
125
|
targets << [msgid, "#{file}:-"]
|
124
126
|
end
|
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.11 2008/07/26 06:59:35 mutoh Exp $
|
13
13
|
=end
|
14
14
|
|
15
15
|
require 'irb/ruby-lex.rb'
|
@@ -63,6 +63,7 @@ module GetText
|
|
63
63
|
module RubyParser
|
64
64
|
ID = ['gettext', '_', 'N_', 'sgettext', 's_']
|
65
65
|
PLURAL_ID = ['ngettext', 'n_', 'Nn_', 'ns_', 'nsgettext']
|
66
|
+
MSGCTXT_ID = ['pgettext', 'p_']
|
66
67
|
|
67
68
|
module_function
|
68
69
|
def parse(file, targets = []) # :nodoc:
|
@@ -89,6 +90,8 @@ module GetText
|
|
89
90
|
target = :normal
|
90
91
|
elsif PLURAL_ID.include?(tk.name)
|
91
92
|
target = :plural
|
93
|
+
elsif MSGCTXT_ID.include?(tk.name)
|
94
|
+
target = :msgctxt
|
92
95
|
else
|
93
96
|
target = nil
|
94
97
|
end
|
@@ -104,9 +107,13 @@ module GetText
|
|
104
107
|
when RubyToken::TkPLUS, RubyToken::TkNL
|
105
108
|
#do nothing
|
106
109
|
when RubyToken::TkCOMMA
|
107
|
-
if msgid
|
108
|
-
|
109
|
-
|
110
|
+
if msgid
|
111
|
+
if target == :plural
|
112
|
+
msgid += "\000"
|
113
|
+
elsif target == :msgctxt
|
114
|
+
msgid += "\004"
|
115
|
+
end
|
116
|
+
target = :normal
|
110
117
|
end
|
111
118
|
else
|
112
119
|
if msgid
|
data/lib/gettext/poparser.rb
CHANGED
@@ -20,7 +20,7 @@ module GetText
|
|
20
20
|
|
21
21
|
class PoParser < Racc::Parser
|
22
22
|
|
23
|
-
module_eval <<'..end src/poparser.ry modeval..
|
23
|
+
module_eval <<'..end src/poparser.ry modeval..ida6d91c8151', 'src/poparser.ry', 108
|
24
24
|
include GetText
|
25
25
|
GetText.bindtextdomain("rgettext")
|
26
26
|
|
@@ -36,13 +36,18 @@ module_eval <<'..end src/poparser.ry modeval..id99edf64163', 'src/poparser.ry',
|
|
36
36
|
@comments = []
|
37
37
|
@data = data
|
38
38
|
@fuzzy = false
|
39
|
+
@msgctxt = ""
|
39
40
|
$ignore_fuzzy = ignore_fuzzy
|
41
|
+
|
40
42
|
str.strip!
|
41
43
|
@q = []
|
42
44
|
until str.empty? do
|
43
45
|
case str
|
44
46
|
when /\A\s+/
|
45
47
|
str = $'
|
48
|
+
when /\Amsgctxt/
|
49
|
+
@q.push [:MSGCTXT, $&]
|
50
|
+
str = $'
|
46
51
|
when /\Amsgid_plural/
|
47
52
|
@q.push [:MSGID_PLURAL, $&]
|
48
53
|
str = $'
|
@@ -97,6 +102,7 @@ module_eval <<'..end src/poparser.ry modeval..id99edf64163', 'src/poparser.ry',
|
|
97
102
|
@data.set_comment(msgid, @comments.join("\n"))
|
98
103
|
end
|
99
104
|
@comments.clear
|
105
|
+
@msgctxt = ""
|
100
106
|
end
|
101
107
|
|
102
108
|
def on_comment(comment)
|
@@ -104,73 +110,79 @@ module_eval <<'..end src/poparser.ry modeval..id99edf64163', 'src/poparser.ry',
|
|
104
110
|
@comments << comment
|
105
111
|
end
|
106
112
|
|
107
|
-
|
113
|
+
|
114
|
+
..end src/poparser.ry modeval..ida6d91c8151
|
108
115
|
|
109
116
|
##### racc 1.4.5 generates ###
|
110
117
|
|
111
118
|
racc_reduce_table = [
|
112
119
|
0, 0, :racc_error,
|
113
|
-
0,
|
114
|
-
2,
|
115
|
-
2,
|
116
|
-
|
117
|
-
|
118
|
-
2, 13, :_reduce_6,
|
120
|
+
0, 10, :_reduce_none,
|
121
|
+
2, 10, :_reduce_none,
|
122
|
+
2, 10, :_reduce_none,
|
123
|
+
2, 10, :_reduce_none,
|
124
|
+
2, 12, :_reduce_5,
|
119
125
|
1, 13, :_reduce_none,
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
126
|
+
1, 13, :_reduce_none,
|
127
|
+
4, 15, :_reduce_8,
|
128
|
+
5, 16, :_reduce_9,
|
129
|
+
2, 17, :_reduce_10,
|
130
|
+
1, 17, :_reduce_none,
|
131
|
+
3, 18, :_reduce_12,
|
132
|
+
1, 11, :_reduce_13,
|
133
|
+
2, 14, :_reduce_14,
|
134
|
+
1, 14, :_reduce_15 ]
|
124
135
|
|
125
|
-
racc_reduce_n =
|
136
|
+
racc_reduce_n = 16
|
126
137
|
|
127
|
-
racc_shift_n =
|
138
|
+
racc_shift_n = 26
|
128
139
|
|
129
140
|
racc_action_table = [
|
130
|
-
3,
|
131
|
-
|
141
|
+
3, 13, 5, 7, 9, 15, 16, 17, 20, 17,
|
142
|
+
13, 17, 13, 13, 11, 17, 23, 20, 13, 17 ]
|
132
143
|
|
133
144
|
racc_action_check = [
|
134
|
-
1,
|
135
|
-
|
145
|
+
1, 16, 1, 1, 1, 12, 12, 12, 18, 18,
|
146
|
+
7, 14, 15, 9, 3, 19, 20, 21, 23, 25 ]
|
136
147
|
|
137
148
|
racc_action_pointer = [
|
138
|
-
nil, 0, nil,
|
139
|
-
|
140
|
-
|
149
|
+
nil, 0, nil, 14, nil, nil, nil, 3, nil, 6,
|
150
|
+
nil, nil, 0, nil, 4, 5, -6, nil, 2, 8,
|
151
|
+
8, 11, nil, 11, nil, 12 ]
|
141
152
|
|
142
153
|
racc_action_default = [
|
143
|
-
-1, -
|
144
|
-
|
145
|
-
-
|
154
|
+
-1, -16, -2, -16, -3, -13, -4, -16, -6, -16,
|
155
|
+
-7, 26, -16, -15, -5, -16, -16, -14, -16, -8,
|
156
|
+
-16, -9, -11, -16, -10, -12 ]
|
146
157
|
|
147
158
|
racc_goto_table = [
|
148
|
-
|
149
|
-
|
159
|
+
12, 22, 14, 4, 24, 6, 2, 8, 18, 19,
|
160
|
+
10, 21, 1, nil, nil, nil, 25 ]
|
150
161
|
|
151
162
|
racc_goto_check = [
|
152
|
-
|
153
|
-
|
163
|
+
5, 9, 5, 3, 9, 4, 2, 6, 5, 5,
|
164
|
+
7, 8, 1, nil, nil, nil, 5 ]
|
154
165
|
|
155
166
|
racc_goto_pointer = [
|
156
|
-
nil,
|
167
|
+
nil, 12, 5, 2, 4, -7, 6, 9, -7, -17 ]
|
157
168
|
|
158
169
|
racc_goto_default = [
|
159
|
-
nil, nil, nil, nil, nil, nil, nil ]
|
170
|
+
nil, nil, nil, nil, nil, nil, nil, nil, nil, nil ]
|
160
171
|
|
161
172
|
racc_token_table = {
|
162
173
|
false => 0,
|
163
174
|
Object.new => 1,
|
164
175
|
:COMMENT => 2,
|
165
176
|
:MSGID => 3,
|
166
|
-
:
|
167
|
-
:
|
168
|
-
:
|
169
|
-
:
|
177
|
+
:MSGCTXT => 4,
|
178
|
+
:MSGID_PLURAL => 5,
|
179
|
+
:MSGSTR => 6,
|
180
|
+
:STRING => 7,
|
181
|
+
:PLURAL_NUM => 8 }
|
170
182
|
|
171
183
|
racc_use_result_var = true
|
172
184
|
|
173
|
-
racc_nt_base =
|
185
|
+
racc_nt_base = 9
|
174
186
|
|
175
187
|
Racc_arg = [
|
176
188
|
racc_action_table,
|
@@ -193,6 +205,7 @@ Racc_token_to_s_table = [
|
|
193
205
|
'error',
|
194
206
|
'COMMENT',
|
195
207
|
'MSGID',
|
208
|
+
'MSGCTXT',
|
196
209
|
'MSGID_PLURAL',
|
197
210
|
'MSGSTR',
|
198
211
|
'STRING',
|
@@ -200,8 +213,11 @@ Racc_token_to_s_table = [
|
|
200
213
|
'$start',
|
201
214
|
'msgfmt',
|
202
215
|
'comment',
|
216
|
+
'msgctxt',
|
203
217
|
'message',
|
204
218
|
'string_list',
|
219
|
+
'single_message',
|
220
|
+
'plural_message',
|
205
221
|
'msgstr_plural',
|
206
222
|
'msgstr_plural_line']
|
207
223
|
|
@@ -217,8 +233,21 @@ Racc_debug_parser = true
|
|
217
233
|
|
218
234
|
# reduce 3 omitted
|
219
235
|
|
220
|
-
|
221
|
-
|
236
|
+
# reduce 4 omitted
|
237
|
+
|
238
|
+
module_eval <<'.,.,', 'src/poparser.ry', 25
|
239
|
+
def _reduce_5( val, _values, result )
|
240
|
+
@msgctxt = unescape(val[1]) + "\004"
|
241
|
+
result
|
242
|
+
end
|
243
|
+
.,.,
|
244
|
+
|
245
|
+
# reduce 6 omitted
|
246
|
+
|
247
|
+
# reduce 7 omitted
|
248
|
+
|
249
|
+
module_eval <<'.,.,', 'src/poparser.ry', 48
|
250
|
+
def _reduce_8( val, _values, result )
|
222
251
|
if @fuzzy and $ignore_fuzzy
|
223
252
|
if val[1] != ""
|
224
253
|
$stderr.print _("Warning: fuzzy message was ignored.\n")
|
@@ -228,15 +257,15 @@ module_eval <<'.,.,', 'src/poparser.ry', 36
|
|
228
257
|
end
|
229
258
|
@fuzzy = false
|
230
259
|
else
|
231
|
-
on_message(unescape(val[1]), unescape(val[3]))
|
260
|
+
on_message(@msgctxt + unescape(val[1]), unescape(val[3]))
|
232
261
|
end
|
233
262
|
result = ""
|
234
263
|
result
|
235
264
|
end
|
236
265
|
.,.,
|
237
266
|
|
238
|
-
module_eval <<'.,.,', 'src/poparser.ry',
|
239
|
-
def
|
267
|
+
module_eval <<'.,.,', 'src/poparser.ry', 65
|
268
|
+
def _reduce_9( val, _values, result )
|
240
269
|
if @fuzzy and $ignore_fuzzy
|
241
270
|
if val[1] != ""
|
242
271
|
$stderr.print _("Warning: fuzzy message was ignored.\n")
|
@@ -246,15 +275,15 @@ module_eval <<'.,.,', 'src/poparser.ry', 51
|
|
246
275
|
end
|
247
276
|
@fuzzy = false
|
248
277
|
else
|
249
|
-
on_message(unescape(val[1]) + "\000" + unescape(val[3]), unescape(val[4]))
|
278
|
+
on_message(@msgctxt + unescape(val[1]) + "\000" + unescape(val[3]), unescape(val[4]))
|
250
279
|
end
|
251
280
|
result = ""
|
252
281
|
result
|
253
282
|
end
|
254
283
|
.,.,
|
255
284
|
|
256
|
-
module_eval <<'.,.,', 'src/poparser.ry',
|
257
|
-
def
|
285
|
+
module_eval <<'.,.,', 'src/poparser.ry', 76
|
286
|
+
def _reduce_10( val, _values, result )
|
258
287
|
if val[0].size > 0
|
259
288
|
result = val[0] + "\000" + val[1]
|
260
289
|
else
|
@@ -264,31 +293,31 @@ module_eval <<'.,.,', 'src/poparser.ry', 62
|
|
264
293
|
end
|
265
294
|
.,.,
|
266
295
|
|
267
|
-
# reduce
|
296
|
+
# reduce 11 omitted
|
268
297
|
|
269
|
-
module_eval <<'.,.,', 'src/poparser.ry',
|
270
|
-
def
|
298
|
+
module_eval <<'.,.,', 'src/poparser.ry', 84
|
299
|
+
def _reduce_12( val, _values, result )
|
271
300
|
result = val[2]
|
272
301
|
result
|
273
302
|
end
|
274
303
|
.,.,
|
275
304
|
|
276
|
-
module_eval <<'.,.,', 'src/poparser.ry',
|
277
|
-
def
|
305
|
+
module_eval <<'.,.,', 'src/poparser.ry', 91
|
306
|
+
def _reduce_13( val, _values, result )
|
278
307
|
on_comment(val[0])
|
279
308
|
result
|
280
309
|
end
|
281
310
|
.,.,
|
282
311
|
|
283
|
-
module_eval <<'.,.,', 'src/poparser.ry',
|
284
|
-
def
|
312
|
+
module_eval <<'.,.,', 'src/poparser.ry', 99
|
313
|
+
def _reduce_14( val, _values, result )
|
285
314
|
result = val.delete_if{|item| item == ""}.join
|
286
315
|
result
|
287
316
|
end
|
288
317
|
.,.,
|
289
318
|
|
290
|
-
module_eval <<'.,.,', 'src/poparser.ry',
|
291
|
-
def
|
319
|
+
module_eval <<'.,.,', 'src/poparser.ry', 103
|
320
|
+
def _reduce_15( val, _values, result )
|
292
321
|
result = val[0]
|
293
322
|
result
|
294
323
|
end
|