gettext 2.3.9 → 3.0.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.yardopts +1 -0
- data/README.rdoc +28 -23
- data/Rakefile +29 -21
- data/doc/text/news.md +57 -0
- data/gettext.gemspec +1 -1
- data/lib/gettext.rb +13 -29
- data/lib/gettext/cgi.rb +1 -1
- data/lib/gettext/{runtime/class_info.rb → class_info.rb} +1 -1
- data/lib/gettext/{runtime/locale_path.rb → locale_path.rb} +1 -2
- data/lib/gettext/{runtime/mo.rb → mo.rb} +18 -33
- data/lib/gettext/{tools/po.rb → po.rb} +1 -1
- data/lib/gettext/{tools/po_entry.rb → po_entry.rb} +8 -4
- data/lib/gettext/{tools/poparser.rb → po_parser.rb} +41 -44
- data/lib/gettext/{runtime/textdomain.rb → text_domain.rb} +6 -16
- data/lib/gettext/text_domain_group.rb +26 -0
- data/lib/gettext/{runtime/textdomain_manager.rb → text_domain_manager.rb} +40 -40
- data/lib/gettext/tools.rb +1 -182
- data/lib/gettext/tools/msgfmt.rb +1 -1
- data/lib/gettext/tools/msginit.rb +1 -1
- data/lib/gettext/tools/msgmerge.rb +2 -221
- data/lib/gettext/tools/parser/erb.rb +49 -30
- data/lib/gettext/tools/parser/glade.rb +44 -36
- data/lib/gettext/tools/parser/ruby.rb +126 -37
- data/lib/gettext/tools/task.rb +225 -0
- data/lib/gettext/tools/xgettext.rb +25 -28
- data/lib/gettext/version.rb +1 -1
- data/locale/bg/LC_MESSAGES/gettext.mo +0 -0
- data/locale/bs/LC_MESSAGES/gettext.mo +0 -0
- data/locale/ca/LC_MESSAGES/gettext.mo +0 -0
- data/locale/cs/LC_MESSAGES/gettext.mo +0 -0
- data/locale/de/LC_MESSAGES/gettext.mo +0 -0
- data/locale/el/LC_MESSAGES/gettext.mo +0 -0
- data/locale/eo/LC_MESSAGES/gettext.mo +0 -0
- data/locale/es/LC_MESSAGES/gettext.mo +0 -0
- data/locale/et/LC_MESSAGES/gettext.mo +0 -0
- data/locale/fr/LC_MESSAGES/gettext.mo +0 -0
- data/locale/hr/LC_MESSAGES/gettext.mo +0 -0
- data/locale/hu/LC_MESSAGES/gettext.mo +0 -0
- data/locale/it/LC_MESSAGES/gettext.mo +0 -0
- data/locale/ja/LC_MESSAGES/gettext.mo +0 -0
- data/locale/ko/LC_MESSAGES/gettext.mo +0 -0
- data/locale/lv/LC_MESSAGES/gettext.mo +0 -0
- data/locale/nb/LC_MESSAGES/gettext.mo +0 -0
- data/locale/nl/LC_MESSAGES/gettext.mo +0 -0
- data/locale/pt_BR/LC_MESSAGES/gettext.mo +0 -0
- data/locale/ru/LC_MESSAGES/gettext.mo +0 -0
- data/locale/sr/LC_MESSAGES/gettext.mo +0 -0
- data/locale/sv/LC_MESSAGES/gettext.mo +0 -0
- data/locale/uk/LC_MESSAGES/gettext.mo +0 -0
- data/locale/vi/LC_MESSAGES/gettext.mo +0 -0
- data/locale/zh/LC_MESSAGES/gettext.mo +0 -0
- data/locale/zh_TW/LC_MESSAGES/gettext.mo +0 -0
- data/po/gettext.pot +171 -97
- data/samples/hello.rb +3 -2
- data/samples/hello2.rb +2 -1
- data/samples/hello_gtk2.rb +4 -1
- data/samples/hello_gtk_builder.rb +32 -0
- data/samples/hello_gtk_builder.ui +46 -0
- data/samples/hello_noop.rb +2 -1
- data/samples/hello_plural.rb +2 -1
- data/samples/hello_tk.rb +2 -1
- data/src/{poparser.ry → po_parser.ry} +31 -35
- data/test/fixtures/N_.rb +1 -1
- data/test/fixtures/_/double_quote_in_double_quote.rb +32 -0
- data/test/fixtures/_/double_quote_in_single_quote.rb +32 -0
- data/test/fixtures/_/literal_concatenation_with_continuation_line.rb +36 -0
- data/test/fixtures/_/middle_new_line.rb +32 -0
- data/test/fixtures/_/multiple_lines_literal.rb +35 -0
- data/test/fixtures/_/multiple_messages_in_same_line.rb +32 -0
- data/test/fixtures/_/multiple_same_messages.rb +36 -0
- data/{lib/gettext/runtime/mofile.rb → test/fixtures/_/one_new_line.rb} +12 -6
- data/test/fixtures/{multi_textdomain.rb → multi_text_domain.rb} +1 -1
- data/test/fixtures/non_ascii.rb +1 -1
- data/test/fixtures/simple.rb +1 -1
- data/test/fixtures/untranslated.rb +1 -1
- data/test/gettext-test-utils.rb +1 -24
- data/test/po/ja/_.po +63 -13
- data/test/po/ja/non_ascii.po +2 -3
- data/test/po/ja/untranslated.po +1 -1
- data/test/test_class_info.rb +2 -2
- data/test/test_gettext.rb +11 -11
- data/test/test_mo.rb +2 -2
- data/test/test_parser.rb +93 -96
- data/test/test_po_entry.rb +237 -146
- data/test/test_po_parser.rb +107 -98
- data/test/test_string.rb +1 -1
- data/test/{test_textdomain_bind.rb → test_text_domain_bind.rb} +6 -6
- data/test/{test_textdomain_multi.rb → test_text_domain_multi.rb} +5 -5
- data/test/{test_textdomain_toplevel.rb → test_text_domain_toplevel.rb} +1 -1
- data/test/test_thread.rb +1 -1
- data/test/tools/files/simple_translation.rb +1 -1
- data/test/{parser → tools/parser}/test_ruby.rb +110 -14
- data/test/tools/test_msgmerge.rb +17 -276
- data/test/tools/test_po.rb +1 -1
- data/test/tools/test_xgettext.rb +175 -144
- metadata +59 -33
- data/lib/gettext/core_ext/iconv.rb +0 -110
- data/lib/gettext/core_ext/string.rb +0 -91
- data/lib/gettext/parser/erb.rb +0 -5
- data/lib/gettext/parser/glade.rb +0 -5
- data/lib/gettext/parser/ruby.rb +0 -172
- data/lib/gettext/runtime/textdomain_group.rb +0 -26
- data/lib/gettext/task.rb +0 -203
- data/lib/gettext/utils.rb +0 -39
- data/test/test_po_generation.rb +0 -45
- data/test/tools/test_tools.rb +0 -61
data/test/tools/test_msgmerge.rb
CHANGED
@@ -21,284 +21,9 @@
|
|
21
21
|
require 'gettext/tools/msgmerge'
|
22
22
|
|
23
23
|
class TestToolsMsgMerge < Test::Unit::TestCase
|
24
|
-
class TestPoData < self
|
25
|
-
def setup
|
26
|
-
@po_data = GetText::Tools::MsgMerge::PoData.new
|
27
|
-
end
|
28
|
-
|
29
|
-
def test_msgids
|
30
|
-
@po_data["hello"] = "bonjour"
|
31
|
-
@po_data["he"] = "il"
|
32
|
-
|
33
|
-
assert_equal(["he", "hello"], @po_data.msgids.sort)
|
34
|
-
end
|
35
|
-
|
36
|
-
def test_each_msgids
|
37
|
-
@po_data["hello"] = "bonjour"
|
38
|
-
@po_data["he"] = "il"
|
39
|
-
@po_data[""] = "header"
|
40
|
-
@po_data[:last] = ""
|
41
|
-
|
42
|
-
msgids = []
|
43
|
-
@po_data.each_msgid do |msgid|
|
44
|
-
msgids << msgid
|
45
|
-
end
|
46
|
-
assert_equal(["he", "hello"], msgids.sort)
|
47
|
-
end
|
48
|
-
|
49
|
-
class TestAddToExistingEntry < self
|
50
|
-
def test_msgctxt
|
51
|
-
msgctxt = "msgctxt"
|
52
|
-
msgid = "msgid"
|
53
|
-
original_string = "#{msgctxt}\004#{msgid}"
|
54
|
-
msgstr = "msgstr"
|
55
|
-
|
56
|
-
po_data = GetText::Tools::MsgMerge::PoData.new
|
57
|
-
po_data[original_string] = msgstr
|
58
|
-
|
59
|
-
assert_equal(msgctxt, po_data.po[msgctxt, msgid].msgctxt)
|
60
|
-
end
|
61
|
-
|
62
|
-
def test_msgid_plural
|
63
|
-
msgid = "msgid"
|
64
|
-
msgid_plural = "msgid_plural"
|
65
|
-
original_string = "#{msgid}\000#{msgid_plural}"
|
66
|
-
msgstr = "msgstr"
|
67
|
-
|
68
|
-
po_data = GetText::Tools::MsgMerge::PoData.new
|
69
|
-
po_data[msgid] = msgstr
|
70
|
-
assert_equal(nil, po_data.po[msgid].msgid_plural)
|
71
|
-
|
72
|
-
po_data[original_string] = msgstr
|
73
|
-
assert_equal(msgid_plural, po_data.po[msgid].msgid_plural)
|
74
|
-
end
|
75
|
-
|
76
|
-
def test_msgctxt_and_msgid_plural
|
77
|
-
msgctxt = "msgctxt"
|
78
|
-
msgid = "msgid"
|
79
|
-
msgid_plural = "msgid_plural"
|
80
|
-
original_string = "#{msgctxt}\004#{msgid}\000#{msgid_plural}"
|
81
|
-
msgstr = "msgstr"
|
82
|
-
|
83
|
-
po_data = GetText::Tools::MsgMerge::PoData.new
|
84
|
-
po_data[original_string] = msgstr
|
85
|
-
|
86
|
-
assert_equal(msgctxt, po_data.po[msgctxt, msgid].msgctxt)
|
87
|
-
assert_equal(msgid_plural, po_data.po[msgctxt, msgid].msgid_plural)
|
88
|
-
end
|
89
|
-
end
|
90
|
-
|
91
|
-
class TestGeneratePo < self
|
92
|
-
def test_comment_and_msgid_and_msgstr
|
93
|
-
header_entry_comment = "# header entry comment."
|
94
|
-
header_entry = "header\nentry\n"
|
95
|
-
comment = "#: test.rb:10"
|
96
|
-
msgid = "Hello"
|
97
|
-
msgstr = "Salut"
|
98
|
-
|
99
|
-
po = GetText::Tools::MsgMerge::PoData.new
|
100
|
-
po.set_comment("", header_entry_comment)
|
101
|
-
po[""] = header_entry
|
102
|
-
po[msgid] = msgstr
|
103
|
-
po.set_comment(msgid, comment)
|
104
|
-
|
105
|
-
expected_header_entry = ""
|
106
|
-
header_entry.each_line do |line|
|
107
|
-
expected_header_entry << "\"#{line.chomp}\\n\"\n"
|
108
|
-
end
|
109
|
-
expected_header_entry = expected_header_entry.chomp
|
110
|
-
expected_po = <<EOP
|
111
|
-
#{header_entry_comment}
|
112
|
-
msgid \"\"
|
113
|
-
msgstr \"\"
|
114
|
-
#{expected_header_entry}
|
115
|
-
|
116
|
-
#{comment}
|
117
|
-
msgid \"#{msgid}\"
|
118
|
-
msgstr \"#{msgstr}\"
|
119
|
-
EOP
|
120
|
-
assert_equal(expected_po, po.generate_po)
|
121
|
-
end
|
122
|
-
|
123
|
-
def test_obsolete_comment
|
124
|
-
obsolete_comment =<<EOC
|
125
|
-
# test.rb:10
|
126
|
-
msgid \"Hello\"
|
127
|
-
msgstr \"Salut\"
|
128
|
-
EOC
|
129
|
-
header_entry_comment = "# header entry comment."
|
130
|
-
header_entry = "header entry"
|
131
|
-
|
132
|
-
po = GetText::Tools::MsgMerge::PoData.new
|
133
|
-
po.set_comment("", header_entry_comment)
|
134
|
-
po[""] = header_entry
|
135
|
-
po.set_comment(:last, obsolete_comment)
|
136
|
-
|
137
|
-
expected_obsolete_comment = <<-EOC
|
138
|
-
# test.rb:10
|
139
|
-
#~ msgid "Hello"
|
140
|
-
#~ msgstr "Salut"
|
141
|
-
EOC
|
142
|
-
expected_obsolete_comment = expected_obsolete_comment.chomp
|
143
|
-
|
144
|
-
expected_po = <<EOP
|
145
|
-
#{header_entry_comment}
|
146
|
-
msgid \"\"
|
147
|
-
msgstr \"#{header_entry}\"
|
148
|
-
|
149
|
-
#{expected_obsolete_comment}
|
150
|
-
EOP
|
151
|
-
assert_equal(expected_po, po.generate_po)
|
152
|
-
end
|
153
|
-
|
154
|
-
def test_msgid_plural_and_empty_msgstr
|
155
|
-
msgid = "Singular message\000Plural message"
|
156
|
-
|
157
|
-
@po_data[""] = "Plural-Forms: nplurals=2; plural=n != 1;\\n"
|
158
|
-
@po_data[msgid] = "\000"
|
159
|
-
@po_data.set_comment(msgid, "# plural message")
|
160
|
-
actual_po = @po_data.generate_po_entry(msgid)
|
161
|
-
expected_po = <<'EOE'
|
162
|
-
# plural message
|
163
|
-
msgid "Singular message"
|
164
|
-
msgid_plural "Plural message"
|
165
|
-
msgstr[0] ""
|
166
|
-
msgstr[1] ""
|
167
|
-
EOE
|
168
|
-
assert_equal(expected_po, actual_po)
|
169
|
-
end
|
170
|
-
end
|
171
|
-
|
172
|
-
class TestGeneratePOEntry < self
|
173
|
-
def test_msgid_plural
|
174
|
-
msgid = "Singular message\000Plural message"
|
175
|
-
|
176
|
-
@po_data[msgid] = "Singular translation\000Plural translation"
|
177
|
-
@po_data.set_comment(msgid, "# plural message")
|
178
|
-
actual_po = @po_data.generate_po_entry(msgid)
|
179
|
-
expected_po = <<'EOE'
|
180
|
-
# plural message
|
181
|
-
msgid "Singular message"
|
182
|
-
msgid_plural "Plural message"
|
183
|
-
msgstr[0] "Singular translation"
|
184
|
-
msgstr[1] "Plural translation"
|
185
|
-
EOE
|
186
|
-
assert_equal(expected_po, actual_po)
|
187
|
-
end
|
188
|
-
|
189
|
-
def test_msgctxt
|
190
|
-
msg_id = "Context\004Translation"
|
191
|
-
@po_data[msg_id] = "Translated"
|
192
|
-
@po_data.set_comment(msg_id, "# no comment")
|
193
|
-
|
194
|
-
entry = @po_data.generate_po_entry(msg_id)
|
195
|
-
assert_equal(<<-'EOE', entry)
|
196
|
-
# no comment
|
197
|
-
msgctxt "Context"
|
198
|
-
msgid "Translation"
|
199
|
-
msgstr "Translated"
|
200
|
-
EOE
|
201
|
-
end
|
202
|
-
end
|
203
|
-
end
|
204
|
-
|
205
|
-
class TestSplitMsgid < self
|
206
|
-
def test_existed_msgctxt_and_msgid_plural
|
207
|
-
msgctxt = "msgctxt"
|
208
|
-
msgid = "msgid"
|
209
|
-
msgid_plural = "msgid_plural"
|
210
|
-
|
211
|
-
assert_equal([msgctxt, msgid, msgid_plural],
|
212
|
-
split_msgid("#{msgctxt}\004#{msgid}\000#{msgid_plural}"))
|
213
|
-
end
|
214
|
-
|
215
|
-
def test_existed_msgctxt_only
|
216
|
-
msgctxt = "msgctxt"
|
217
|
-
msgid = "msgid"
|
218
|
-
|
219
|
-
assert_equal([msgctxt, msgid, nil],
|
220
|
-
split_msgid("#{msgctxt}\004#{msgid}"))
|
221
|
-
end
|
222
|
-
|
223
|
-
def test_existed_msgid_plural_only
|
224
|
-
msgid = "msgid"
|
225
|
-
msgid_plural = "msgid_plural"
|
226
|
-
|
227
|
-
assert_equal([nil, msgid, msgid_plural],
|
228
|
-
split_msgid("#{msgid}\000#{msgid_plural}"))
|
229
|
-
end
|
230
|
-
|
231
|
-
def test_not_existed
|
232
|
-
msgid = "msgid"
|
233
|
-
|
234
|
-
assert_equal([nil, msgid, nil], split_msgid(msgid))
|
235
|
-
end
|
236
|
-
|
237
|
-
def test_empty_msgid
|
238
|
-
msgid = ""
|
239
|
-
|
240
|
-
assert_equal([nil, msgid, nil], split_msgid(msgid))
|
241
|
-
end
|
242
|
-
|
243
|
-
def test_last_symbol_msgid
|
244
|
-
msgid = :last
|
245
|
-
|
246
|
-
assert_equal([nil, msgid, nil], split_msgid(msgid))
|
247
|
-
end
|
248
|
-
|
249
|
-
private
|
250
|
-
def split_msgid(msgid)
|
251
|
-
po_data = GetText::Tools::MsgMerge::PoData.new
|
252
|
-
po_data.send(:split_msgid, msgid)
|
253
|
-
end
|
254
|
-
end
|
255
|
-
|
256
|
-
class TestParseComment < self
|
257
|
-
def setup
|
258
|
-
@po_data = GetText::Tools::MsgMerge::PoData.new
|
259
|
-
@entry = @po_data.send(:generate_entry, "test")
|
260
|
-
end
|
261
|
-
|
262
|
-
def test_translator_comment
|
263
|
-
comment = "# translator comment"
|
264
|
-
parsed_comment = parse_comment(comment).translator_comment
|
265
|
-
assert_equal("translator comment\n", parsed_comment)
|
266
|
-
end
|
267
|
-
|
268
|
-
def test_extracted_comment
|
269
|
-
comment = "#. extracted comment"
|
270
|
-
parsed_comment = parse_comment(comment).extracted_comment
|
271
|
-
assert_equal("extracted comment\n", parsed_comment)
|
272
|
-
end
|
273
|
-
|
274
|
-
def test_references
|
275
|
-
comment = "#: reference.rb:10"
|
276
|
-
parsed_comment = parse_comment(comment).references
|
277
|
-
assert_equal(["reference.rb:10"], parsed_comment)
|
278
|
-
end
|
279
|
-
|
280
|
-
def test_flag
|
281
|
-
comment = "#, fuzzy"
|
282
|
-
parsed_comment = parse_comment(comment).flag
|
283
|
-
assert_equal("fuzzy\n", parsed_comment)
|
284
|
-
end
|
285
|
-
|
286
|
-
def test_previous
|
287
|
-
comment = "#| msgid the previous msgid"
|
288
|
-
parsed_comment = parse_comment(comment).previous
|
289
|
-
assert_equal("msgid the previous msgid\n", parsed_comment)
|
290
|
-
end
|
291
|
-
|
292
|
-
private
|
293
|
-
def parse_comment(comment)
|
294
|
-
@po_data.send(:parse_comment, comment, @entry)
|
295
|
-
end
|
296
|
-
end
|
297
|
-
|
298
24
|
class TestMerger < self
|
299
25
|
def setup
|
300
26
|
@merger = GetText::Tools::MsgMerge::Merger.new
|
301
|
-
@po_data = GetText::Tools::MsgMerge::PoData.new
|
302
27
|
@po = GetText::PO.new
|
303
28
|
@pot = GetText::PO.new
|
304
29
|
end
|
@@ -521,7 +246,7 @@ EOC
|
|
521
246
|
def generate_entry(options)
|
522
247
|
msgctxt = options[:msgctxt]
|
523
248
|
msgid_plural = options[:msgid_plural]
|
524
|
-
type =
|
249
|
+
type = detect_entry_type(msgctxt, msgid_plural)
|
525
250
|
|
526
251
|
entry = GetText::POEntry.new(type)
|
527
252
|
entry.translator_comment = options[:translator_comment]
|
@@ -536,6 +261,22 @@ EOC
|
|
536
261
|
entry.comment = options[:comment]
|
537
262
|
entry
|
538
263
|
end
|
264
|
+
|
265
|
+
def detect_entry_type(msgctxt, msgid_plural)
|
266
|
+
if msgctxt.nil?
|
267
|
+
if msgid_plural.nil?
|
268
|
+
:normal
|
269
|
+
else
|
270
|
+
:plural
|
271
|
+
end
|
272
|
+
else
|
273
|
+
if msgid_plural.nil?
|
274
|
+
:msgctxt
|
275
|
+
else
|
276
|
+
:msgctxt_plural
|
277
|
+
end
|
278
|
+
end
|
279
|
+
end
|
539
280
|
end
|
540
281
|
|
541
282
|
class TestMerge < self
|
data/test/tools/test_po.rb
CHANGED
@@ -18,7 +18,7 @@
|
|
18
18
|
# You should have received a copy of the GNU Lesser General Public License
|
19
19
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
20
20
|
|
21
|
-
require "gettext/
|
21
|
+
require "gettext/po"
|
22
22
|
|
23
23
|
class TestPO < Test::Unit::TestCase
|
24
24
|
def setup
|
data/test/tools/test_xgettext.rb
CHANGED
@@ -43,24 +43,20 @@ class TestToolsXGetText < Test::Unit::TestCase
|
|
43
43
|
FileUtils.mkdir_p(File.dirname(@rhtml_file_path))
|
44
44
|
end
|
45
45
|
|
46
|
-
|
46
|
+
private
|
47
|
+
def generate(ruby_source, *command_line_options)
|
47
48
|
File.open(@rb_file_path, "w") do |rb_file|
|
48
|
-
rb_file.puts(
|
49
|
-
_("Hello")
|
50
|
-
EOR
|
49
|
+
rb_file.puts(ruby_source)
|
51
50
|
end
|
52
51
|
|
53
|
-
|
52
|
+
command_line = ["--output", @pot_file_path]
|
53
|
+
command_line += command_line_options
|
54
|
+
command_line += [@rb_file_path]
|
55
|
+
@xgettext.run(*command_line)
|
54
56
|
|
55
|
-
|
56
|
-
#{header}
|
57
|
-
#: ../lib/xgettext.rb:1
|
58
|
-
msgid "Hello"
|
59
|
-
msgstr ""
|
60
|
-
EOP
|
57
|
+
File.read(@pot_file_path)
|
61
58
|
end
|
62
59
|
|
63
|
-
private
|
64
60
|
def header(options=nil)
|
65
61
|
options ||= {}
|
66
62
|
package_name = options[:package_name] || "PACKAGE"
|
@@ -94,10 +90,35 @@ msgstr ""
|
|
94
90
|
EOH
|
95
91
|
end
|
96
92
|
|
93
|
+
class TestReference < self
|
94
|
+
def test_relative
|
95
|
+
pot_content = generate(<<-EOR)
|
96
|
+
_("Hello")
|
97
|
+
EOR
|
98
|
+
assert_equal(<<-EOP, pot_content)
|
99
|
+
#{header}
|
100
|
+
#: ../lib/xgettext.rb:1
|
101
|
+
msgid "Hello"
|
102
|
+
msgstr ""
|
103
|
+
EOP
|
104
|
+
end
|
105
|
+
|
106
|
+
def test_same_message
|
107
|
+
pot_content = generate(<<-EOR)
|
108
|
+
_("Hello")
|
109
|
+
_("Hello")
|
110
|
+
EOR
|
111
|
+
assert_equal(<<-EOP, pot_content)
|
112
|
+
#{header}
|
113
|
+
#: ../lib/xgettext.rb:1 ../lib/xgettext.rb:2
|
114
|
+
msgid "Hello"
|
115
|
+
msgstr ""
|
116
|
+
EOP
|
117
|
+
end
|
118
|
+
end
|
119
|
+
|
97
120
|
class TestEncoding < self
|
98
121
|
def test_different_encoding_from_current_locale
|
99
|
-
need_encoding
|
100
|
-
|
101
122
|
rhtml = <<-EOR
|
102
123
|
<%#-*- coding: sjis -*-%>
|
103
124
|
<html>
|
@@ -110,36 +131,34 @@ EOH
|
|
110
131
|
</html>
|
111
132
|
EOR
|
112
133
|
File.open(@rhtml_file_path, "w") do |rhtml_file|
|
113
|
-
rhtml_file.puts(encode(
|
134
|
+
rhtml_file.puts(rhtml.encode("sjis"))
|
114
135
|
end
|
115
136
|
|
116
137
|
@xgettext.run("--output", @pot_file_path, @rhtml_file_path)
|
117
138
|
|
118
139
|
encoding = "UTF-8"
|
119
140
|
pot_content = File.read(@pot_file_path)
|
120
|
-
|
141
|
+
pot_content.force_encoding(encoding)
|
121
142
|
expected_content = <<-EOP
|
122
143
|
#{header}
|
123
144
|
#: ../templates/xgettext.rhtml:7
|
124
145
|
msgid "わたし"
|
125
146
|
msgstr ""
|
126
147
|
EOP
|
127
|
-
expected_content = encode(
|
148
|
+
expected_content = expected_content.encode(encoding)
|
128
149
|
assert_equal(expected_content, pot_content)
|
129
150
|
end
|
130
151
|
|
131
152
|
def test_multiple_encodings
|
132
|
-
need_encoding
|
133
|
-
|
134
153
|
File.open(@rb_file_path, "w") do |rb_file|
|
135
|
-
rb_file.puts(encode(
|
154
|
+
rb_file.puts(<<-EOR.encode("euc-jp"))
|
136
155
|
# -*- coding: euc-jp -*-
|
137
156
|
_("こんにちは")
|
138
157
|
EOR
|
139
158
|
end
|
140
159
|
|
141
160
|
File.open(@rhtml_file_path, "w") do |rhtml_file|
|
142
|
-
rhtml_file.puts(encode(
|
161
|
+
rhtml_file.puts(<<-EOR.encode("cp932"))
|
143
162
|
<%# -*- coding: cp932 -*-%>
|
144
163
|
<h1><%= _("わたし") %></h1>
|
145
164
|
EOR
|
@@ -149,7 +168,7 @@ EOR
|
|
149
168
|
|
150
169
|
encoding = "UTF-8"
|
151
170
|
pot_content = File.read(@pot_file_path)
|
152
|
-
|
171
|
+
pot_content.force_encoding(encoding)
|
153
172
|
expected_content = <<-EOP
|
154
173
|
#{header}
|
155
174
|
#: ../lib/xgettext.rb:2
|
@@ -160,128 +179,180 @@ msgstr ""
|
|
160
179
|
msgid "わたし"
|
161
180
|
msgstr ""
|
162
181
|
EOP
|
163
|
-
expected_content = encode(
|
182
|
+
expected_content = expected_content.encode(encoding)
|
164
183
|
assert_equal(expected_content, pot_content)
|
165
184
|
end
|
166
185
|
end
|
167
186
|
|
168
187
|
class TestTranslatorComment < self
|
169
188
|
def test_n_
|
170
|
-
|
189
|
+
pot_content = generate(<<-RB, "--add-comments=TRANSLATORS:")
|
171
190
|
n_members = 1
|
172
191
|
# TRANSLATORS: Use this message as test
|
173
192
|
n_("I will go!",
|
174
193
|
"We will go!",
|
175
194
|
n_members)
|
176
|
-
|
177
|
-
_("No comment")
|
178
195
|
RB
|
179
|
-
File.open(@rb_file_path, "w") do |rb_file|
|
180
|
-
rb_file.puts(rb)
|
181
|
-
end
|
182
|
-
|
183
|
-
@xgettext.run("--output", @pot_file_path, @rb_file_path)
|
184
|
-
|
185
|
-
encoding = "UTF-8"
|
186
|
-
pot_content = File.read(@pot_file_path)
|
187
|
-
set_encoding(pot_content, encoding)
|
188
196
|
expected_content = <<-POT
|
189
197
|
#{header}
|
190
|
-
#. Use this message as test
|
198
|
+
#. TRANSLATORS: Use this message as test
|
191
199
|
#: ../lib/xgettext.rb:3
|
192
200
|
msgid "I will go!"
|
193
201
|
msgid_plural "We will go!"
|
194
202
|
msgstr[0] ""
|
195
203
|
msgstr[1] ""
|
196
|
-
|
197
|
-
#: ../lib/xgettext.rb:7
|
198
|
-
msgid "No comment"
|
199
|
-
msgstr ""
|
200
204
|
POT
|
201
|
-
expected_content = encode(expected_content, encoding)
|
202
205
|
assert_equal(expected_content, pot_content)
|
203
206
|
end
|
207
|
+
|
208
|
+
def test_no_add_comments
|
209
|
+
pot_content = generate(<<-RUBY)
|
210
|
+
# TRNALSTORS: There is no translator's tag
|
211
|
+
_("Message")
|
212
|
+
RUBY
|
213
|
+
|
214
|
+
assert_equal(<<-POT, pot_content)
|
215
|
+
#{header}
|
216
|
+
#: ../lib/xgettext.rb:2
|
217
|
+
msgid "Message"
|
218
|
+
msgstr ""
|
219
|
+
POT
|
220
|
+
end
|
221
|
+
|
222
|
+
def test_add_comments_without_tag
|
223
|
+
pot_content = generate(<<-RUBY, "--add-comments")
|
224
|
+
# There is no translator's tag but all
|
225
|
+
# comments are included.
|
226
|
+
_("Message")
|
227
|
+
RUBY
|
228
|
+
|
229
|
+
assert_equal(<<-POT, pot_content)
|
230
|
+
#{header}
|
231
|
+
#. There is no translator's tag but all
|
232
|
+
#. comments are included.
|
233
|
+
#: ../lib/xgettext.rb:3
|
234
|
+
msgid "Message"
|
235
|
+
msgstr ""
|
236
|
+
POT
|
237
|
+
end
|
238
|
+
|
239
|
+
def test_not_started_with_tag
|
240
|
+
pot_content = generate(<<-RUBY, "--add-comments=TRANSLATORS:")
|
241
|
+
# This comment isn't started with "TRANSLATORS:" tag
|
242
|
+
_("Message")
|
243
|
+
RUBY
|
244
|
+
|
245
|
+
assert_equal(<<-POT, pot_content)
|
246
|
+
#{header}
|
247
|
+
#: ../lib/xgettext.rb:2
|
248
|
+
msgid "Message"
|
249
|
+
msgstr ""
|
250
|
+
POT
|
251
|
+
end
|
252
|
+
|
253
|
+
def test_not_first_line_is_started_with_tag
|
254
|
+
pot_content = generate(<<-RUBY, "--add-comments=TRANSLATORS:")
|
255
|
+
# The first line.
|
256
|
+
# TRANSLATORS: The second line.
|
257
|
+
# The third line.
|
258
|
+
_("Message")
|
259
|
+
RUBY
|
260
|
+
|
261
|
+
assert_equal(<<-POT, pot_content)
|
262
|
+
#{header}
|
263
|
+
#. TRANSLATORS: The second line.
|
264
|
+
#. The third line.
|
265
|
+
#: ../lib/xgettext.rb:4
|
266
|
+
msgid "Message"
|
267
|
+
msgstr ""
|
268
|
+
POT
|
269
|
+
end
|
270
|
+
|
271
|
+
def test_indented
|
272
|
+
pot_content = generate(<<-RUBY, "--add-comments")
|
273
|
+
# The following lines are indented
|
274
|
+
# * indented1
|
275
|
+
# * indented2
|
276
|
+
_("Message")
|
277
|
+
RUBY
|
278
|
+
|
279
|
+
assert_equal(<<-POT, pot_content)
|
280
|
+
#{header}
|
281
|
+
#. The following lines are indented
|
282
|
+
#. * indented1
|
283
|
+
#. * indented2
|
284
|
+
#: ../lib/xgettext.rb:4
|
285
|
+
msgid "Message"
|
286
|
+
msgstr ""
|
287
|
+
POT
|
288
|
+
end
|
289
|
+
|
290
|
+
def test_multiple
|
291
|
+
pot_content = generate(<<-RUBY, "--add-comments=TRANSLATORS:")
|
292
|
+
# TRANSLATORS: The first comment
|
293
|
+
_("Message")
|
294
|
+
|
295
|
+
# TRANSLATORS: The second comment
|
296
|
+
_("Message")
|
297
|
+
RUBY
|
298
|
+
|
299
|
+
assert_equal(<<-POT, pot_content)
|
300
|
+
#{header}
|
301
|
+
#. TRANSLATORS: The first comment
|
302
|
+
#. TRANSLATORS: The second comment
|
303
|
+
#: ../lib/xgettext.rb:2 ../lib/xgettext.rb:5
|
304
|
+
msgid "Message"
|
305
|
+
msgstr ""
|
306
|
+
POT
|
307
|
+
end
|
204
308
|
end
|
205
309
|
|
206
310
|
class TestCommandLineOption < self
|
207
311
|
def test_package_name
|
208
|
-
File.open(@rb_file_path, "w") do |rb_file|
|
209
|
-
rb_file.puts(":hello")
|
210
|
-
end
|
211
|
-
|
212
312
|
package_name = "test-package"
|
213
|
-
|
214
|
-
"--package-name", package_name,
|
215
|
-
@rb_file_path)
|
313
|
+
pot_content = generate(":hello", "--package-name", package_name)
|
216
314
|
|
217
315
|
options = {:package_name => package_name}
|
218
316
|
expected_header = "#{header(options)}\n"
|
219
|
-
assert_equal(expected_header,
|
317
|
+
assert_equal(expected_header, pot_content)
|
220
318
|
end
|
221
319
|
|
222
320
|
def test_package_version
|
223
|
-
File.open(@rb_file_path, "w") do |rb_file|
|
224
|
-
rb_file.puts(":hello")
|
225
|
-
end
|
226
|
-
|
227
321
|
package_version = "1.2.3"
|
228
|
-
|
229
|
-
"--package-version", package_version,
|
230
|
-
@rb_file_path)
|
322
|
+
pot_content = generate(":hello", "--package-version", package_version)
|
231
323
|
|
232
324
|
options = {:package_version => package_version}
|
233
325
|
expected_header = "#{header(options)}\n"
|
234
|
-
assert_equal(expected_header,
|
326
|
+
assert_equal(expected_header, pot_content)
|
235
327
|
end
|
236
328
|
|
237
329
|
def test_report_msgid_bugs_to
|
238
|
-
File.open(@rb_file_path, "w") do |rb_file|
|
239
|
-
rb_file.puts(":hello")
|
240
|
-
end
|
241
|
-
|
242
330
|
msgid_bugs_address = "me@example.com"
|
243
|
-
|
244
|
-
|
245
|
-
@rb_file_path)
|
331
|
+
pot_content = generate(":hello",
|
332
|
+
"--msgid-bugs-address", msgid_bugs_address)
|
246
333
|
|
247
334
|
options = {:msgid_bugs_address => msgid_bugs_address}
|
248
335
|
expected_header = "#{header(options)}\n"
|
249
|
-
assert_equal(expected_header,
|
336
|
+
assert_equal(expected_header, pot_content)
|
250
337
|
end
|
251
338
|
|
252
339
|
def test_copyright_holder
|
253
|
-
File.open(@rb_file_path, "w") do |rb_file|
|
254
|
-
rb_file.puts(":hello")
|
255
|
-
end
|
256
|
-
|
257
340
|
copyright_holder = "me"
|
258
|
-
|
259
|
-
"--copyright-holder", copyright_holder,
|
260
|
-
@rb_file_path)
|
341
|
+
pot_content = generate(":hello", "--copyright-holder", copyright_holder)
|
261
342
|
|
262
343
|
options = {:copyright_holder => copyright_holder}
|
263
344
|
expected_header = "#{header(options)}\n"
|
264
|
-
assert_equal(expected_header,
|
345
|
+
assert_equal(expected_header, pot_content)
|
265
346
|
end
|
266
347
|
|
267
348
|
def test_to_code
|
268
|
-
|
269
|
-
|
270
|
-
File.open(@rb_file_path, "w") do |rb_file|
|
271
|
-
rb_file.puts(<<-EOR)
|
349
|
+
output_encoding = "EUC-JP"
|
350
|
+
pot_content = generate(<<-EOR, "--output-encoding", output_encoding)
|
272
351
|
# -*- coding: utf-8 -*-
|
273
352
|
|
274
353
|
_("わたし")
|
275
354
|
EOR
|
276
|
-
|
277
|
-
|
278
|
-
output_encoding = "EUC-JP"
|
279
|
-
@xgettext.run("--output", @pot_file_path,
|
280
|
-
"--output-encoding", output_encoding,
|
281
|
-
@rb_file_path)
|
282
|
-
|
283
|
-
actual_pot = File.read(@pot_file_path)
|
284
|
-
set_encoding(actual_pot, output_encoding)
|
355
|
+
pot_content.force_encoding(output_encoding)
|
285
356
|
|
286
357
|
options = {:to_code => output_encoding}
|
287
358
|
expected_pot = <<-EOP
|
@@ -290,9 +361,9 @@ EOR
|
|
290
361
|
msgid "わたし"
|
291
362
|
msgstr ""
|
292
363
|
EOP
|
293
|
-
expected_pot = encode(
|
364
|
+
expected_pot = expected_pot.encode(output_encoding)
|
294
365
|
|
295
|
-
assert_equal(expected_pot,
|
366
|
+
assert_equal(expected_pot, pot_content)
|
296
367
|
end
|
297
368
|
end
|
298
369
|
|
@@ -313,6 +384,22 @@ EOP
|
|
313
384
|
xgettext.parse(["index.html"])
|
314
385
|
end
|
315
386
|
|
387
|
+
def test_old_style_parser
|
388
|
+
parser = Object.new
|
389
|
+
def parser.target?(path)
|
390
|
+
true
|
391
|
+
end
|
392
|
+
def parser.parse(path)
|
393
|
+
# It doesn't receive options argument as the second argument
|
394
|
+
[["Message"]]
|
395
|
+
end
|
396
|
+
|
397
|
+
GetText::Tools::XGetText.add_parser(parser)
|
398
|
+
xgettext = GetText::Tools::XGetText.new
|
399
|
+
assert_equal([POEntry.new_from_ary(["Message"])],
|
400
|
+
xgettext.parse(["index.html"]))
|
401
|
+
end
|
402
|
+
|
316
403
|
def test_instance_method
|
317
404
|
@xgettext.add_parser(mock_html_parser)
|
318
405
|
@xgettext.parse(["index.html"])
|
@@ -330,60 +417,4 @@ EOP
|
|
330
417
|
html_parser
|
331
418
|
end
|
332
419
|
end
|
333
|
-
|
334
|
-
class TestRGetText < self
|
335
|
-
def setup
|
336
|
-
@now = Time.now
|
337
|
-
@warning_message = "Warning: This method is obsolete. " +
|
338
|
-
"Please use GetText::Tools::XGetText.run."
|
339
|
-
end
|
340
|
-
|
341
|
-
def test_warning
|
342
|
-
mock(GetText::RGetText).warn(@warning_message) {}
|
343
|
-
|
344
|
-
File.open(@rb_file_path, "w") do |rb_file|
|
345
|
-
end
|
346
|
-
GetText::RGetText.run(@rb_file_path, @pot_file_path)
|
347
|
-
end
|
348
|
-
|
349
|
-
class TestArguments < self
|
350
|
-
def test_input_file_and_output_file
|
351
|
-
stub(GetText::RGetText).warn(@warning_message) {}
|
352
|
-
|
353
|
-
File.open(@rb_file_path, "w") do |rb_file|
|
354
|
-
rb_file.puts(<<-EOR)
|
355
|
-
_("Hello")
|
356
|
-
EOR
|
357
|
-
end
|
358
|
-
GetText::RGetText.run(@rb_file_path, @pot_file_path)
|
359
|
-
|
360
|
-
assert_equal(expected_pot_content, File.read(@pot_file_path))
|
361
|
-
end
|
362
|
-
|
363
|
-
def test_argv
|
364
|
-
stub(GetText::RGetText).warn(@warning_message) {}
|
365
|
-
|
366
|
-
File.open(@rb_file_path, "w") do |rb_file|
|
367
|
-
rb_file.puts(<<-EOR)
|
368
|
-
_("Hello")
|
369
|
-
EOR
|
370
|
-
end
|
371
|
-
|
372
|
-
ARGV.replace([@rb_file_path, "--output", @pot_file_path])
|
373
|
-
GetText::RGetText.run
|
374
|
-
|
375
|
-
assert_equal(expected_pot_content, File.read(@pot_file_path))
|
376
|
-
end
|
377
|
-
|
378
|
-
private
|
379
|
-
def expected_pot_content
|
380
|
-
<<-EOP
|
381
|
-
#{header}
|
382
|
-
#: ../lib/xgettext.rb:1
|
383
|
-
msgid "Hello"
|
384
|
-
msgstr ""
|
385
|
-
EOP
|
386
|
-
end
|
387
|
-
end
|
388
|
-
end
|
389
420
|
end
|