gettext 3.3.6 → 3.4.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (116) hide show
  1. checksums.yaml +4 -4
  2. data/Rakefile +4 -0
  3. data/doc/text/news.md +58 -0
  4. data/gettext.gemspec +4 -3
  5. data/lib/gettext/mo.rb +7 -5
  6. data/lib/gettext/tools/msginit.rb +221 -50
  7. data/lib/gettext/tools/msgmerge.rb +13 -0
  8. data/lib/gettext/tools/parser/glade.rb +38 -40
  9. data/lib/gettext/tools/parser/gtk_builder_ui_definitions.rb +6 -3
  10. data/lib/gettext/tools/parser/ruby.rb +2 -2
  11. data/lib/gettext/version.rb +2 -2
  12. data/locale/bg/LC_MESSAGES/gettext.mo +0 -0
  13. data/locale/bs/LC_MESSAGES/gettext.mo +0 -0
  14. data/locale/ca/LC_MESSAGES/gettext.mo +0 -0
  15. data/locale/cs/LC_MESSAGES/gettext.mo +0 -0
  16. data/locale/de/LC_MESSAGES/gettext.mo +0 -0
  17. data/locale/el/LC_MESSAGES/gettext.mo +0 -0
  18. data/locale/eo/LC_MESSAGES/gettext.mo +0 -0
  19. data/locale/es/LC_MESSAGES/gettext.mo +0 -0
  20. data/locale/et/LC_MESSAGES/gettext.mo +0 -0
  21. data/locale/fr/LC_MESSAGES/gettext.mo +0 -0
  22. data/locale/hr/LC_MESSAGES/gettext.mo +0 -0
  23. data/locale/hu/LC_MESSAGES/gettext.mo +0 -0
  24. data/locale/it/LC_MESSAGES/gettext.mo +0 -0
  25. data/locale/ja/LC_MESSAGES/gettext.mo +0 -0
  26. data/locale/ko/LC_MESSAGES/gettext.mo +0 -0
  27. data/locale/lv/LC_MESSAGES/gettext.mo +0 -0
  28. data/locale/nb/LC_MESSAGES/gettext.mo +0 -0
  29. data/locale/nl/LC_MESSAGES/gettext.mo +0 -0
  30. data/locale/pt_BR/LC_MESSAGES/gettext.mo +0 -0
  31. data/locale/ru/LC_MESSAGES/gettext.mo +0 -0
  32. data/locale/sr/LC_MESSAGES/gettext.mo +0 -0
  33. data/locale/uk/LC_MESSAGES/gettext.mo +0 -0
  34. data/locale/vi/LC_MESSAGES/gettext.mo +0 -0
  35. data/locale/zh/LC_MESSAGES/gettext.mo +0 -0
  36. data/locale/zh_TW/LC_MESSAGES/gettext.mo +0 -0
  37. data/po/bg/gettext.edit.po +36 -554
  38. data/po/bg/gettext.po +0 -423
  39. data/po/bs/gettext.edit.po +36 -554
  40. data/po/bs/gettext.po +0 -423
  41. data/po/ca/gettext.edit.po +36 -554
  42. data/po/ca/gettext.po +0 -423
  43. data/po/cs/gettext.edit.po +36 -554
  44. data/po/cs/gettext.po +0 -423
  45. data/po/de/gettext.edit.po +36 -554
  46. data/po/de/gettext.po +0 -423
  47. data/po/el/gettext.edit.po +36 -554
  48. data/po/el/gettext.po +0 -423
  49. data/po/eo/gettext.edit.po +36 -554
  50. data/po/eo/gettext.po +0 -423
  51. data/po/es/gettext.edit.po +36 -554
  52. data/po/es/gettext.po +0 -423
  53. data/po/et/gettext.edit.po +36 -554
  54. data/po/et/gettext.po +0 -423
  55. data/po/fr/gettext.edit.po +36 -554
  56. data/po/fr/gettext.po +0 -423
  57. data/po/gettext.pot +37 -619
  58. data/po/hr/gettext.edit.po +36 -554
  59. data/po/hr/gettext.po +0 -423
  60. data/po/hu/gettext.edit.po +36 -554
  61. data/po/hu/gettext.po +0 -423
  62. data/po/it/gettext.edit.po +36 -554
  63. data/po/it/gettext.po +0 -423
  64. data/po/ja/gettext.edit.po +36 -554
  65. data/po/ja/gettext.po +0 -423
  66. data/po/ko/gettext.edit.po +36 -554
  67. data/po/ko/gettext.po +0 -423
  68. data/po/lv/gettext.edit.po +36 -554
  69. data/po/lv/gettext.po +0 -423
  70. data/po/nb/gettext.edit.po +36 -554
  71. data/po/nb/gettext.po +0 -423
  72. data/po/nl/gettext.edit.po +36 -554
  73. data/po/nl/gettext.po +0 -423
  74. data/po/pt_BR/gettext.edit.po +36 -554
  75. data/po/pt_BR/gettext.po +0 -423
  76. data/po/ru/gettext.edit.po +36 -554
  77. data/po/ru/gettext.po +0 -423
  78. data/po/sr/gettext.edit.po +36 -554
  79. data/po/sr/gettext.po +0 -423
  80. data/po/sv/gettext.edit.po +34 -555
  81. data/po/sv/gettext.po +0 -423
  82. data/po/uk/gettext.edit.po +36 -554
  83. data/po/uk/gettext.po +0 -423
  84. data/po/vi/gettext.edit.po +36 -554
  85. data/po/vi/gettext.po +0 -423
  86. data/po/zh/gettext.edit.po +36 -554
  87. data/po/zh/gettext.po +0 -423
  88. data/po/zh_TW/gettext.edit.po +36 -554
  89. data/po/zh_TW/gettext.po +0 -423
  90. data/test/fixtures/_.rb +1 -1
  91. data/test/fixtures/{gladeparser.glade → glade/2.glade} +0 -0
  92. data/test/fixtures/glade/3.glade +63 -0
  93. data/test/fixtures/multi_text_domain.rb +12 -12
  94. data/test/fixtures/np_.rb +1 -1
  95. data/test/fixtures/ns_.rb +1 -1
  96. data/test/fixtures/p_.rb +1 -1
  97. data/test/fixtures/ruby/{percent_i.rb → percent_lower_i.rb} +0 -0
  98. data/test/fixtures/ruby/{percent_w.rb → percent_lower_w.rb} +0 -0
  99. data/test/fixtures/ruby/{percent_I.rb → percent_upper_i.rb} +0 -0
  100. data/test/fixtures/ruby/{percent_W.rb → percent_upper_w.rb} +0 -0
  101. data/test/fixtures/s_.rb +1 -1
  102. data/test/fixtures/simple.rb +1 -1
  103. data/test/fixtures/upper_nn_.rb +77 -0
  104. data/test/po/_.pot +20 -4
  105. data/test/po/ja/_.edit.po +24 -0
  106. data/test/po/np_.pot +8 -5
  107. data/test/po/ns_.pot +6 -4
  108. data/test/po/p_.pot +3 -3
  109. data/test/po/s_.pot +6 -4
  110. data/test/test_parser.rb +35 -17
  111. data/test/tools/parser/test_glade.rb +91 -0
  112. data/test/tools/parser/test_gtk_builder_ui_definitions.rb +19 -1
  113. data/test/tools/parser/test_ruby.rb +4 -4
  114. data/test/tools/test_msginit.rb +82 -3
  115. data/test/tools/test_msgmerge.rb +34 -0
  116. metadata +28 -11
@@ -0,0 +1,91 @@
1
+ # Copyright (C) 2009-2010 Masao Mutoh
2
+ # Copyright (C) 2021 Sutou Kouhei <kou@clear-code.com>
3
+ #
4
+ # License: Ruby's or LGPL
5
+ #
6
+ # This library is free software: you can redistribute it and/or modify
7
+ # it under the terms of the GNU Lesser General Public License as published by
8
+ # the Free Software Foundation, either version 3 of the License, or
9
+ # (at your option) any later version.
10
+ #
11
+ # This library is distributed in the hope that it will be useful,
12
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
13
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
+ # GNU Lesser General Public License for more details.
15
+ #
16
+ # You should have received a copy of the GNU Lesser General Public License
17
+ # along with this program. If not, see <http://www.gnu.org/licenses/>.
18
+
19
+ require "gettext/tools/parser/glade"
20
+
21
+ class TestGladeParser < Test::Unit::TestCase
22
+ include Helper::Parser
23
+
24
+ def parse(file)
25
+ GetText::GladeParser.parse(fixture_path(file))
26
+ end
27
+
28
+ def test_2
29
+ assert_parse([
30
+ {
31
+ msgid: "window1",
32
+ references: ["glade/2.glade:8"],
33
+ },
34
+ {
35
+ msgid: "normal text",
36
+ references: ["glade/2.glade:29"],
37
+ },
38
+ {
39
+ msgid: "1st line\n2nd line\n3rd line",
40
+ references: ["glade/2.glade:50"],
41
+ },
42
+ {
43
+ msgid:
44
+ "<span color=\"red\" " +
45
+ "weight=\"bold\" " +
46
+ "size=\"large\">markup </span>",
47
+ references: ["glade/2.glade:73"],
48
+ },
49
+ {
50
+ msgid:
51
+ "<span color=\"red\">1st line markup </span>\n" +
52
+ "<span color=\"blue\">2nd line markup</span>",
53
+ references: ["glade/2.glade:94"],
54
+ },
55
+ {
56
+ msgid:
57
+ "<span>" +
58
+ "&quot;markup&quot; with &lt;escaped strings&gt;" +
59
+ "</span>",
60
+ references: ["glade/2.glade:116"],
61
+ },
62
+ {
63
+ msgid: "duplicated",
64
+ references: [
65
+ "glade/2.glade:137",
66
+ "glade/2.glade:158",
67
+ ],
68
+ },
69
+ ],
70
+ "glade/2.glade")
71
+ end
72
+
73
+
74
+ class TestDetect < self
75
+ def target?(file)
76
+ GetText::GladeParser.target?(fixture_path(file))
77
+ end
78
+
79
+ def test_2
80
+ assert do
81
+ target?("glade/2.glade")
82
+ end
83
+ end
84
+
85
+ def test_3
86
+ assert do
87
+ not target?("glade/3.glade")
88
+ end
89
+ end
90
+ end
91
+ end
@@ -24,7 +24,7 @@ class TestGtkBuilderUIDefinitionsParser < Test::Unit::TestCase
24
24
  GetText::GtkBuilderUIDefinitionsParser.parse(fixture_path(file))
25
25
  end
26
26
 
27
- def test_all
27
+ def test_ui
28
28
  assert_parse([
29
29
  {
30
30
  :msgid => "label with context",
@@ -42,4 +42,22 @@ class TestGtkBuilderUIDefinitionsParser < Test::Unit::TestCase
42
42
  ],
43
43
  "gtk_builder_ui_definitions.ui")
44
44
  end
45
+
46
+ class TestDetect < self
47
+ def target?(file)
48
+ GetText::GtkBuilderUIDefinitionsParser.target?(fixture_path(file))
49
+ end
50
+
51
+ def test_ui
52
+ assert do
53
+ target?("gtk_builder_ui_definitions.ui")
54
+ end
55
+ end
56
+
57
+ def test_glade_3
58
+ assert do
59
+ target?("glade/3.glade")
60
+ end
61
+ end
62
+ end
45
63
  end
@@ -285,22 +285,22 @@ class TestRubyParser < Test::Unit::TestCase
285
285
  sub_test_case("parse") do
286
286
  def test_percent_w
287
287
  assert_parse([],
288
- "percent_w.rb")
288
+ "percent_lower_w.rb")
289
289
  end
290
290
 
291
291
  def test_percent_W
292
292
  assert_parse([],
293
- "percent_W.rb")
293
+ "percent_upper_w.rb")
294
294
  end
295
295
 
296
296
  def test_percent_i
297
297
  assert_parse([],
298
- "percent_i.rb")
298
+ "percent_lower_i.rb")
299
299
  end
300
300
 
301
301
  def test_percent_I
302
302
  assert_parse([],
303
- "percent_I.rb")
303
+ "percent_upper_i.rb")
304
304
  end
305
305
 
306
306
  private
@@ -1,7 +1,5 @@
1
- # -*- coding: utf-8 -*-
2
- #
3
1
  # Copyright (C) 2012 Haruka Yoshihara <yoshihara@clear-code.com>
4
- # Copyright (C) 2012-2017 Kouhei Sutou <kou@clear-code.com>
2
+ # Copyright (C) 2012-2021 Sutou Kouhei <kou@clear-code.com>
5
3
  #
6
4
  # License: Ruby's or LGPL
7
5
  #
@@ -314,6 +312,11 @@ EOF
314
312
  end
315
313
 
316
314
  class TestPluralForms < self
315
+ def setup
316
+ super
317
+ omit("Red Datasets is required") unless defined?(Datasets::CLDRPlurals)
318
+ end
319
+
317
320
  def run_msginit(pot_header_options={})
318
321
  create_pot_file("test.pot", pot_header_options)
319
322
  po_file_path = "output.po"
@@ -327,5 +330,81 @@ EOF
327
330
  run_msginit(:have_plural_forms => false))
328
331
  end
329
332
  end
333
+
334
+ def test_ja
335
+ assert_equal("nplurals=1; plural=0;",
336
+ @msginit.__send__(:plural_forms, "ja"))
337
+ end
338
+
339
+ def test_en
340
+ assert_equal("nplurals=2; plural=n != 1;",
341
+ @msginit.__send__(:plural_forms, "en"))
342
+ end
343
+
344
+ def test_fr
345
+ assert_equal("nplurals=2; plural=n > 1;",
346
+ @msginit.__send__(:plural_forms, "fr"))
347
+ end
348
+
349
+ def test_lv
350
+ assert_equal("nplurals=3; " +
351
+ "plural=((n % 10) == 1) && ((n % 100) != 11) ? 0 : " +
352
+ "((n % 10) == 0) || ((n % 100) >= 11 && (n % 100) <= 19) " +
353
+ "? 1 : 2;",
354
+ @msginit.__send__(:plural_forms, "lv"))
355
+ end
356
+
357
+ def test_ga
358
+ assert_equal("nplurals=5; " +
359
+ "plural=(n == 1) ? 0 : (n == 2) ? 1 : " +
360
+ "(n >= 3 && n <= 6) ? 2 : (n >= 7 && n <= 10) ? 3 : 4;",
361
+ @msginit.__send__(:plural_forms, "ga"))
362
+ end
363
+
364
+ def test_ro
365
+ assert_equal("nplurals=3; " +
366
+ "plural=(n == 1) ? 0 : " +
367
+ "(n == 0) || ((n % 100) >= 2 && (n % 100) <= 19) ? 1 : 2;",
368
+ @msginit.__send__(:plural_forms, "ro"))
369
+ end
370
+
371
+ def test_lt
372
+ assert_equal("nplurals=3; " +
373
+ "plural=((n % 10) == 1) && " +
374
+ "((n % 100) < 11 || (n % 100) > 19) ? 0 : " +
375
+ "((n % 10) >= 2 && (n % 10) <= 9) && " +
376
+ "((n % 100) < 11 || (n % 100) > 19) ? 1 : 2;",
377
+ @msginit.__send__(:plural_forms, "lt"))
378
+ end
379
+
380
+ def test_ru
381
+ assert_equal("nplurals=3; " +
382
+ "plural=((n % 10) == 1) && ((n % 100) != 11) ? 0 : " +
383
+ "((n % 10) >= 2 && (n % 10) <= 4) && " +
384
+ "((n % 100) < 12 || (n % 100) > 14) ? 1 : 2;",
385
+ @msginit.__send__(:plural_forms, "ru"))
386
+ end
387
+
388
+ def test_cs
389
+ assert_equal("nplurals=3; " +
390
+ "plural=(n == 1) ? 0 : (n >= 2 && n <= 4) ? 1 : 2;",
391
+ @msginit.__send__(:plural_forms, "cs"))
392
+ end
393
+
394
+ def test_pl
395
+ assert_equal("nplurals=3; " +
396
+ "plural=(n == 1) ? 0 : " +
397
+ "((n % 10) >= 2 && (n % 10) <= 4) && " +
398
+ "((n % 100) < 12 || (n % 100) > 14) ? 1 : 2;",
399
+ @msginit.__send__(:plural_forms, "pl"))
400
+ end
401
+
402
+ def test_sl
403
+ assert_equal("nplurals=4; " +
404
+ "plural=((n % 100) == 1) ? 0 : " +
405
+ "((n % 100) == 2) ? 1 : " +
406
+ "((n % 100) >= 3 && (n % 100) <= 4) ? 2 : 3;",
407
+ @msginit.__send__(:plural_forms, "sl"))
408
+ end
330
409
  end
331
410
  end
@@ -784,6 +784,40 @@ msgstr ""
784
784
  end
785
785
  end
786
786
 
787
+ class TestWarning < self
788
+ def pot_content
789
+ <<-POT
790
+ msgid "Hello"
791
+ msgstr ""
792
+ POT
793
+ end
794
+
795
+ def po_content
796
+ <<-PO
797
+ #, fuzzy
798
+ msgid "Hello!"
799
+ msgstr "Bonjour!"
800
+ PO
801
+ end
802
+
803
+ def test_default
804
+ _stdout, stderr = capture_output do
805
+ @msgmerge.run(@po_file_path, @pot_file_path)
806
+ end
807
+ assert_equal(<<-STDERR, stderr)
808
+ Warning: fuzzy message was used.
809
+ #{@po_file_path}: msgid 'Hello!'
810
+ STDERR
811
+ end
812
+
813
+ def test_no_report_warning
814
+ _stdout, stderr = capture_output do
815
+ @msgmerge.run("--no-report-warning", @po_file_path, @pot_file_path)
816
+ end
817
+ assert_equal("", stderr)
818
+ end
819
+ end
820
+
787
821
  class TestObsoleteEntries < self
788
822
  def pot_content
789
823
  <<-POT
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gettext
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.3.6
4
+ version: 3.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kouhei Sutou
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2020-08-03 00:00:00.000000000 Z
12
+ date: 2021-08-27 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: locale
@@ -40,7 +40,7 @@ dependencies:
40
40
  - !ruby/object:Gem::Version
41
41
  version: 1.3.0
42
42
  - !ruby/object:Gem::Dependency
43
- name: rake
43
+ name: kramdown
44
44
  requirement: !ruby/object:Gem::Requirement
45
45
  requirements:
46
46
  - - ">="
@@ -68,7 +68,7 @@ dependencies:
68
68
  - !ruby/object:Gem::Version
69
69
  version: '0'
70
70
  - !ruby/object:Gem::Dependency
71
- name: yard
71
+ name: rake
72
72
  requirement: !ruby/object:Gem::Requirement
73
73
  requirements:
74
74
  - - ">="
@@ -82,7 +82,7 @@ dependencies:
82
82
  - !ruby/object:Gem::Version
83
83
  version: '0'
84
84
  - !ruby/object:Gem::Dependency
85
- name: kramdown
85
+ name: red-datasets
86
86
  requirement: !ruby/object:Gem::Requirement
87
87
  requirements:
88
88
  - - ">="
@@ -123,6 +123,20 @@ dependencies:
123
123
  - - ">="
124
124
  - !ruby/object:Gem::Version
125
125
  version: '0'
126
+ - !ruby/object:Gem::Dependency
127
+ name: yard
128
+ requirement: !ruby/object:Gem::Requirement
129
+ requirements:
130
+ - - ">="
131
+ - !ruby/object:Gem::Version
132
+ version: '0'
133
+ type: :development
134
+ prerelease: false
135
+ version_requirements: !ruby/object:Gem::Requirement
136
+ requirements:
137
+ - - ">="
138
+ - !ruby/object:Gem::Version
139
+ version: '0'
126
140
  description: |
127
141
  Gettext is a GNU gettext-like program for Ruby.
128
142
  The catalog file(po-file) is same format with GNU gettext.
@@ -1519,7 +1533,8 @@ files:
1519
1533
  - test/fixtures/erb/ascii.rxml
1520
1534
  - test/fixtures/erb/minus.rhtml
1521
1535
  - test/fixtures/erb/non_ascii.rhtml
1522
- - test/fixtures/gladeparser.glade
1536
+ - test/fixtures/glade/2.glade
1537
+ - test/fixtures/glade/3.glade
1523
1538
  - test/fixtures/gtk_builder_ui_definitions.ui
1524
1539
  - test/fixtures/gtk_builder_ui_definitions.ui~
1525
1540
  - test/fixtures/hello.rb
@@ -1530,15 +1545,16 @@ files:
1530
1545
  - test/fixtures/ns_.rb
1531
1546
  - test/fixtures/ns_/custom.rb
1532
1547
  - test/fixtures/p_.rb
1533
- - test/fixtures/ruby/percent_I.rb
1534
- - test/fixtures/ruby/percent_W.rb
1535
- - test/fixtures/ruby/percent_i.rb
1536
- - test/fixtures/ruby/percent_w.rb
1548
+ - test/fixtures/ruby/percent_lower_i.rb
1549
+ - test/fixtures/ruby/percent_lower_w.rb
1550
+ - test/fixtures/ruby/percent_upper_i.rb
1551
+ - test/fixtures/ruby/percent_upper_w.rb
1537
1552
  - test/fixtures/s_.rb
1538
1553
  - test/fixtures/s_/custom.rb
1539
1554
  - test/fixtures/simple.rb
1540
1555
  - test/fixtures/untranslated.rb
1541
1556
  - test/fixtures/upper_n_.rb
1557
+ - test/fixtures/upper_nn_.rb
1542
1558
  - test/helper.rb
1543
1559
  - test/locale/cr/LC_MESSAGES/plural.mo
1544
1560
  - test/locale/da/LC_MESSAGES/plural.mo
@@ -1650,6 +1666,7 @@ files:
1650
1666
  - test/tools/files/simple_2.po
1651
1667
  - test/tools/files/simple_translation.rb
1652
1668
  - test/tools/files/version.po
1669
+ - test/tools/parser/test_glade.rb
1653
1670
  - test/tools/parser/test_gtk_builder_ui_definitions.rb
1654
1671
  - test/tools/parser/test_ruby.rb
1655
1672
  - test/tools/test.pot
@@ -1677,7 +1694,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
1677
1694
  - !ruby/object:Gem::Version
1678
1695
  version: '0'
1679
1696
  requirements: []
1680
- rubygems_version: 3.2.0.rc.1
1697
+ rubygems_version: 3.3.0.dev
1681
1698
  signing_key:
1682
1699
  specification_version: 4
1683
1700
  summary: Gettext is a pure Ruby libary and tools to localize messages.