gettext 3.2.9 → 3.4.9

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.
Files changed (237) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +276 -198
  3. data/Rakefile +7 -4
  4. data/doc/text/news.md +451 -0
  5. data/gettext.gemspec +10 -7
  6. data/lib/gettext/locale_path.rb +17 -9
  7. data/lib/gettext/mo.rb +12 -19
  8. data/lib/gettext/po.rb +4 -4
  9. data/lib/gettext/po_entry.rb +47 -27
  10. data/lib/gettext/po_parser.rb +65 -59
  11. data/lib/gettext/text_domain.rb +1 -1
  12. data/lib/gettext/text_domain_manager.rb +6 -5
  13. data/lib/gettext/tools/msgcat.rb +9 -2
  14. data/lib/gettext/tools/msginit.rb +226 -54
  15. data/lib/gettext/tools/msgmerge.rb +24 -6
  16. data/lib/gettext/tools/parser/erb.rb +9 -1
  17. data/lib/gettext/tools/parser/erubi.rb +88 -0
  18. data/lib/gettext/tools/parser/glade.rb +38 -40
  19. data/lib/gettext/tools/parser/gtk_builder_ui_definitions.rb +129 -0
  20. data/lib/gettext/tools/parser/ruby.rb +288 -221
  21. data/lib/gettext/tools/task.rb +4 -5
  22. data/lib/gettext/tools/xgettext.rb +21 -10
  23. data/lib/gettext/version.rb +3 -3
  24. data/locale/bg/LC_MESSAGES/gettext.mo +0 -0
  25. data/locale/bs/LC_MESSAGES/gettext.mo +0 -0
  26. data/locale/ca/LC_MESSAGES/gettext.mo +0 -0
  27. data/locale/cs/LC_MESSAGES/gettext.mo +0 -0
  28. data/locale/de/LC_MESSAGES/gettext.mo +0 -0
  29. data/locale/el/LC_MESSAGES/gettext.mo +0 -0
  30. data/locale/eo/LC_MESSAGES/gettext.mo +0 -0
  31. data/locale/es/LC_MESSAGES/gettext.mo +0 -0
  32. data/locale/et/LC_MESSAGES/gettext.mo +0 -0
  33. data/locale/fr/LC_MESSAGES/gettext.mo +0 -0
  34. data/locale/hr/LC_MESSAGES/gettext.mo +0 -0
  35. data/locale/hu/LC_MESSAGES/gettext.mo +0 -0
  36. data/locale/it/LC_MESSAGES/gettext.mo +0 -0
  37. data/locale/ja/LC_MESSAGES/gettext.mo +0 -0
  38. data/locale/ko/LC_MESSAGES/gettext.mo +0 -0
  39. data/locale/lv/LC_MESSAGES/gettext.mo +0 -0
  40. data/locale/nb/LC_MESSAGES/gettext.mo +0 -0
  41. data/locale/nl/LC_MESSAGES/gettext.mo +0 -0
  42. data/locale/pt_BR/LC_MESSAGES/gettext.mo +0 -0
  43. data/locale/ru/LC_MESSAGES/gettext.mo +0 -0
  44. data/locale/sr/LC_MESSAGES/gettext.mo +0 -0
  45. data/locale/uk/LC_MESSAGES/gettext.mo +0 -0
  46. data/locale/vi/LC_MESSAGES/gettext.mo +0 -0
  47. data/locale/zh/LC_MESSAGES/gettext.mo +0 -0
  48. data/locale/zh_TW/LC_MESSAGES/gettext.mo +0 -0
  49. data/po/bg/gettext.edit.po +81 -572
  50. data/po/bg/gettext.po +7 -409
  51. data/po/bs/gettext.edit.po +81 -572
  52. data/po/bs/gettext.po +7 -409
  53. data/po/ca/gettext.edit.po +81 -572
  54. data/po/ca/gettext.po +7 -409
  55. data/po/cs/gettext.edit.po +81 -572
  56. data/po/cs/gettext.po +7 -409
  57. data/po/de/gettext.edit.po +81 -572
  58. data/po/de/gettext.po +7 -409
  59. data/po/el/gettext.edit.po +81 -572
  60. data/po/el/gettext.po +7 -409
  61. data/po/eo/gettext.edit.po +81 -572
  62. data/po/eo/gettext.po +7 -409
  63. data/po/es/gettext.edit.po +81 -572
  64. data/po/es/gettext.po +7 -409
  65. data/po/et/gettext.edit.po +81 -572
  66. data/po/et/gettext.po +7 -409
  67. data/po/fr/gettext.edit.po +81 -572
  68. data/po/fr/gettext.po +7 -409
  69. data/po/gettext.pot +93 -645
  70. data/po/hr/gettext.edit.po +81 -572
  71. data/po/hr/gettext.po +7 -409
  72. data/po/hu/gettext.edit.po +81 -572
  73. data/po/hu/gettext.po +7 -409
  74. data/po/it/gettext.edit.po +81 -572
  75. data/po/it/gettext.po +7 -409
  76. data/po/ja/gettext.edit.po +83 -574
  77. data/po/ja/gettext.po +9 -411
  78. data/po/ko/gettext.edit.po +81 -572
  79. data/po/ko/gettext.po +7 -409
  80. data/po/lv/gettext.edit.po +81 -572
  81. data/po/lv/gettext.po +7 -409
  82. data/po/nb/gettext.edit.po +81 -572
  83. data/po/nb/gettext.po +7 -409
  84. data/po/nl/gettext.edit.po +81 -572
  85. data/po/nl/gettext.po +7 -409
  86. data/po/pt_BR/gettext.edit.po +81 -572
  87. data/po/pt_BR/gettext.po +7 -409
  88. data/po/ru/gettext.edit.po +81 -572
  89. data/po/ru/gettext.po +7 -409
  90. data/po/sr/gettext.edit.po +81 -572
  91. data/po/sr/gettext.po +7 -409
  92. data/po/sv/gettext.edit.po +81 -572
  93. data/po/sv/gettext.po +7 -409
  94. data/po/uk/gettext.edit.po +81 -572
  95. data/po/uk/gettext.po +7 -409
  96. data/po/vi/gettext.edit.po +81 -572
  97. data/po/vi/gettext.po +7 -409
  98. data/po/zh/gettext.edit.po +81 -572
  99. data/po/zh/gettext.po +7 -409
  100. data/po/zh_TW/gettext.edit.po +81 -572
  101. data/po/zh_TW/gettext.po +7 -409
  102. data/samples/cgi/po/helloerb1.pot +3 -3
  103. data/samples/cgi/po/helloerb2.pot +3 -3
  104. data/samples/cgi/po/hellolib.pot +3 -3
  105. data/samples/cgi/po/main.pot +3 -3
  106. data/samples/po/bg/hello_gtk_builder.edit.po +15 -0
  107. data/samples/po/bg/hello_gtk_builder.po +12 -0
  108. data/samples/po/bs/hello_gtk_builder.edit.po +15 -0
  109. data/samples/po/bs/hello_gtk_builder.po +12 -0
  110. data/samples/po/ca/hello_gtk_builder.edit.po +15 -0
  111. data/samples/po/ca/hello_gtk_builder.po +12 -0
  112. data/samples/po/cs/hello_gtk_builder.edit.po +15 -0
  113. data/samples/po/cs/hello_gtk_builder.po +12 -0
  114. data/samples/po/de/hello_gtk_builder.edit.po +15 -0
  115. data/samples/po/de/hello_gtk_builder.po +12 -0
  116. data/samples/po/el/hello_gtk_builder.edit.po +15 -0
  117. data/samples/po/el/hello_gtk_builder.po +12 -0
  118. data/samples/po/eo/hello_gtk_builder.edit.po +15 -0
  119. data/samples/po/eo/hello_gtk_builder.po +12 -0
  120. data/samples/po/es/hello_gtk_builder.edit.po +15 -0
  121. data/samples/po/es/hello_gtk_builder.po +12 -0
  122. data/samples/po/fr/hello_gtk_builder.edit.po +15 -0
  123. data/samples/po/fr/hello_gtk_builder.po +12 -0
  124. data/samples/po/hello.pot +3 -3
  125. data/samples/po/hello2.pot +4 -4
  126. data/samples/po/hello_glade2.pot +8 -5
  127. data/samples/po/hello_gtk2.pot +4 -4
  128. data/samples/po/hello_gtk_builder.pot +18 -4
  129. data/samples/po/hello_noop.pot +4 -4
  130. data/samples/po/hello_plural.pot +4 -4
  131. data/samples/po/hello_tk.pot +4 -4
  132. data/samples/po/hr/hello_gtk_builder.edit.po +15 -0
  133. data/samples/po/hr/hello_gtk_builder.po +12 -0
  134. data/samples/po/hu/hello_gtk_builder.edit.po +15 -0
  135. data/samples/po/hu/hello_gtk_builder.po +12 -0
  136. data/samples/po/it/hello_gtk_builder.edit.po +15 -0
  137. data/samples/po/it/hello_gtk_builder.po +12 -0
  138. data/samples/po/ja/hello_gtk_builder.edit.po +15 -0
  139. data/samples/po/ja/hello_gtk_builder.po +12 -0
  140. data/samples/po/ko/hello_gtk_builder.edit.po +15 -0
  141. data/samples/po/ko/hello_gtk_builder.po +12 -0
  142. data/samples/po/lv/hello_gtk_builder.edit.po +15 -0
  143. data/samples/po/lv/hello_gtk_builder.po +12 -0
  144. data/samples/po/nb/hello_gtk_builder.edit.po +15 -0
  145. data/samples/po/nb/hello_gtk_builder.po +12 -0
  146. data/samples/po/nl/hello_gtk_builder.edit.po +15 -0
  147. data/samples/po/nl/hello_gtk_builder.po +12 -0
  148. data/samples/po/pt_BR/hello_gtk_builder.edit.po +15 -0
  149. data/samples/po/pt_BR/hello_gtk_builder.po +12 -0
  150. data/samples/po/ru/hello_gtk_builder.edit.po +15 -0
  151. data/samples/po/ru/hello_gtk_builder.po +12 -0
  152. data/samples/po/sr/hello_gtk_builder.edit.po +15 -0
  153. data/samples/po/sr/hello_gtk_builder.po +12 -0
  154. data/samples/po/sv/hello_gtk_builder.edit.po +15 -0
  155. data/samples/po/sv/hello_gtk_builder.po +12 -0
  156. data/samples/po/uk/hello_gtk_builder.edit.po +15 -0
  157. data/samples/po/uk/hello_gtk_builder.po +12 -0
  158. data/samples/po/vi/hello_gtk_builder.edit.po +15 -0
  159. data/samples/po/vi/hello_gtk_builder.po +12 -0
  160. data/samples/po/zh/hello_gtk_builder.edit.po +15 -0
  161. data/samples/po/zh/hello_gtk_builder.po +12 -0
  162. data/samples/po/zh_TW/hello_gtk_builder.edit.po +15 -0
  163. data/samples/po/zh_TW/hello_gtk_builder.po +12 -0
  164. data/src/po_parser.ry +48 -42
  165. data/test/fixtures/_/backtick.rb +30 -0
  166. data/test/fixtures/_/block_parameter.rb +2 -2
  167. data/test/fixtures/_/double_quote_in_double_quote.rb +2 -2
  168. data/test/fixtures/_/double_quote_in_single_quote.rb +2 -2
  169. data/test/fixtures/_/literal_concatenation_with_continuation_line.rb +2 -2
  170. data/test/fixtures/_/middle_new_line.rb +2 -2
  171. data/test/fixtures/_/multiple_lines_literal.rb +2 -2
  172. data/test/fixtures/_/multiple_messages_in_same_line.rb +2 -2
  173. data/test/fixtures/_/multiple_same_messages.rb +2 -2
  174. data/test/fixtures/_/one_line.rb +2 -2
  175. data/test/fixtures/_/one_new_line.rb +2 -2
  176. data/test/fixtures/_/percent_strings.rb +55 -0
  177. data/test/fixtures/_/pipe.rb +32 -0
  178. data/test/{gettext-test-utils.rb → fixtures/_/quoted_symbol.rb} +13 -23
  179. data/test/fixtures/_.rb +10 -1
  180. data/test/fixtures/erb/case.rhtml +16 -0
  181. data/test/fixtures/erb/minus.rhtml +12 -0
  182. data/test/fixtures/erb/non_ascii.rhtml +1 -0
  183. data/test/fixtures/glade/3.glade +63 -0
  184. data/test/fixtures/gtk_builder_ui_definitions.ui +68 -0
  185. data/test/fixtures/multi_text_domain.rb +12 -12
  186. data/test/fixtures/np_.rb +1 -1
  187. data/test/fixtures/ns_/custom.rb +2 -2
  188. data/test/fixtures/ns_.rb +1 -1
  189. data/test/fixtures/p_.rb +1 -1
  190. data/test/fixtures/ruby/percent_lower_i.rb +1 -0
  191. data/test/fixtures/ruby/percent_lower_w.rb +1 -0
  192. data/test/fixtures/ruby/percent_upper_i.rb +1 -0
  193. data/test/fixtures/ruby/percent_upper_w.rb +1 -0
  194. data/test/fixtures/s_/custom.rb +2 -2
  195. data/test/fixtures/s_.rb +1 -1
  196. data/test/fixtures/simple.rb +5 -1
  197. data/test/fixtures/upper_nn_.rb +77 -0
  198. data/test/helper.rb +99 -0
  199. data/test/locale/fr/LC_MESSAGES/plural_error.mo +0 -0
  200. data/test/locale/fr/LC_MESSAGES/test1.mo +0 -0
  201. data/test/locale/fr_BE/LC_MESSAGES/test1.mo +0 -0
  202. data/test/locale/fr_BE_Foo/LC_MESSAGES/test1.mo +0 -0
  203. data/test/locale/ja/LC_MESSAGES/_.mo +0 -0
  204. data/test/po/_.pot +28 -4
  205. data/test/po/backslash.pot +6 -4
  206. data/test/po/fr/plural_error.po +7 -0
  207. data/test/po/fr/test1.po +7 -0
  208. data/test/po/fr_BE/test1.po +24 -0
  209. data/test/po/fr_BE_Foo/test1.po +20 -0
  210. data/test/po/hello.pot +3 -3
  211. data/test/po/ja/_.edit.po +27 -3
  212. data/test/po/ja/_.po +20 -2
  213. data/test/po/ja/hello.edit.po +0 -1
  214. data/test/po/non_ascii.pot +4 -4
  215. data/test/po/np_.pot +8 -5
  216. data/test/po/ns_.pot +6 -4
  217. data/test/po/p_.pot +3 -3
  218. data/test/po/s_.pot +6 -4
  219. data/test/po/untranslated.pot +4 -4
  220. data/test/run-test.rb +2 -3
  221. data/test/test_class_info.rb +8 -9
  222. data/test/test_gettext.rb +30 -1
  223. data/test/test_locale_path.rb +12 -4
  224. data/test/test_parser.rb +113 -25
  225. data/test/test_po_entry.rb +21 -17
  226. data/test/test_po_parser.rb +49 -4
  227. data/test/test_string.rb +9 -5
  228. data/test/tools/parser/test_glade.rb +91 -0
  229. data/test/tools/parser/test_gtk_builder_ui_definitions.rb +63 -0
  230. data/test/tools/parser/test_ruby.rb +76 -39
  231. data/test/tools/test_msgcat.rb +21 -1
  232. data/test/tools/test_msginit.rb +82 -3
  233. data/test/tools/test_msgmerge.rb +81 -6
  234. data/test/tools/test_xgettext.rb +106 -5
  235. metadata +82 -34
  236. data/lib/gettext/tools/parser/haml.rb +0 -61
  237. /data/test/fixtures/{gladeparser.glade → glade/2.glade} +0 -0
@@ -0,0 +1,32 @@
1
+ # Copyright (C) 2020 Sutou Kouhei <kou@clear-code.com>
2
+ #
3
+ # License: Ruby's or LGPL
4
+ #
5
+ # This library is free software: you can redistribute it and/or modify
6
+ # it under the terms of the GNU Lesser General Public License as published by
7
+ # the Free Software Foundation, either version 3 of the License, or
8
+ # (at your option) any later version.
9
+ #
10
+ # This library is distributed in the hope that it will be useful,
11
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
12
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
+ # GNU Lesser General Public License for more details.
14
+ #
15
+ # You should have received a copy of the GNU Lesser General Public License
16
+ # along with this program. If not, see <http://www.gnu.org/licenses/>.
17
+
18
+ module Fixtures
19
+ module Method_
20
+ class Pipe
21
+ include GetText
22
+
23
+ bindtextdomain("_", :path => Helper::Path.locale_path)
24
+
25
+ def binary_pipe
26
+ _("Hello")
27
+ 1 | 2
28
+ _("World")
29
+ end
30
+ end
31
+ end
32
+ end
@@ -1,6 +1,4 @@
1
- # -*- coding: utf-8 -*-
2
- #
3
- # Copyright (C) 2012-2013 Kouhei Sutou <kou@clear-code.com>
1
+ # Copyright (C) 2020 Kitaiti Makoto <KitaitiMakoto@gmail.com>
4
2
  #
5
3
  # License: Ruby's or LGPL
6
4
  #
@@ -17,28 +15,20 @@
17
15
  # You should have received a copy of the GNU Lesser General Public License
18
16
  # along with this program. If not, see <http://www.gnu.org/licenses/>.
19
17
 
20
- require "fileutils"
21
- require "tmpdir"
22
- require "tempfile"
23
- require "time"
24
-
25
- require "gettext"
26
-
27
- module GetTextTestUtils
28
- module_function
29
- def fixture_path(*components)
30
- File.join(File.dirname(__FILE__), "fixtures", *components)
31
- end
18
+ module Fixtures
19
+ module Method_
20
+ class QuotedSymbol
21
+ include GetText
32
22
 
33
- def locale_path
34
- File.join(File.dirname(__FILE__), "locale")
35
- end
23
+ bindtextdomain("_", :path => Helper::Path.locale_path)
36
24
 
37
- def setup_tmpdir
38
- @tmpdir = Dir.mktmpdir
39
- end
25
+ def symbol_quoted_by_single_quote
26
+ _(:'hello world')
27
+ end
40
28
 
41
- def teardown_tmpdir
42
- FileUtils.rm_rf(@tmpdir, :secure => true) if @tmpdir
29
+ def symbol_quoted_by_double_quote
30
+ _(:"hello world")
31
+ end
32
+ end
43
33
  end
44
34
  end
data/test/fixtures/_.rb CHANGED
@@ -24,7 +24,7 @@ require 'gettext'
24
24
  include GetText
25
25
 
26
26
  class MessageFixture
27
- bindtextdomain("rubyparser", :path => "locale")
27
+ bindtextdomain("rubyparser", :path => Helper::Path.locale_path)
28
28
 
29
29
  def test_1
30
30
  _("aaa")
@@ -131,6 +131,15 @@ EOF
131
131
  def test_includeing_sharp
132
132
  _("This is a # including string.")
133
133
  end
134
+
135
+ def test_regexp
136
+ /Regular Expression/
137
+ end
138
+
139
+ def test_variable
140
+ message = "dynamic message"
141
+ _(message)
142
+ end
134
143
  end
135
144
 
136
145
  module ActionController
@@ -0,0 +1,16 @@
1
+ <%
2
+ require 'gettext'
3
+ include GetText
4
+ bindtextdomain("helloerb", :path => "locale")
5
+ %>
6
+ <html>
7
+ <head>
8
+ <title></title>
9
+ </head>
10
+ <body>
11
+ <%= _('Hello') %>
12
+ <% case 1 %>
13
+ <% end %>
14
+ <%= _('World') %>
15
+ </body>
16
+ </html>
@@ -0,0 +1,12 @@
1
+ <%
2
+ require 'gettext'
3
+ include GetText
4
+ bindtextdomain("helloerb", :path => "locale")
5
+ %>
6
+ <html>
7
+ <head>
8
+ <title><%= _("Hello") -%></title>
9
+ </head>
10
+ <body>
11
+ </body>
12
+ </html>
@@ -1,3 +1,4 @@
1
+ <%# -*- coding: utf-8 -*- %>
1
2
  <%
2
3
  require 'gettext'
3
4
  include GetText
@@ -0,0 +1,63 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <!-- Generated with glade 3.38.2 -->
3
+ <interface>
4
+ <requires lib="gtk+" version="3.24"/>
5
+ <object class="GtkWindow">
6
+ <property name="can-focus">False</property>
7
+ <child>
8
+ <object class="GtkBox">
9
+ <property name="visible">True</property>
10
+ <property name="can-focus">False</property>
11
+ <property name="orientation">vertical</property>
12
+ <child>
13
+ <object class="GtkLabel">
14
+ <property name="visible">True</property>
15
+ <property name="can-focus">False</property>
16
+ <property name="label">untranslatable label</property>
17
+ </object>
18
+ <packing>
19
+ <property name="expand">False</property>
20
+ <property name="fill">True</property>
21
+ <property name="position">0</property>
22
+ </packing>
23
+ </child>
24
+ <child>
25
+ <object class="GtkLabel">
26
+ <property name="visible">True</property>
27
+ <property name="can-focus">False</property>
28
+ <property name="label" translatable="yes" comments="comment for translator">label with comment</property>
29
+ </object>
30
+ <packing>
31
+ <property name="expand">False</property>
32
+ <property name="fill">True</property>
33
+ <property name="position">1</property>
34
+ </packing>
35
+ </child>
36
+ <child>
37
+ <object class="GtkLabel">
38
+ <property name="visible">True</property>
39
+ <property name="can-focus">False</property>
40
+ <property name="label" translatable="yes">label without comment</property>
41
+ </object>
42
+ <packing>
43
+ <property name="expand">False</property>
44
+ <property name="fill">True</property>
45
+ <property name="position">2</property>
46
+ </packing>
47
+ </child>
48
+ <child>
49
+ <object class="GtkLabel">
50
+ <property name="visible">True</property>
51
+ <property name="can-focus">False</property>
52
+ <property name="label" translatable="yes" context="context">label with context</property>
53
+ </object>
54
+ <packing>
55
+ <property name="expand">False</property>
56
+ <property name="fill">True</property>
57
+ <property name="position">3</property>
58
+ </packing>
59
+ </child>
60
+ </object>
61
+ </child>
62
+ </object>
63
+ </interface>
@@ -0,0 +1,68 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <!-- Generated with glade 3.22.1 -->
3
+ <interface>
4
+ <requires lib="gtk+" version="3.20"/>
5
+ <object class="GtkWindow">
6
+ <property name="can_focus">False</property>
7
+ <child>
8
+ <placeholder/>
9
+ </child>
10
+ <child>
11
+ <object class="GtkBox">
12
+ <property name="visible">True</property>
13
+ <property name="can_focus">False</property>
14
+ <property name="orientation">vertical</property>
15
+ <child>
16
+ <object class="GtkLabel">
17
+ <property name="visible">True</property>
18
+ <property name="can_focus">False</property>
19
+ <property name="label" translatable="yes" context="context" comments="comment">label with context</property>
20
+ </object>
21
+ <packing>
22
+ <property name="expand">False</property>
23
+ <property name="fill">True</property>
24
+ <property name="position">0</property>
25
+ </packing>
26
+ </child>
27
+ <child>
28
+ <object class="GtkLabel">
29
+ <property name="visible">True</property>
30
+ <property name="can_focus">False</property>
31
+ <property name="label" translatable="yes">label simple</property>
32
+ </object>
33
+ <packing>
34
+ <property name="expand">False</property>
35
+ <property name="fill">True</property>
36
+ <property name="position">1</property>
37
+ </packing>
38
+ </child>
39
+ <child>
40
+ <object class="GtkLabel">
41
+ <property name="visible">True</property>
42
+ <property name="can_focus">False</property>
43
+ <property name="label">not trnanslatable label</property>
44
+ </object>
45
+ <packing>
46
+ <property name="expand">False</property>
47
+ <property name="fill">True</property>
48
+ <property name="position">2</property>
49
+ </packing>
50
+ </child>
51
+ <child>
52
+ <object class="GtkLabel">
53
+ <property name="visible">True</property>
54
+ <property name="can_focus">False</property>
55
+ <property name="label" translatable="yes">multiple
56
+ lines
57
+ label</property>
58
+ </object>
59
+ <packing>
60
+ <property name="expand">False</property>
61
+ <property name="fill">True</property>
62
+ <property name="position">3</property>
63
+ </packing>
64
+ </child>
65
+ </object>
66
+ </child>
67
+ </object>
68
+ </interface>
@@ -4,8 +4,8 @@ module MultiTextDomain
4
4
  class C11
5
5
  include GetText
6
6
  def initialize
7
- bindtextdomain("test1", :path => "locale")
8
- bindtextdomain("test2", :path => "locale")
7
+ bindtextdomain("test1", :path => Helper::Path.locale_path)
8
+ bindtextdomain("test2", :path => Helper::Path.locale_path)
9
9
  end
10
10
  def test
11
11
  _("language")
@@ -17,8 +17,8 @@ module MultiTextDomain
17
17
 
18
18
  class C12
19
19
  include GetText
20
- bindtextdomain("test1", :path => "locale")
21
- bindtextdomain("test2", :path => "locale")
20
+ bindtextdomain("test1", :path => Helper::Path.locale_path)
21
+ bindtextdomain("test2", :path => Helper::Path.locale_path)
22
22
 
23
23
  def test
24
24
  _("language")
@@ -36,7 +36,7 @@ module MultiTextDomain
36
36
 
37
37
  module M1
38
38
  include GetText
39
- bindtextdomain("test1", :path => "locale")
39
+ bindtextdomain("test1", :path => Helper::Path.locale_path)
40
40
 
41
41
  module_function
42
42
  def test
@@ -57,7 +57,7 @@ module MultiTextDomain
57
57
 
58
58
  class M1C1
59
59
  include GetText
60
- bindtextdomain("test2", :path => "locale")
60
+ bindtextdomain("test2", :path => Helper::Path.locale_path)
61
61
  def test
62
62
  _("language")
63
63
  end
@@ -69,7 +69,7 @@ module MultiTextDomain
69
69
  class M1C2
70
70
  include GetText
71
71
  def initialize
72
- bindtextdomain("test2", :path => "locale")
72
+ bindtextdomain("test2", :path => Helper::Path.locale_path)
73
73
  end
74
74
  def test
75
75
  _("language")
@@ -84,7 +84,7 @@ module MultiTextDomain
84
84
  class C2
85
85
  include GetText
86
86
  def initialize
87
- bindtextdomain("test1", :path => "locale")
87
+ bindtextdomain("test1", :path => Helper::Path.locale_path)
88
88
  end
89
89
 
90
90
  def test
@@ -98,7 +98,7 @@ module MultiTextDomain
98
98
 
99
99
  class C3
100
100
  include GetText
101
- bindtextdomain("test1", :path => "locale")
101
+ bindtextdomain("test1", :path => Helper::Path.locale_path)
102
102
 
103
103
  def test
104
104
  _("language")
@@ -110,7 +110,7 @@ module MultiTextDomain
110
110
  end
111
111
 
112
112
  class C4 < C3
113
- bindtextdomain("test2", :path => "locale")
113
+ bindtextdomain("test2", :path => Helper::Path.locale_path)
114
114
 
115
115
  def test2
116
116
  _("LANGUAGE")
@@ -123,13 +123,13 @@ module MultiTextDomain
123
123
 
124
124
  class C51
125
125
  include GetText
126
- bindtextdomain("test3", :path => "locale")
126
+ bindtextdomain("test3", :path => Helper::Path.locale_path)
127
127
  def test
128
128
  _("language")
129
129
  end
130
130
  end
131
131
 
132
132
  class C52 < C12
133
- bindtextdomain("test3", :path => "locale")
133
+ bindtextdomain("test3", :path => Helper::Path.locale_path)
134
134
  end
135
135
  end
data/test/fixtures/np_.rb CHANGED
@@ -22,7 +22,7 @@ require 'gettext'
22
22
 
23
23
  class TestNPGetText
24
24
  include GetText
25
- bindtextdomain("np_", :path => "locale")
25
+ bindtextdomain("np_", :path => Helper::Path.locale_path)
26
26
 
27
27
  def test_1
28
28
  [np_("Magazine", "a book", "%{num} books", 1),
@@ -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-2020 Sutou Kouhei <kou@clear-code.com>
4
4
  #
5
5
  # License: Ruby's or LGPL
6
6
  #
@@ -22,7 +22,7 @@ module Fixtures
22
22
  class Custom
23
23
  include GetText
24
24
 
25
- bindtextdomain("ns_", :path => GetTextTestUtils.locale_path)
25
+ bindtextdomain("ns_", :path => Helper::Path.locale_path)
26
26
 
27
27
  def message
28
28
  ns_("context|context$message", "context|context$messages", 1, "$")
data/test/fixtures/ns_.rb CHANGED
@@ -22,7 +22,7 @@ require 'gettext'
22
22
 
23
23
  class TestNSGetText
24
24
  include GetText
25
- bindtextdomain("ns_", :path => "locale")
25
+ bindtextdomain("ns_", :path => Helper::Path.locale_path)
26
26
 
27
27
  def test_1
28
28
  [ns_("AAA|BBB", "CCC", 1), ns_("AAA|BBB", "CCC", 2)]
data/test/fixtures/p_.rb CHANGED
@@ -23,7 +23,7 @@ require 'gettext'
23
23
 
24
24
  class TestPGetText
25
25
  include GetText
26
- bindtextdomain("p_", :path => "locale")
26
+ bindtextdomain("p_", :path => Helper::Path.locale_path)
27
27
 
28
28
  def test_1
29
29
  p_("AAA", "BBB")
@@ -0,0 +1 @@
1
+ %i(hello world)
@@ -0,0 +1 @@
1
+ %w(Hello World)
@@ -0,0 +1 @@
1
+ %I(hello world)
@@ -0,0 +1 @@
1
+ %W(Hello World)
@@ -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-2020 Sutou Kouhei <kou@clear-code.com>
4
4
  #
5
5
  # License: Ruby's or LGPL
6
6
  #
@@ -22,7 +22,7 @@ module Fixtures
22
22
  class Custom
23
23
  include GetText
24
24
 
25
- bindtextdomain("s_", :path => GetTextTestUtils.locale_path)
25
+ bindtextdomain("s_", :path => Helper::Path.locale_path)
26
26
 
27
27
  def message
28
28
  s_("context|context$message", "$")
data/test/fixtures/s_.rb CHANGED
@@ -22,7 +22,7 @@ require 'gettext'
22
22
 
23
23
  class TestSGetText
24
24
  include GetText
25
- bindtextdomain("s_", :path => "locale")
25
+ bindtextdomain("s_", :path => Helper::Path.locale_path)
26
26
 
27
27
  def test_1
28
28
  s_("AAA|BBB")
@@ -4,7 +4,7 @@ require 'gettext'
4
4
 
5
5
  class Simple
6
6
  include GetText
7
- bindtextdomain("test1", :path => "locale")
7
+ bindtextdomain("test1", :path => Helper::Path.locale_path)
8
8
 
9
9
  def test
10
10
  _("language")
@@ -13,4 +13,8 @@ class Simple
13
13
  def test_formatted_string
14
14
  _("one is %d.") % 1
15
15
  end
16
+
17
+ def test_plural
18
+ n_("There is an apple.", "There are %{num} apples.", 5) % {:num => 5}
19
+ end
16
20
  end
@@ -0,0 +1,77 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+ require 'gettext'
4
+ include GetText
5
+
6
+ class TestRubyParser_Nn
7
+ bindtextdomain("testNn_rubyparser", :path => "locale")
8
+
9
+ def testNn_1
10
+ Nn_("aaa", "aaas")
11
+ end
12
+
13
+ def testNn_2
14
+ Nn_("aaa\n", "aaas\n")
15
+ end
16
+
17
+ def testNn_3
18
+ Nn_("bbb\nccc", "bbbs\ncccs")
19
+ end
20
+
21
+ def testNn_4
22
+ Nn_("bbb
23
+ ccc
24
+ ddd
25
+ ",
26
+ "bbbs
27
+ cccs
28
+ ddds
29
+ ")
30
+ end
31
+
32
+ def testNn_5
33
+ Nn_("eee", "eees")
34
+ end
35
+
36
+ def testNn_6
37
+ Nn_("eee", "eees") + "foo" + Nn_("fff", "fffs")
38
+ end
39
+
40
+ def testNn_7
41
+ Nn_("ggg"\
42
+ "hhh"\
43
+ "iii",
44
+ "gggs"\
45
+ "hhhs"\
46
+ "iiis")
47
+ end
48
+
49
+ def testNn_8
50
+ Nn_('a"b"c"', 'as"bs"cs"')
51
+ end
52
+
53
+ def testNn_9
54
+ Nn_("d\"e\"f\"", "ds\"es\"fs\"")
55
+ end
56
+
57
+ def testNn_10
58
+ Nn_("jjj", "jjjs") +
59
+ Nn_("kkk", "kkks")
60
+ end
61
+
62
+ def testNn_11
63
+ Nn_("lll" + "mmm", "llls" + "mmms")
64
+ end
65
+
66
+ def testNn_12
67
+ puts Nn_(msg, msgs), "ppp" #Ignored
68
+ end
69
+
70
+ def testNn_13
71
+ Nn_("nnn\n" +
72
+ "ooo",
73
+ "nnns\n" +
74
+ "ooos")
75
+ end
76
+ end
77
+
data/test/helper.rb ADDED
@@ -0,0 +1,99 @@
1
+ # Copyright (C) 2012-2020 Sutou Kouhei <kou@clear-code.com>
2
+ #
3
+ # License: Ruby's or LGPL
4
+ #
5
+ # This library is free software: you can redistribute it and/or modify
6
+ # it under the terms of the GNU Lesser General Public License as published by
7
+ # the Free Software Foundation, either version 3 of the License, or
8
+ # (at your option) any later version.
9
+ #
10
+ # This library is distributed in the hope that it will be useful,
11
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
12
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
+ # GNU Lesser General Public License for more details.
14
+ #
15
+ # You should have received a copy of the GNU Lesser General Public License
16
+ # along with this program. If not, see <http://www.gnu.org/licenses/>.
17
+
18
+ require "fileutils"
19
+ require "tmpdir"
20
+ require "tempfile"
21
+ require "time"
22
+
23
+ require "gettext"
24
+
25
+ module Helper
26
+ module Path
27
+ module_function
28
+ def fixture_path(*components)
29
+ File.join(File.dirname(__FILE__), "fixtures", *components)
30
+ end
31
+
32
+ def locale_path
33
+ File.join(File.dirname(__FILE__), "locale")
34
+ end
35
+ end
36
+
37
+ module Tmpdir
38
+ def setup_tmpdir
39
+ @tmpdir = Dir.mktmpdir
40
+ end
41
+
42
+ def teardown_tmpdir
43
+ FileUtils.rm_rf(@tmpdir, :secure => true) if @tmpdir
44
+ end
45
+ end
46
+
47
+ module Warning
48
+ def suppress_warning
49
+ stderr, $stderr = $stderr, StringIO.new
50
+ begin
51
+ yield
52
+ ensure
53
+ $stderr = stderr
54
+ end
55
+ end
56
+ end
57
+
58
+ module Parser
59
+ include Helper::Path
60
+
61
+ def assert_parse(expected, file)
62
+ assert_equal(normalize_expected(expected),
63
+ normalize_actual(parse(file)))
64
+ end
65
+
66
+ def normalize_expected(messages)
67
+ messages.collect do |message|
68
+ default = {
69
+ :msgid => nil,
70
+ :msgid_plural => nil,
71
+ :msgctxt => nil,
72
+ :msgstr => nil,
73
+ :separator => nil,
74
+ :references => nil,
75
+ }
76
+ default.merge(message)
77
+ end
78
+ end
79
+
80
+ def normalize_actual(po)
81
+ po.collect do |po_entry|
82
+ {
83
+ :msgid => po_entry.msgid,
84
+ :msgid_plural => po_entry.msgid_plural,
85
+ :msgctxt => po_entry.msgctxt,
86
+ :msgstr => po_entry.msgstr,
87
+ :separator => po_entry.separator,
88
+ :references => normalize_references(po_entry.references),
89
+ }
90
+ end
91
+ end
92
+
93
+ def normalize_references(references)
94
+ references.collect do |reference|
95
+ reference.sub(/\A#{Regexp.escape(fixture_path)}\//, "")
96
+ end
97
+ end
98
+ end
99
+ end
Binary file
Binary file