gettext 2.3.9 → 3.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
|
|