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
data/doc/text/news.md CHANGED
@@ -1,5 +1,302 @@
1
1
  # News
2
2
 
3
+ ## 3.4.9: 2023-10-22 {#version-3-4-9}
4
+
5
+ ### Improvements
6
+
7
+ * `rmsgcat`, `rmsgmerge`, `rxgettext`: Added
8
+ `--use-one-line-per-reference` option.
9
+
10
+ ## 3.4.8: 2023-10-22 {#version-3-4-8}
11
+
12
+ ### Fixes
13
+
14
+ * doc: Fixed a wrong description for interpolation.
15
+ * GH-102
16
+ * Patch by Ilmari Karonen
17
+
18
+ * po: Fixed a parser bug that flags aren't parsed correctly. If a
19
+ normal comment has "fuzzy", the entry is also treated as a fuzzy
20
+ entry.
21
+
22
+ * po: Fixed an output bug that flags aren't formatted correctly.
23
+ * GH-105
24
+ * Patch by Yoshikazu Nojima
25
+
26
+ ### Thanks
27
+
28
+ * Ilmari Karonen
29
+
30
+ * Yoshikazu Nojima
31
+
32
+ ## 3.4.7: 2023-08-17 {#version-3-4-7}
33
+
34
+ ### Fixes
35
+
36
+ * po: Fixed a parser bug that it may add a `fuzzy` flag to non-fuzzy
37
+ entry with `ignore_fuzzy: true`.
38
+
39
+ Example PO:
40
+
41
+ ```po
42
+ #, fuzzy
43
+ #: file.rb:10
44
+ msgid "hello"
45
+ msgstr "bonjour"
46
+
47
+ msgid "non-fuzzy"
48
+ msgstr "non-fuzzy string"
49
+ ```
50
+
51
+ `hello` entry is ignored because `ignore_fuzzy` is `true`. The
52
+ `fuzzy` flag in the `hello` entry is added to `non-fuzzy` entry.
53
+
54
+ ## 3.4.6: 2023-07-12 {#version-3-4-6}
55
+
56
+ ### Fixes
57
+
58
+ * po: Fixed a bug that parsed `msgid`/`msgstr`/`msgctxt` in `.po`
59
+ may be too much unescaped.
60
+
61
+ ## 3.4.5: 2023-07-12 {#version-3-4-5}
62
+
63
+ ### Improvements
64
+
65
+ * po: Added support for escaping `\r` in `msgid`/`msgstr`.
66
+
67
+ ## 3.4.4: 2023-06-11 {#version-3-4-4}
68
+
69
+ ### Improvements
70
+
71
+ * Added `racc` to runtime dependencies because Ruby 3.3 doesn't
72
+ include `racc/parser`.
73
+
74
+ ## 3.4.3: 2022-05-20 {#version-3-4-3}
75
+
76
+ ### Improvements
77
+
78
+ * Added support for Erubi to parse `.erb`
79
+ [GitHub#91][Patch by Michaël Hoste]
80
+
81
+ ### Thanks
82
+
83
+ * Michaël Hoste
84
+
85
+ ## 3.4.2: 2022-01-11 {#version-3-4-2}
86
+
87
+ ### Improvements
88
+
89
+ * Added support for fallback for specific locale.
90
+ e.g.: `fr_BE_Foo` -> `fr_BE` -> `fr`
91
+ [GitHub#90][Patch by Michaël Hoste]
92
+
93
+ * Added support for Ruby 3.1.
94
+ [GitHub#92][Reported by ahiru]
95
+
96
+ ### Thanks
97
+
98
+ * Michaël Hoste
99
+
100
+ * ahiru
101
+
102
+ ## 3.4.1: 2021-09-08 {#version-3-4-1}
103
+
104
+ ### Improvements
105
+
106
+ * Listed licenses separately in gemspec.
107
+ [GitHub#88][Patch by Josh Cooper]
108
+
109
+ ### Thanks
110
+
111
+ * Josh Cooper
112
+
113
+ ## 3.4.0: 2021-08-26 {#version-3-4-0}
114
+
115
+ ### Improvements
116
+
117
+ * test: Added missing Red Datasets availability check.
118
+ [GitHub#87][Reported by Mamoru TASAKA]
119
+
120
+ ### Thanks
121
+
122
+ * Mamoru TASAKA
123
+
124
+ ## 3.3.9: 2021-08-26 {#version-3-3-9}
125
+
126
+ ### Improvements
127
+
128
+ * msginit: Made Red Datasets dependency optional.
129
+ [GitHub:red-datatools/red-datasets#105][Suggested by Mamoru TASAKA]
130
+
131
+ ### Thanks
132
+
133
+ * Mamoru TASAKA
134
+
135
+ ## 3.3.8: 2021-06-09 {#version-3-3-8}
136
+
137
+ ### Improvements
138
+
139
+ * msginit: Added support for generating plural forms with
140
+ Unicode's CLDR plural rules data.
141
+ [GitHub#85][Suggested by Michaël Hoste]
142
+
143
+ * rxgettext ui: Added support for GtkBuilder UI definitions format
144
+ with `.glade` extension.
145
+ [GitHub#74][Reported by dorle-o]
146
+
147
+ ### Fixes
148
+
149
+ * rxgettext ruby: Fixed a bug that `Nn_` isn't extracted.
150
+ [GitHub#86][Reported by Kai Ramuenke]
151
+
152
+ ### Thanks
153
+
154
+ * Kai Ramuenke
155
+
156
+ * Michaël Hoste
157
+
158
+ * dorle-o
159
+
160
+ ## 3.3.7: 2021-01-18 {#version-3-3-7}
161
+
162
+ ### Improvements
163
+
164
+ * msgmerge: Added `--no-report-warning` option.
165
+ [GitHub#81][Reported by Akim Demaille]
166
+
167
+ ### Thanks
168
+
169
+ * Akim Demaille
170
+
171
+ ## 3.3.6: 2020-08-04 {#version-3-3-6}
172
+
173
+ ### Improvements
174
+
175
+ * erb: Added support for `-%>`.
176
+ [GitHub#77][Reported by lremes]
177
+
178
+ * Removed ChangeLog.
179
+ [GitHub#76][Reported by Will Stephenson]
180
+
181
+ * Don't assume `RbConfig::CONFIG["datadir"]` is available. For
182
+ example, TruffleRuby doesn't provide it.
183
+
184
+ ### Thanks
185
+
186
+ * lremes
187
+
188
+ * Will Stephenson
189
+
190
+ ## 3.3.5: 2020-02-15 {#version-3-3-5}
191
+
192
+ ### Improvements
193
+
194
+ * Added support for `|` method.
195
+ [GitHub#73][Reported by dorle-o]
196
+
197
+ ### Thanks
198
+
199
+ * dorle-o
200
+
201
+ ## 3.3.4: 2020-02-12 {#version-3-3-4}
202
+
203
+ ### Improvements
204
+
205
+ * Added support for `%W`.
206
+ [GitHub#72][Reported by Michaël Hoste]
207
+
208
+ ### Thanks
209
+
210
+ * Michaël Hoste
211
+
212
+ ## 3.3.3: 2020-02-05 {#version-3-3-3}
213
+
214
+ ### Improvements
215
+
216
+ * Added support for `%I`.
217
+ [GitHub#71][Reported by Kai Ramuenke]
218
+
219
+ ### Thanks
220
+
221
+ * Kai Ramuenke
222
+
223
+ ## 3.3.2: 2020-01-13 {#version-3-3-2}
224
+
225
+ ### Fixes
226
+
227
+ * Fixed a bug that `rake gettext:po:add]` raises an error.
228
+ [GitHub#70][Patch by KITAITI Makoto]
229
+
230
+ ### Thanks
231
+
232
+ * KITAITI Makoto
233
+
234
+ ## 3.3.1: 2020-01-12 {#version-3-3-1}
235
+
236
+ ### Improvements
237
+
238
+ * Stopped detecting string interpolation literal.
239
+ [GitHub#21][Reported by Remo]
240
+
241
+ * `rxgettext`: Added support for adding a new parser by `--require`.
242
+
243
+ * Added support for GtkBuilder UI definitions file.
244
+ [GitHub#63][Reported by Alex]
245
+
246
+ * Improved percent literal parsing.
247
+ [GitHub#67][Patch by KITAITI Makoto]
248
+
249
+ ### Thanks
250
+
251
+ * Remo
252
+
253
+ * Alex
254
+
255
+ * KITAITI Makoto
256
+
257
+ ## 3.3.0: 2020-01-08 {#version-3-3-0}
258
+
259
+ ### Improvements
260
+
261
+ * Fixed README markup.
262
+ [GitHub#57][Patch by Alexander Paukste]
263
+
264
+ * Suppressed warnings.
265
+ [GitHub#58][Patch by 284km]
266
+
267
+ * Improved README.
268
+ [GitHub#62][Patch by Robert Graff]
269
+
270
+ * Added support for finding `racc` of Ruby 2.7.
271
+ [GitHub#65][Patch by KITAITI Makoto]
272
+
273
+ * Added support for Ruby 2.7.
274
+ [GitHub#64][Reported by Anatol Pomozov]
275
+
276
+ * Dropped support for Ruby 2.4.
277
+
278
+ ### Fixes
279
+
280
+ * Fixed a bug that `n_` may return nil.
281
+ [GitHub#60][Patch by Michaël Hoste]
282
+
283
+ * Fixed a sort by msgid bug.
284
+ [GitHub#61][Patch by Robert Graff]
285
+
286
+ ### Thanks
287
+
288
+ * Alexander Paukste
289
+
290
+ * 284km
291
+
292
+ * Michaël Hoste
293
+
294
+ * Robert Graff
295
+
296
+ * KITAITI Makoto
297
+
298
+ * Anatol Pomozov
299
+
3
300
  ## 3.2.9: 2018-03-05 {#version-3-2-9}
4
301
 
5
302
  ### Fixes
@@ -740,3 +1037,157 @@ Ruby 1.9 support release.
740
1037
  * Gunnar Wolf
741
1038
  * Ivan Pirlik
742
1039
  * Tatsuki Sugiura
1040
+
1041
+ ## 2.2.1: 2012-05-20
1042
+
1043
+ ### Changes
1044
+
1045
+ * Supported non ASCII string in msgid. [GitHub#1]
1046
+ [Patch by Urban Hafner]
1047
+ * Stopped overriding String#% on Ruby 1.9.
1048
+ * Fixed a bug that "\" is too escaped.
1049
+ * Removed GetText.bindtext dependency from GetText::PoParser.
1050
+ * Ranamed GetText::MOFile to GetText::MoFile but GetText::MOFile
1051
+ is still available.
1052
+
1053
+ ### Thanks
1054
+
1055
+ * Urban Hafner
1056
+
1057
+ ## 2.2.0: 2012-03-11
1058
+
1059
+ ### Changes
1060
+
1061
+ * Supported ruby-1.9. [Patch by hallelujah]
1062
+ * Supported $SAFE=1. [Patch by bon]
1063
+ * Improved argument check. [Suggested by Morus Walter]
1064
+ * Supported ruby-1.8.6 again. [Bug#27447] [Reported by Mamoru Tasaka]
1065
+ * Fixed Ukrainan translation path. [Bug#28277] [Reported by Gunnar Wolf]
1066
+ * Fixed a bug that only the last path in GETTEXT_PATH environment
1067
+ variable is used. [Bug#28345] [Reported by Ivan Pirlik]
1068
+ * Fixed a bug that Ruby-GetText-Package modifies $LOAD_PATH. [Bug#28094]
1069
+ [Reported by Tatsuki Sugiura]
1070
+
1071
+ ### Thanks
1072
+
1073
+ * hallelujah
1074
+ * bon
1075
+ * Morus Walter
1076
+ * Mamoru Tasaka
1077
+ * Gunnar Wolf
1078
+ * Ivan Pirlik
1079
+ * Tatsuki Sugiura
1080
+
1081
+
1082
+ ## 2.1.0: 2009-11-14
1083
+
1084
+ ### Changes
1085
+
1086
+ * Implemented parsing of translator comments (GNU gettext feature)
1087
+ [by Vladimir Dobriakov]
1088
+ * Refactor the directory structure.
1089
+ * Move files for runtime to lib/gettext/runtime/*.
1090
+ * Move files for development(rgettext/rmsgfmt) to
1091
+ lib/gettext/tools/*.
1092
+ * Refactor parsers for po. po-message object is defined as GetText::PoMessage
1093
+ class. [by Vladimir Dobriakov, Masao Mutoh]
1094
+ * Speed up when lots of objects are created to share the textdomain in each
1095
+ objects. [Reported by Gaël Séchaud.]
1096
+ * Fix "%{foo.bar}" %{"foo.bar".to_sym => "a"} doesn't work.
1097
+ [Bug#26663, Reported by Danilo Castilho]
1098
+ * lib/gettext.rb: Fixed to work unless gem. [Reported by Vladimir Dobriakov]
1099
+ * Fixed a wrong String literal in a CGI sample.
1100
+ [Bug #26531, by Eugene Mikhailov]
1101
+ * Update license information(explicit to use ruby's or LGPL).
1102
+ [Pointed out by Masateru Yoshikawa]
1103
+ * Code cleanup.
1104
+ * Update minor version.
1105
+
1106
+ ## 2.0.4: 2009-05-23
1107
+
1108
+ ### Changes
1109
+
1110
+ * Fix String#% return nil when the string have no place holders. [by okkez]
1111
+ * Update pofiles and remove old messages.
1112
+ * suppress some warnings on Ruby 1.9.x. [by Nobuhiro IMAI]
1113
+ * Fix not to run tests on Win32.
1114
+
1115
+ ## 2.0.3: 2009-05-09
1116
+
1117
+ ### Changes
1118
+
1119
+ * Fixed the dependencies. [Reported by Hans de Graaff]
1120
+
1121
+ ## 2.0.2: 2009-05-04
1122
+
1123
+ ### Changes
1124
+
1125
+ * Support ruby-1.9.1 style format string such as `%<foo>d`.
1126
+ * Apply new `Locale.set_app_language_tags` and Locale.candidates.
1127
+ [Suggested by Vladimir Dobriakov]
1128
+ * Enhance to support ruby-1.9.x [by OZAWA Sakuro]
1129
+ * poparser work with proper encoding.
1130
+ * string.rb: #bytesize alias to #size in older ruby version such as 1.8.5.
1131
+ * Fixed bugs
1132
+ * `n_()` to work when Plural-Forms line in po-file is not correct.
1133
+ [Reported by Sava Chankov (Bug#25570)]
1134
+ * GetText::Locale.default_rules_path : $LOAD_PATH is not well parsed.
1135
+ [by hallelujah]
1136
+ * locale_path.rb: Fixed warning message.
1137
+
1138
+ ### Thanks
1139
+
1140
+ * hallelujah
1141
+ * Sava Chankov
1142
+ * OZAWA Sakuro
1143
+ * Vladimir Dobriakov
1144
+
1145
+ ## 2.0.1: 2009-04-17
1146
+
1147
+ ### Changes
1148
+
1149
+ * Fixed bugs
1150
+ * doesn't work with ruby-1.8.5. [Reported by Dan Coutu]
1151
+ * GetText.locale= can't keep the locale. [Reported by Adam Ilan]
1152
+ * Break backward compatibility of bindtextdomain
1153
+ [Reported by Mamoru Tasaka(#24947), Mathieu Blondel]
1154
+ * Other trivial fixes/improvement.
1155
+ * 1.8 times faster than 2.0.0.
1156
+ * GetText::LocalePath is separated from GetText::TextDomainManager.
1157
+ Improve to find the locale path.
1158
+ * Enhance to support ruby-1.9.x [by OZAWA Sakuro]
1159
+
1160
+ ### Thanks
1161
+
1162
+ * OZAWA Sakuro
1163
+ * Tietew
1164
+ * Adam Ilan
1165
+ * Mamoru Tasaka
1166
+ * Mathieu Blondel
1167
+
1168
+ ## 2.0.0: 2009-03-21
1169
+
1170
+ ### Changes
1171
+
1172
+ * Separate this library to locale and rails-support to locale,
1173
+ locale\_rails, gettext\_activerecord, gettext\_rails.
1174
+ * Depends on locale(ruby-locale).
1175
+ * Removes to support rails.
1176
+ * A lot of referctoring, improvements.
1177
+ * Thread safe.
1178
+ * New APIs for gettext/tools instead of gettext/utils.
1179
+ * Move to github.com.
1180
+
1181
+ ### Special thanks
1182
+
1183
+ * Michael Grosser: A lot of improvement.
1184
+
1185
+ ### Thanks
1186
+
1187
+ * Tietew
1188
+ * Kazuhiro NISHIYAMA
1189
+ * Fabio M.A.
1190
+ * Tuptus
1191
+ * Morus Walter
1192
+ * Vladimir Dobriakov
1193
+ * Ramsey
data/gettext.gemspec CHANGED
@@ -15,8 +15,7 @@ So you can use GNU gettext tools for maintaining.
15
15
  EOD
16
16
  s.authors = ["Kouhei Sutou", "Masao Mutoh"]
17
17
  s.email = ["kou@clear-code.com", "mutomasa at gmail.com"]
18
- s.homepage = "http://ruby-gettext.github.com/"
19
- s.rubyforge_project = "gettext"
18
+ s.homepage = "https://ruby-gettext.github.io/"
20
19
  s.require_paths = ["lib"]
21
20
  Dir.chdir(base_dir) do
22
21
  s.files = Dir.glob("{locale,bin,data,doc/text,lib,po,samples,src,test}/**/*")
@@ -28,14 +27,18 @@ So you can use GNU gettext tools for maintaining.
28
27
  s.test_files = Dir.glob("test/test_*.rb")
29
28
  end
30
29
 
30
+ s.required_ruby_version = ">= 2.5.0"
31
+
32
+ s.add_runtime_dependency("erubi")
31
33
  s.add_runtime_dependency("locale", ">= 2.0.5")
34
+ s.add_runtime_dependency("prime")
35
+ s.add_runtime_dependency("racc")
32
36
  s.add_runtime_dependency("text", ">= 1.3.0")
33
- s.add_development_dependency("rake")
34
- s.add_development_dependency("racc")
35
- s.add_development_dependency("yard")
36
37
  s.add_development_dependency("kramdown")
38
+ s.add_development_dependency("rake")
39
+ s.add_development_dependency("red-datasets")
37
40
  s.add_development_dependency("test-unit")
38
- s.add_development_dependency("test-unit-notify")
39
41
  s.add_development_dependency("test-unit-rr")
40
- s.license = "Ruby or LGPLv3+"
42
+ s.add_development_dependency("yard")
43
+ s.licenses = ["Ruby", "LGPL-3.0+"]
41
44
  end
@@ -17,14 +17,18 @@ module GetText
17
17
  class LocalePath
18
18
  # The default locale paths.
19
19
  CONFIG_PREFIX = RbConfig::CONFIG['prefix'].gsub(/\/local/, "")
20
- DEFAULT_RULES = [
21
- "./locale/%{lang}/LC_MESSAGES/%{name}.mo",
22
- "./locale/%{lang}/%{name}.mo",
23
- "#{RbConfig::CONFIG['datadir']}/locale/%{lang}/LC_MESSAGES/%{name}.mo",
24
- "#{RbConfig::CONFIG['datadir'].gsub(/\/local/, "")}/locale/%{lang}/LC_MESSAGES/%{name}.mo",
25
- "#{CONFIG_PREFIX}/share/locale/%{lang}/LC_MESSAGES/%{name}.mo",
26
- "#{CONFIG_PREFIX}/local/share/locale/%{lang}/LC_MESSAGES/%{name}.mo"
27
- ].uniq
20
+ default_rules_candidates = [
21
+ "./locale/%{lang}/LC_MESSAGES/%{name}.mo",
22
+ "./locale/%{lang}/%{name}.mo",
23
+ ]
24
+ data_dir = RbConfig::CONFIG["datadir"]
25
+ if data_dir
26
+ default_rules_candidates << "#{data_dir}/locale/%{lang}/LC_MESSAGES/%{name}.mo"
27
+ default_rules_candidates << "#{data_dir.gsub(/\/local/, "")}/locale/%{lang}/LC_MESSAGES/%{name}.mo"
28
+ end
29
+ default_rules_candidates << "#{CONFIG_PREFIX}/share/locale/%{lang}/LC_MESSAGES/%{name}.mo"
30
+ default_rules_candidates << "#{CONFIG_PREFIX}/local/share/locale/%{lang}/LC_MESSAGES/%{name}.mo"
31
+ DEFAULT_RULES = default_rules_candidates.uniq
28
32
 
29
33
  class << self
30
34
  # Add default locale path. Usually you should use GetText.add_default_locale_path instead.
@@ -85,7 +89,11 @@ module GetText
85
89
  this_path_rules = rule % {:lang => "([^\/]+)", :name => name}
86
90
  Dir.glob(rule % {:lang => "*", :name => name}).each do |path|
87
91
  if /#{this_path_rules}/ =~ path
88
- @locale_paths[$1] = path.untaint unless @locale_paths[$1]
92
+ locale_path = $1
93
+ unless @locale_paths[locale_path]
94
+ path.untaint if RUBY_VERSION < "2.7"
95
+ @locale_paths[locale_path] = path
96
+ end
89
97
  end
90
98
  end
91
99
  end
data/lib/gettext/mo.rb CHANGED
@@ -3,7 +3,7 @@
3
3
  =begin
4
4
  mo.rb - A simple class for operating GNU MO file.
5
5
 
6
- Copyright (C) 2012-2017 Kouhei Sutou <kou@clear-code.com>
6
+ Copyright (C) 2012-2022 Sutou Kouhei <kou@clear-code.com>
7
7
  Copyright (C) 2003-2009 Masao Mutoh
8
8
  Copyright (C) 2002 Masahiro Sakai, Masao Mutoh
9
9
  Copyright (C) 2001 Masahiro Sakai
@@ -19,6 +19,8 @@
19
19
 
20
20
  require 'stringio'
21
21
 
22
+ require 'prime'
23
+
22
24
  module GetText
23
25
  class MO < Hash
24
26
  class InvalidFormat < RuntimeError; end;
@@ -168,19 +170,8 @@ module GetText
168
170
  ('1' * number) !~ /^1?$|^(11+?)\1+$/
169
171
  end
170
172
 
171
- begin
172
- require 'prime'
173
- def next_prime(seed)
174
- Prime.instance.find{|x| x > seed }
175
- end
176
- rescue LoadError
177
- def next_prime(seed)
178
- require 'mathn'
179
- prime = Prime.new
180
- while current = prime.succ
181
- return current if current > seed
182
- end
183
- end
173
+ def next_prime(seed)
174
+ Prime.instance.find{|x| x > seed }
184
175
  end
185
176
 
186
177
  HASHWORDBITS = 32
@@ -278,11 +269,13 @@ module GetText
278
269
 
279
270
  def load_from_file(filename)
280
271
  @filename = filename
281
- begin
282
- File.open(filename, 'rb'){|f| load_from_stream(f)}
283
- rescue => e
284
- e.set_backtrace("File: #{@filename}")
285
- raise e
272
+ File.open(filename, 'rb') do |f|
273
+ begin
274
+ load_from_stream(f)
275
+ rescue => e
276
+ e.set_backtrace(["#{filename}:#{f.lineno}"] + e.backtrace)
277
+ raise e
278
+ end
286
279
  end
287
280
  end
288
281
 
data/lib/gettext/po.rb CHANGED
@@ -222,11 +222,11 @@ module GetText
222
222
  def sort(entries)
223
223
  case @order
224
224
  when :reference, :references # :references is deprecated.
225
- sorted_entries = sort_by_reference(entries)
225
+ sort_by_reference(entries)
226
226
  when :msgid
227
- sorted_entries = sort_by_msgid(entries)
227
+ sort_by_msgid(entries)
228
228
  else
229
- sorted_entries = entries.to_a
229
+ entries.to_a
230
230
  end
231
231
  end
232
232
 
@@ -268,7 +268,7 @@ module GetText
268
268
  def sort_by_msgid(entries)
269
269
  entries.sort_by do |msgid_entry|
270
270
  # msgid_entry = [[msgctxt, msgid], POEntry]
271
- msgid_entry[0]
271
+ msgid_entry[0][1]
272
272
  end
273
273
  end
274
274
  end