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
@@ -0,0 +1,32 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
#
|
3
|
+
# Copyright (C) 2013 Kouhei Sutou <kou@clear-code.com>
|
4
|
+
#
|
5
|
+
# License: Ruby's or LGPL
|
6
|
+
#
|
7
|
+
# This library is free software: you can redistribute it and/or modify
|
8
|
+
# it under the terms of the GNU Lesser General Public License as published by
|
9
|
+
# the Free Software Foundation, either version 3 of the License, or
|
10
|
+
# (at your option) any later version.
|
11
|
+
#
|
12
|
+
# This library is distributed in the hope that it will be useful,
|
13
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
14
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
15
|
+
# GNU Lesser General Public License for more details.
|
16
|
+
#
|
17
|
+
# You should have received a copy of the GNU Lesser General Public License
|
18
|
+
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
19
|
+
|
20
|
+
module Fixtures
|
21
|
+
module Method_
|
22
|
+
class MultipleMessagesInSameLine
|
23
|
+
include GetText
|
24
|
+
|
25
|
+
bindtextdomain("_", :path => GetTextTestUtils.locale_path)
|
26
|
+
|
27
|
+
def message
|
28
|
+
_("multiple") + " messages " + _("in same line")
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
#
|
3
|
+
# Copyright (C) 2013 Kouhei Sutou <kou@clear-code.com>
|
4
|
+
#
|
5
|
+
# License: Ruby's or LGPL
|
6
|
+
#
|
7
|
+
# This library is free software: you can redistribute it and/or modify
|
8
|
+
# it under the terms of the GNU Lesser General Public License as published by
|
9
|
+
# the Free Software Foundation, either version 3 of the License, or
|
10
|
+
# (at your option) any later version.
|
11
|
+
#
|
12
|
+
# This library is distributed in the hope that it will be useful,
|
13
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
14
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
15
|
+
# GNU Lesser General Public License for more details.
|
16
|
+
#
|
17
|
+
# You should have received a copy of the GNU Lesser General Public License
|
18
|
+
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
19
|
+
|
20
|
+
module Fixtures
|
21
|
+
module Method_
|
22
|
+
class MultipleSameMessages
|
23
|
+
include GetText
|
24
|
+
|
25
|
+
bindtextdomain("_", :path => GetTextTestUtils.locale_path)
|
26
|
+
|
27
|
+
def message
|
28
|
+
_("multiple same messages")
|
29
|
+
end
|
30
|
+
|
31
|
+
def same_message
|
32
|
+
_("multiple same messages")
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
@@ -1,6 +1,6 @@
|
|
1
1
|
# -*- coding: utf-8 -*-
|
2
2
|
#
|
3
|
-
# Copyright (C)
|
3
|
+
# Copyright (C) 2013 Kouhei Sutou <kou@clear-code.com>
|
4
4
|
#
|
5
5
|
# License: Ruby's or LGPL
|
6
6
|
#
|
@@ -17,10 +17,16 @@
|
|
17
17
|
# You should have received a copy of the GNU Lesser General Public License
|
18
18
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
19
19
|
|
20
|
-
|
20
|
+
module Fixtures
|
21
|
+
module Method_
|
22
|
+
class OneNewLine
|
23
|
+
include GetText
|
21
24
|
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
25
|
+
bindtextdomain("_", :path => GetTextTestUtils.locale_path)
|
26
|
+
|
27
|
+
def message
|
28
|
+
_("one new line\n")
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
26
32
|
end
|
data/test/fixtures/non_ascii.rb
CHANGED
data/test/fixtures/simple.rb
CHANGED
data/test/gettext-test-utils.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# -*- coding: utf-8 -*-
|
2
2
|
#
|
3
|
-
# Copyright (C) 2012 Kouhei Sutou <kou@clear-code.com>
|
3
|
+
# Copyright (C) 2012-2013 Kouhei Sutou <kou@clear-code.com>
|
4
4
|
#
|
5
5
|
# License: Ruby's or LGPL
|
6
6
|
#
|
@@ -22,10 +22,6 @@ require "tmpdir"
|
|
22
22
|
require "tempfile"
|
23
23
|
require "time"
|
24
24
|
|
25
|
-
unless String.method_defined?(:encode)
|
26
|
-
require "iconv"
|
27
|
-
end
|
28
|
-
|
29
25
|
require "gettext"
|
30
26
|
|
31
27
|
module GetTextTestUtils
|
@@ -45,23 +41,4 @@ module GetTextTestUtils
|
|
45
41
|
def teardown_tmpdir
|
46
42
|
FileUtils.rm_rf(@tmpdir, :secure => true) if @tmpdir
|
47
43
|
end
|
48
|
-
|
49
|
-
def need_encoding
|
50
|
-
unless defined?(Encoding)
|
51
|
-
omit("This test needs encoding.")
|
52
|
-
end
|
53
|
-
end
|
54
|
-
|
55
|
-
def set_encoding(string, encoding)
|
56
|
-
return unless string.respond_to?(:force_encoding)
|
57
|
-
string.force_encoding(encoding)
|
58
|
-
end
|
59
|
-
|
60
|
-
def encode(string, encoding)
|
61
|
-
if string.respond_to?(:encode)
|
62
|
-
string.encode(encoding)
|
63
|
-
else
|
64
|
-
Iconv.iconv(encoding, "UTF-8", string).join("")
|
65
|
-
end
|
66
|
-
end
|
67
44
|
end
|
data/test/po/ja/_.po
CHANGED
@@ -5,8 +5,8 @@
|
|
5
5
|
msgid ""
|
6
6
|
msgstr ""
|
7
7
|
"Project-Id-Version: PACKAGE VERSION\n"
|
8
|
-
"POT-Creation-Date:
|
9
|
-
"PO-Revision-Date:
|
8
|
+
"POT-Creation-Date: 2013-08-30 23:15+0900\n"
|
9
|
+
"PO-Revision-Date: 2013-08-30 23:17+0900\n"
|
10
10
|
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
11
11
|
"Language-Team: LANGUAGE <LL@li.org>\n"
|
12
12
|
"MIME-Version: 1.0\n"
|
@@ -19,12 +19,18 @@ msgid "aaa"
|
|
19
19
|
msgstr "AAA"
|
20
20
|
|
21
21
|
#: ../fixtures/_.rb:34
|
22
|
-
msgid "
|
23
|
-
|
22
|
+
msgid ""
|
23
|
+
"aaa\n"
|
24
|
+
msgstr ""
|
25
|
+
"AAA\n"
|
24
26
|
|
25
27
|
#: ../fixtures/_.rb:38
|
26
|
-
msgid "
|
27
|
-
|
28
|
+
msgid ""
|
29
|
+
"bbb\n"
|
30
|
+
"ccc"
|
31
|
+
msgstr ""
|
32
|
+
"BBB\n"
|
33
|
+
"CCC"
|
28
34
|
|
29
35
|
#: ../fixtures/_.rb:42
|
30
36
|
msgid ""
|
@@ -69,7 +75,9 @@ msgid "lllmmm"
|
|
69
75
|
msgstr ""
|
70
76
|
|
71
77
|
#: ../fixtures/_.rb:84
|
72
|
-
msgid "
|
78
|
+
msgid ""
|
79
|
+
"nnn\n"
|
80
|
+
"ooo"
|
73
81
|
msgstr ""
|
74
82
|
|
75
83
|
#: ../fixtures/_.rb:88 ../fixtures/_.rb:92
|
@@ -77,7 +85,7 @@ msgid "#"
|
|
77
85
|
msgstr ""
|
78
86
|
|
79
87
|
#: ../fixtures/_.rb:96
|
80
|
-
msgid "
|
88
|
+
msgid "\taaa"
|
81
89
|
msgstr ""
|
82
90
|
|
83
91
|
#: ../fixtures/_.rb:100
|
@@ -86,29 +94,71 @@ msgid ""
|
|
86
94
|
"Here document2\n"
|
87
95
|
msgstr ""
|
88
96
|
|
89
|
-
#. This is a proper name. See the gettext
|
97
|
+
#. TRANSLATORS: This is a proper name. See the gettext
|
90
98
|
#. manual, section Names. Note this is actually a non-ASCII
|
91
99
|
#. name: The first name is (with Unicode escapes)
|
92
100
|
#. "Fran\u00e7ois" or (with HTML entities) "François".
|
93
101
|
#. Pronunciation is like "fraa-swa pee-nar".
|
94
102
|
#. This is an example from GNU gettext documentation.
|
95
|
-
#: ../fixtures/_.rb:
|
103
|
+
#: ../fixtures/_.rb:120
|
96
104
|
msgid "Francois Pinard"
|
97
105
|
msgstr ""
|
98
106
|
|
99
|
-
#: ../fixtures/_.rb:
|
107
|
+
#: ../fixtures/_.rb:123
|
100
108
|
msgid "No TRANSLATORS comment"
|
101
109
|
msgstr ""
|
102
110
|
|
103
|
-
#: ../fixtures/_.rb:
|
111
|
+
#: ../fixtures/_.rb:128
|
104
112
|
msgid "self explaining"
|
105
113
|
msgstr ""
|
106
114
|
|
107
|
-
#: ../fixtures/_.rb:
|
115
|
+
#: ../fixtures/_.rb:132
|
108
116
|
msgid "This is a # including string."
|
109
117
|
msgstr ""
|
110
118
|
|
119
|
+
#: ../fixtures/_/double_quote_in_double_quote.rb:28
|
120
|
+
msgid "double \"quote\" in double quote"
|
121
|
+
msgstr ""
|
122
|
+
|
123
|
+
#: ../fixtures/_/double_quote_in_single_quote.rb:28
|
124
|
+
msgid "double \"quote\" in single quote"
|
125
|
+
msgstr ""
|
126
|
+
|
127
|
+
#: ../fixtures/_/literal_concatenation_with_continuation_line.rb:28
|
128
|
+
msgid "literal concatenation with continuation line"
|
129
|
+
msgstr ""
|
130
|
+
|
131
|
+
#: ../fixtures/_/middle_new_line.rb:28
|
132
|
+
msgid ""
|
133
|
+
"middle\n"
|
134
|
+
"new line"
|
135
|
+
msgstr ""
|
136
|
+
|
137
|
+
#: ../fixtures/_/multiple_lines_literal.rb:28
|
138
|
+
msgid ""
|
139
|
+
"multiple\n"
|
140
|
+
"lines\n"
|
141
|
+
"literal\n"
|
142
|
+
msgstr ""
|
143
|
+
|
144
|
+
#: ../fixtures/_/multiple_messages_in_same_line.rb:28
|
145
|
+
msgid "in same line"
|
146
|
+
msgstr ""
|
147
|
+
|
148
|
+
#: ../fixtures/_/multiple_messages_in_same_line.rb:28
|
149
|
+
msgid "multiple"
|
150
|
+
msgstr ""
|
151
|
+
|
152
|
+
#: ../fixtures/_/multiple_same_messages.rb:28
|
153
|
+
#: ../fixtures/_/multiple_same_messages.rb:32
|
154
|
+
msgid "multiple same messages"
|
155
|
+
msgstr ""
|
156
|
+
|
111
157
|
#: ../fixtures/_/one_line.rb:28
|
112
158
|
msgid "one line"
|
113
159
|
msgstr "ONE LINE"
|
114
160
|
|
161
|
+
#: ../fixtures/_/one_new_line.rb:28
|
162
|
+
msgid ""
|
163
|
+
"one new line\n"
|
164
|
+
msgstr ""
|
data/test/po/ja/non_ascii.po
CHANGED
@@ -3,11 +3,10 @@
|
|
3
3
|
# This file is distributed under the same license as the PACKAGE package.
|
4
4
|
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
5
5
|
#
|
6
|
-
#, fuzzy
|
7
6
|
msgid ""
|
8
7
|
msgstr ""
|
9
8
|
"Project-Id-Version: PACKAGE VERSION\n"
|
10
|
-
"POT-Creation-Date:
|
9
|
+
"POT-Creation-Date: 2013-08-30 22:00+0900\n"
|
11
10
|
"PO-Revision-Date: 2012-03-31 19:22+0900\n"
|
12
11
|
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
13
12
|
"Language-Team: LANGUAGE <LL@li.org>\n"
|
@@ -16,6 +15,6 @@ msgstr ""
|
|
16
15
|
"Content-Transfer-Encoding: 8bit\n"
|
17
16
|
"Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
|
18
17
|
|
19
|
-
#:
|
18
|
+
#: ../fixtures/non_ascii.rb:10
|
20
19
|
msgid "こんにちは"
|
21
20
|
msgstr "Hello in Japanese"
|
data/test/po/ja/untranslated.po
CHANGED
@@ -7,7 +7,7 @@ msgid ""
|
|
7
7
|
msgstr ""
|
8
8
|
"Project-Id-Version: gettext 2.3.1\n"
|
9
9
|
"Report-Msgid-Bugs-To: \n"
|
10
|
-
"POT-Creation-Date:
|
10
|
+
"POT-Creation-Date: 2013-08-30 22:00+0900\n"
|
11
11
|
"PO-Revision-Date: 2012-09-11 11:11+0900\n"
|
12
12
|
"Last-Translator: Haruka Yoshihara <yoshihara@clear-code.com>\n"
|
13
13
|
"Language-Team: Japanese\n"
|
data/test/test_class_info.rb
CHANGED
data/test/test_gettext.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# -*- coding: utf-8 -*-
|
2
2
|
#
|
3
|
-
# Copyright (C) 2012 Kouhei Sutou <kou@clear-code.com>
|
3
|
+
# Copyright (C) 2012-2013 Kouhei Sutou <kou@clear-code.com>
|
4
4
|
# Copyright (C) 2009-2010 Masao Mutoh
|
5
5
|
# Copyright (C) 2009 OZAWA Sakuro <github@2238club.org>
|
6
6
|
# Copyright (C) 2009 grosser <grosser.michael@gmail.com>
|
@@ -20,13 +20,13 @@
|
|
20
20
|
# You should have received a copy of the GNU Lesser General Public License
|
21
21
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
22
22
|
|
23
|
-
require 'fixtures/simple
|
24
|
-
require 'fixtures/_
|
23
|
+
require 'fixtures/simple'
|
24
|
+
require 'fixtures/_'
|
25
25
|
require "fixtures/_/one_line"
|
26
|
-
require 'fixtures/s_
|
27
|
-
require 'fixtures/ns_
|
28
|
-
require 'fixtures/p_
|
29
|
-
require 'fixtures/np_
|
26
|
+
require 'fixtures/s_'
|
27
|
+
require 'fixtures/ns_'
|
28
|
+
require 'fixtures/p_'
|
29
|
+
require 'fixtures/np_'
|
30
30
|
|
31
31
|
class TestGetText < Test::Unit::TestCase
|
32
32
|
|
@@ -236,16 +236,16 @@ DDD
|
|
236
236
|
assert_equal("fr_first", n_("first", "second", 0))
|
237
237
|
assert_equal("fr_first", n_("first", "second", 1))
|
238
238
|
assert_equal("fr_first", n_("first", "second", 2))
|
239
|
-
|
239
|
+
set_locale("da") # Invalid Plural-Forms.
|
240
240
|
assert_equal("da_first", n_("first", "second", 0))
|
241
241
|
assert_equal("da_first", n_("first", "second", 1))
|
242
242
|
assert_equal("da_first", n_("first", "second", 2))
|
243
|
-
|
243
|
+
set_locale("la") # wrong number of msgstr.
|
244
244
|
assert_equal("la_first", n_("first", "second", 0))
|
245
245
|
assert_equal("la_first", n_("first", "second", 1))
|
246
246
|
assert_equal("la_first", n_("first", "second", 2))
|
247
247
|
|
248
|
-
|
248
|
+
set_locale("li") # Invalid Plural-Forms: nplurals is set, but wrong plural=.
|
249
249
|
assert_equal("li_first", n_("first", "second", 0))
|
250
250
|
assert_equal("li_first", n_("first", "second", 1))
|
251
251
|
assert_equal("li_first", n_("first", "second", 2))
|
@@ -292,7 +292,7 @@ DDD
|
|
292
292
|
assert_equal(["one", "two"], Nn_("one", "two"))
|
293
293
|
end
|
294
294
|
|
295
|
-
def
|
295
|
+
def test_set_locale
|
296
296
|
bindtextdomain("test1", :path => "locale")
|
297
297
|
assert_equal("japanese", _("language"))
|
298
298
|
set_locale("en")
|
data/test/test_mo.rb
CHANGED
data/test/test_parser.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
|
-
#
|
1
|
+
# -*- coding: utf-8 -*-
|
2
2
|
#
|
3
3
|
# Copyright (C) 2012 Haruka Yoshihara <yoshihara@clear-code.com>
|
4
|
-
# Copyright (C) 2012 Kouhei Sutou <kou@clear-code.com>
|
4
|
+
# Copyright (C) 2012-2013 Kouhei Sutou <kou@clear-code.com>
|
5
5
|
# Copyright (C) 2010 masone (Christian Felder) <ema@rh-productions.ch>
|
6
6
|
# Copyright (C) 2009 Vladimir Dobriakov <vladimir@geekq.net>
|
7
7
|
# Copyright (C) 2009-2010 Masao Mutoh
|
@@ -22,127 +22,124 @@
|
|
22
22
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
23
23
|
|
24
24
|
require "tempfile"
|
25
|
-
require
|
26
|
-
require
|
27
|
-
require
|
25
|
+
require "gettext/tools/parser/ruby"
|
26
|
+
require "gettext/tools/parser/glade"
|
27
|
+
require "gettext/tools/parser/erb"
|
28
28
|
|
29
|
-
require
|
29
|
+
require "gettext/tools/xgettext"
|
30
30
|
|
31
31
|
class TestGetTextParser < Test::Unit::TestCase
|
32
32
|
def setup
|
33
33
|
@xgettext = GetText::Tools::XGetText.new
|
34
34
|
end
|
35
35
|
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
assert_target "\\taaa", ['fixtures/_.rb:96']
|
53
|
-
assert_target "Here document1\\nHere document2\\n", ['fixtures/_.rb:100']
|
54
|
-
assert_target "Francois Pinard", ['fixtures/_.rb:120'] do |t|
|
55
|
-
assert_match(/proper name/, t.extracted_comment)
|
56
|
-
assert_match(/Pronunciation/, t.extracted_comment)
|
57
|
-
end
|
36
|
+
class TestRuby < self
|
37
|
+
def test__
|
38
|
+
@xgettext.parse_options[:comment_tag] = "TRANSLATORS:"
|
39
|
+
@ary = @xgettext.parse(['fixtures/_.rb'])
|
40
|
+
|
41
|
+
assert_target 'jjj', ['fixtures/_.rb:71']
|
42
|
+
assert_target 'kkk', ['fixtures/_.rb:72']
|
43
|
+
assert_target 'lllmmm', ['fixtures/_.rb:76']
|
44
|
+
assert_target "nnn\nooo", ['fixtures/_.rb:84']
|
45
|
+
assert_target "\#", ['fixtures/_.rb:88', 'fixtures/_.rb:92']
|
46
|
+
assert_target "\\taaa", ['fixtures/_.rb:96']
|
47
|
+
assert_target "Here document1\nHere document2\n", ['fixtures/_.rb:100']
|
48
|
+
assert_target "Francois Pinard", ['fixtures/_.rb:120'] do |t|
|
49
|
+
assert_match(/proper name/, t.extracted_comment)
|
50
|
+
assert_match(/Pronunciation/, t.extracted_comment)
|
51
|
+
end
|
58
52
|
|
59
|
-
|
60
|
-
|
61
|
-
|
53
|
+
assert_target("No TRANSLATORS comment", ["fixtures/_.rb:123"]) do |t|
|
54
|
+
assert_nil(t.comment)
|
55
|
+
end
|
62
56
|
|
63
|
-
|
64
|
-
|
65
|
-
|
57
|
+
assert_target "self explaining", ['fixtures/_.rb:128'] do |t|
|
58
|
+
assert_nil t.comment
|
59
|
+
end
|
66
60
|
|
67
|
-
|
61
|
+
assert_target "This is a # including string.", ["fixtures/_.rb:132"]
|
68
62
|
|
69
|
-
|
70
|
-
|
63
|
+
# TODO: assert_target "in_quote", ['fixtures/_.rb:118']
|
64
|
+
end
|
71
65
|
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
66
|
+
def test_N_
|
67
|
+
@ary = @xgettext.parse(['fixtures/N_.rb'])
|
68
|
+
|
69
|
+
assert_target 'aaa', ['fixtures/N_.rb:10']
|
70
|
+
assert_target "aaa\n", ['fixtures/N_.rb:14']
|
71
|
+
assert_target "bbb\nccc", ['fixtures/N_.rb:18']
|
72
|
+
assert_target "bbb\nccc\nddd\n", ['fixtures/N_.rb:22']
|
73
|
+
assert_target 'eee', ['fixtures/N_.rb:29', 'fixtures/N_.rb:33']
|
74
|
+
assert_target 'fff', ['fixtures/N_.rb:33']
|
75
|
+
assert_target 'ggghhhiii', ['fixtures/N_.rb:37']
|
76
|
+
assert_target 'a"b"c"', ['fixtures/N_.rb:43']
|
77
|
+
assert_target 'd"e"f"', ['fixtures/N_.rb:47']
|
78
|
+
assert_target 'jjj', ['fixtures/N_.rb:51']
|
79
|
+
assert_target 'kkk', ['fixtures/N_.rb:52']
|
80
|
+
assert_target 'lllmmm', ['fixtures/N_.rb:56']
|
81
|
+
assert_target "nnn\nooo", ['fixtures/N_.rb:64']
|
82
|
+
end
|
89
83
|
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
84
|
+
def test_n_
|
85
|
+
@xgettext.parse_options[:comment_tag] = "TRANSLATORS:"
|
86
|
+
@ary = @xgettext.parse(['fixtures/n_.rb'])
|
87
|
+
assert_plural_target "aaa", "aaa2", ['fixtures/n_.rb:29']
|
88
|
+
assert_plural_target "bbb\n", "ccc2\nccc2", ['fixtures/n_.rb:33']
|
89
|
+
assert_plural_target "ddd\nddd", "ddd2\nddd2", ['fixtures/n_.rb:37']
|
90
|
+
assert_plural_target "eee\neee\n", "eee2\neee2\n", ['fixtures/n_.rb:42']
|
91
|
+
assert_plural_target "ddd\neee\n", "ddd\neee2", ['fixtures/n_.rb:48']
|
92
|
+
assert_plural_target "fff", "fff2", ['fixtures/n_.rb:55', 'fixtures/n_.rb:59']
|
93
|
+
assert_plural_target "ggg", "ggg2", ['fixtures/n_.rb:59']
|
94
|
+
assert_plural_target "ggghhhiii", "jjjkkklll", ['fixtures/n_.rb:63']
|
95
|
+
assert_plural_target "a\"b\"c\"", "a\"b\"c\"2", ['fixtures/n_.rb:72']
|
96
|
+
assert_plural_target "mmmmmm", "mmm2mmm2", ['fixtures/n_.rb:80']
|
97
|
+
assert_plural_target "nnn", "nnn2", ['fixtures/n_.rb:81']
|
98
|
+
assert_plural_target "comment", "comments", ['fixtures/n_.rb:97'] do |t|
|
99
|
+
assert_equal "TRANSLATORS:please provide translations for all\n the plural forms!",
|
100
|
+
t.extracted_comment
|
101
|
+
end
|
106
102
|
end
|
107
|
-
end
|
108
103
|
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
104
|
+
def test_p_
|
105
|
+
@xgettext.parse_options[:comment_tag] = "TRANSLATORS:"
|
106
|
+
@ary = @xgettext.parse(['fixtures/p_.rb'])
|
107
|
+
assert_target_in_context "AAA", "BBB", ["fixtures/p_.rb:29", "fixtures/p_.rb:33"]
|
108
|
+
assert_target_in_context "AAA|BBB", "CCC", ["fixtures/p_.rb:37"]
|
109
|
+
assert_target_in_context "AAA", "CCC", ["fixtures/p_.rb:41"]
|
110
|
+
assert_target_in_context "CCC", "BBB", ["fixtures/p_.rb:45"]
|
111
|
+
assert_target_in_context "program", "name", ['fixtures/p_.rb:55'] do |t|
|
112
|
+
assert_equal "TRANSLATORS:please translate 'name' in the context of 'program'.\n Hint: the translation should NOT contain the translation of 'program'.", t.extracted_comment
|
113
|
+
end
|
117
114
|
end
|
118
115
|
end
|
119
116
|
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
117
|
+
class TestGlade < self
|
118
|
+
def test_old_style
|
119
|
+
# Old style (~2.0.4)
|
120
|
+
ary = GetText::GladeParser.parse('fixtures/gladeparser.glade')
|
121
|
+
|
122
|
+
assert_equal(['window1', 'fixtures/gladeparser.glade:8'], ary[0])
|
123
|
+
assert_equal(['normal text', 'fixtures/gladeparser.glade:29'], ary[1])
|
124
|
+
assert_equal(['1st line\n2nd line\n3rd line', 'fixtures/gladeparser.glade:50'], ary[2])
|
125
|
+
assert_equal(['<span color="red" weight="bold" size="large">markup </span>', 'fixtures/gladeparser.glade:73'], ary[3])
|
126
|
+
assert_equal(['<span color="red">1st line markup </span>\n<span color="blue">2nd line markup</span>', 'fixtures/gladeparser.glade:94'], ary[4])
|
127
|
+
assert_equal(['<span>"markup" with <escaped strings></span>', 'fixtures/gladeparser.glade:116'], ary[5])
|
128
|
+
assert_equal(['duplicated', 'fixtures/gladeparser.glade:137', 'fixtures/gladeparser.glade:158'], ary[6])
|
129
|
+
end
|
131
130
|
end
|
132
131
|
|
133
132
|
class TestErbParser < self
|
134
133
|
include GetTextTestUtils
|
135
134
|
|
136
135
|
def test_detect_encoding
|
137
|
-
need_encoding
|
138
|
-
|
139
136
|
euc_file = Tempfile.new("euc-jp.rhtml")
|
140
137
|
euc_file.open
|
141
138
|
euc_file.puts("<%#-*- coding: euc-jp -*-%>")
|
142
139
|
euc_file.close
|
143
140
|
|
144
141
|
erb_source = ERB.new(File.read(euc_file.path)).src
|
145
|
-
encoding = GetText::ErbParser.detect_encoding(erb_source)
|
142
|
+
encoding = GetText::ErbParser.new(euc_file.path).detect_encoding(erb_source)
|
146
143
|
|
147
144
|
assert_equal("EUC-JP", encoding)
|
148
145
|
end
|
@@ -151,7 +148,7 @@ class TestGetTextParser < Test::Unit::TestCase
|
|
151
148
|
@ary = GetText::ErbParser.parse('fixtures/erb/ascii.rhtml')
|
152
149
|
|
153
150
|
assert_target 'aaa', ['fixtures/erb/ascii.rhtml:8']
|
154
|
-
assert_target
|
151
|
+
assert_target "aaa\n", ['fixtures/erb/ascii.rhtml:11']
|
155
152
|
assert_target 'bbb', ['fixtures/erb/ascii.rhtml:12']
|
156
153
|
assert_plural_target "ccc1", "ccc2", ['fixtures/erb/ascii.rhtml:13']
|
157
154
|
end
|
@@ -168,13 +165,13 @@ class TestGetTextParser < Test::Unit::TestCase
|
|
168
165
|
GetText::ErbParser.init(:extnames => ['.rhtml', '.rxml'])
|
169
166
|
@ary = @xgettext.parse(['fixtures/erb/ascii.rhtml'])
|
170
167
|
assert_target 'aaa', ['fixtures/erb/ascii.rhtml:8']
|
171
|
-
assert_target
|
168
|
+
assert_target "aaa\n", ['fixtures/erb/ascii.rhtml:11']
|
172
169
|
assert_target 'bbb', ['fixtures/erb/ascii.rhtml:12']
|
173
170
|
assert_plural_target "ccc1", "ccc2", ['fixtures/erb/ascii.rhtml:13']
|
174
171
|
|
175
172
|
@ary = @xgettext.parse(['fixtures/erb/ascii.rxml'])
|
176
173
|
assert_target 'aaa', ['fixtures/erb/ascii.rxml:9']
|
177
|
-
assert_target
|
174
|
+
assert_target "aaa\n", ['fixtures/erb/ascii.rxml:12']
|
178
175
|
assert_target 'bbb', ['fixtures/erb/ascii.rxml:13']
|
179
176
|
assert_plural_target "ccc1", "ccc2", ['fixtures/erb/ascii.rxml:14']
|
180
177
|
|