gettext 3.3.8 → 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.
- checksums.yaml +4 -4
- data/README.md +2 -2
- data/Rakefile +1 -3
- data/doc/text/news.md +132 -0
- data/gettext.gemspec +7 -5
- data/lib/gettext/mo.rb +5 -14
- data/lib/gettext/po_entry.rb +31 -21
- data/lib/gettext/po_parser.rb +65 -59
- data/lib/gettext/text_domain_manager.rb +6 -5
- data/lib/gettext/tools/msgcat.rb +9 -2
- data/lib/gettext/tools/msginit.rb +11 -6
- data/lib/gettext/tools/msgmerge.rb +11 -6
- data/lib/gettext/tools/parser/erubi.rb +88 -0
- data/lib/gettext/tools/task.rb +3 -5
- data/lib/gettext/tools/xgettext.rb +15 -4
- data/lib/gettext/version.rb +3 -3
- data/locale/ja/LC_MESSAGES/gettext.mo +0 -0
- data/po/bg/gettext.edit.po +80 -75
- data/po/bg/gettext.po +6 -0
- data/po/bs/gettext.edit.po +80 -75
- data/po/bs/gettext.po +6 -0
- data/po/ca/gettext.edit.po +80 -75
- data/po/ca/gettext.po +6 -0
- data/po/cs/gettext.edit.po +80 -75
- data/po/cs/gettext.po +6 -0
- data/po/de/gettext.edit.po +80 -75
- data/po/de/gettext.po +6 -0
- data/po/el/gettext.edit.po +80 -75
- data/po/el/gettext.po +6 -0
- data/po/eo/gettext.edit.po +80 -75
- data/po/eo/gettext.po +6 -0
- data/po/es/gettext.edit.po +80 -75
- data/po/es/gettext.po +6 -0
- data/po/et/gettext.edit.po +80 -75
- data/po/et/gettext.po +6 -0
- data/po/fr/gettext.edit.po +80 -75
- data/po/fr/gettext.po +6 -0
- data/po/gettext.pot +92 -83
- data/po/hr/gettext.edit.po +80 -75
- data/po/hr/gettext.po +6 -0
- data/po/hu/gettext.edit.po +80 -75
- data/po/hu/gettext.po +6 -0
- data/po/it/gettext.edit.po +80 -75
- data/po/it/gettext.po +6 -0
- data/po/ja/gettext.edit.po +81 -76
- data/po/ja/gettext.po +7 -1
- data/po/ko/gettext.edit.po +80 -75
- data/po/ko/gettext.po +6 -0
- data/po/lv/gettext.edit.po +80 -75
- data/po/lv/gettext.po +6 -0
- data/po/nb/gettext.edit.po +80 -75
- data/po/nb/gettext.po +6 -0
- data/po/nl/gettext.edit.po +80 -75
- data/po/nl/gettext.po +6 -0
- data/po/pt_BR/gettext.edit.po +80 -75
- data/po/pt_BR/gettext.po +6 -0
- data/po/ru/gettext.edit.po +80 -75
- data/po/ru/gettext.po +6 -0
- data/po/sr/gettext.edit.po +80 -75
- data/po/sr/gettext.po +6 -0
- data/po/sv/gettext.edit.po +80 -72
- data/po/sv/gettext.po +6 -0
- data/po/uk/gettext.edit.po +80 -75
- data/po/uk/gettext.po +6 -0
- data/po/vi/gettext.edit.po +80 -75
- data/po/vi/gettext.po +6 -0
- data/po/zh/gettext.edit.po +80 -75
- data/po/zh/gettext.po +6 -0
- data/po/zh_TW/gettext.edit.po +80 -75
- data/po/zh_TW/gettext.po +6 -0
- data/samples/cgi/po/helloerb1.pot +3 -3
- data/samples/cgi/po/helloerb2.pot +3 -3
- data/samples/cgi/po/hellolib.pot +3 -3
- data/samples/cgi/po/main.pot +3 -3
- data/samples/po/bg/hello_gtk_builder.edit.po +15 -0
- data/samples/po/bg/hello_gtk_builder.po +12 -0
- data/samples/po/bs/hello_gtk_builder.edit.po +15 -0
- data/samples/po/bs/hello_gtk_builder.po +12 -0
- data/samples/po/ca/hello_gtk_builder.edit.po +15 -0
- data/samples/po/ca/hello_gtk_builder.po +12 -0
- data/samples/po/cs/hello_gtk_builder.edit.po +15 -0
- data/samples/po/cs/hello_gtk_builder.po +12 -0
- data/samples/po/de/hello_gtk_builder.edit.po +15 -0
- data/samples/po/de/hello_gtk_builder.po +12 -0
- data/samples/po/el/hello_gtk_builder.edit.po +15 -0
- data/samples/po/el/hello_gtk_builder.po +12 -0
- data/samples/po/eo/hello_gtk_builder.edit.po +15 -0
- data/samples/po/eo/hello_gtk_builder.po +12 -0
- data/samples/po/es/hello_gtk_builder.edit.po +15 -0
- data/samples/po/es/hello_gtk_builder.po +12 -0
- data/samples/po/fr/hello_gtk_builder.edit.po +15 -0
- data/samples/po/fr/hello_gtk_builder.po +12 -0
- data/samples/po/hello.pot +3 -3
- data/samples/po/hello2.pot +4 -4
- data/samples/po/hello_glade2.pot +8 -5
- data/samples/po/hello_gtk2.pot +4 -4
- data/samples/po/hello_gtk_builder.pot +18 -4
- data/samples/po/hello_noop.pot +4 -4
- data/samples/po/hello_plural.pot +4 -4
- data/samples/po/hello_tk.pot +4 -4
- data/samples/po/hr/hello_gtk_builder.edit.po +15 -0
- data/samples/po/hr/hello_gtk_builder.po +12 -0
- data/samples/po/hu/hello_gtk_builder.edit.po +15 -0
- data/samples/po/hu/hello_gtk_builder.po +12 -0
- data/samples/po/it/hello_gtk_builder.edit.po +15 -0
- data/samples/po/it/hello_gtk_builder.po +12 -0
- data/samples/po/ja/hello_gtk_builder.edit.po +15 -0
- data/samples/po/ja/hello_gtk_builder.po +12 -0
- data/samples/po/ko/hello_gtk_builder.edit.po +15 -0
- data/samples/po/ko/hello_gtk_builder.po +12 -0
- data/samples/po/lv/hello_gtk_builder.edit.po +15 -0
- data/samples/po/lv/hello_gtk_builder.po +12 -0
- data/samples/po/nb/hello_gtk_builder.edit.po +15 -0
- data/samples/po/nb/hello_gtk_builder.po +12 -0
- data/samples/po/nl/hello_gtk_builder.edit.po +15 -0
- data/samples/po/nl/hello_gtk_builder.po +12 -0
- data/samples/po/pt_BR/hello_gtk_builder.edit.po +15 -0
- data/samples/po/pt_BR/hello_gtk_builder.po +12 -0
- data/samples/po/ru/hello_gtk_builder.edit.po +15 -0
- data/samples/po/ru/hello_gtk_builder.po +12 -0
- data/samples/po/sr/hello_gtk_builder.edit.po +15 -0
- data/samples/po/sr/hello_gtk_builder.po +12 -0
- data/samples/po/sv/hello_gtk_builder.edit.po +15 -0
- data/samples/po/sv/hello_gtk_builder.po +12 -0
- data/samples/po/uk/hello_gtk_builder.edit.po +15 -0
- data/samples/po/uk/hello_gtk_builder.po +12 -0
- data/samples/po/vi/hello_gtk_builder.edit.po +15 -0
- data/samples/po/vi/hello_gtk_builder.po +12 -0
- data/samples/po/zh/hello_gtk_builder.edit.po +15 -0
- data/samples/po/zh/hello_gtk_builder.po +12 -0
- data/samples/po/zh_TW/hello_gtk_builder.edit.po +15 -0
- data/samples/po/zh_TW/hello_gtk_builder.po +12 -0
- data/src/po_parser.ry +48 -42
- data/test/fixtures/erb/case.rhtml +16 -0
- data/test/fixtures/simple.rb +4 -0
- data/test/locale/fr/LC_MESSAGES/test1.mo +0 -0
- data/test/locale/fr_BE/LC_MESSAGES/test1.mo +0 -0
- data/test/locale/fr_BE_Foo/LC_MESSAGES/test1.mo +0 -0
- data/test/locale/ja/LC_MESSAGES/_.mo +0 -0
- data/test/po/_.pot +3 -3
- data/test/po/backslash.pot +6 -4
- data/test/po/fr/test1.po +7 -0
- data/test/po/fr_BE/test1.po +24 -0
- data/test/po/fr_BE_Foo/test1.po +20 -0
- data/test/po/hello.pot +3 -3
- data/test/po/ja/_.edit.po +3 -3
- data/test/po/ja/_.po +15 -0
- data/test/po/ja/hello.edit.po +0 -1
- data/test/po/non_ascii.pot +4 -4
- data/test/po/np_.pot +3 -3
- data/test/po/ns_.pot +3 -3
- data/test/po/p_.pot +3 -3
- data/test/po/s_.pot +3 -3
- data/test/po/untranslated.pot +4 -4
- data/test/test_gettext.rb +23 -0
- data/test/test_locale_path.rb +12 -4
- data/test/test_parser.rb +62 -0
- data/test/test_po_entry.rb +20 -4
- data/test/test_po_parser.rb +44 -1
- data/test/tools/test_msgcat.rb +21 -1
- data/test/tools/test_msginit.rb +7 -2
- data/test/tools/test_msgmerge.rb +41 -3
- data/test/tools/test_xgettext.rb +100 -3
- metadata +49 -15
- data/test/fixtures/gtk_builder_ui_definitions.ui~ +0 -68
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 737177cc120acfd0387fdb23761ea8bf324a490b1d4b94f8edce692d22decad7
|
|
4
|
+
data.tar.gz: 67e7d803c3d9fc924e47d0b612cee9ac329eec67784c8e6e63763886f4602be0
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: f12a1f4f550947c5ed4628674f39d8a39857e56e461643ba102ded0f3344ed4015981a6ba13d10c9d411c7bfcdd7ba0c652642bfaaf3fa7a7d9e61f810e96cb3
|
|
7
|
+
data.tar.gz: 2db766ca9d05099d92d366b36a257c618c3524e404f6da5a2488cd401b3704373098e87424593ed200383087434e5115359e13abd90ddd25abe099b13e68620a
|
data/README.md
CHANGED
|
@@ -244,11 +244,11 @@ n_(fruits, 3)
|
|
|
244
244
|
|
|
245
245
|
### Interpolating translations
|
|
246
246
|
|
|
247
|
-
This is not a feature of gettext but worth noting. You can interpolate translated strings
|
|
247
|
+
This is not a feature of gettext but worth noting. You can interpolate translated strings with the ruby String `%` operator.
|
|
248
248
|
|
|
249
249
|
```ruby
|
|
250
250
|
N_("active"); N_("inactive"); N_("paused") # possible value of status for parser to find.
|
|
251
|
-
_("Your account is
|
|
251
|
+
_("Your account is %{account_state}.") % { account_state: _(status) }
|
|
252
252
|
```
|
|
253
253
|
|
|
254
254
|
|
data/Rakefile
CHANGED
|
@@ -56,12 +56,10 @@ file po_parser_rb_path => po_parser_ry_path do
|
|
|
56
56
|
|
|
57
57
|
File.open(po_parser_rb_path, "w") do |po_parser_rb|
|
|
58
58
|
po_parser_rb.puts(<<-EOH)
|
|
59
|
-
# -*- coding: utf-8 -*-
|
|
60
|
-
#
|
|
61
59
|
# po_parser.rb - Generate a .mo
|
|
62
60
|
#
|
|
63
61
|
# Copyright (C) 2003-2009 Masao Mutoh <mutomasa at gmail.com>
|
|
64
|
-
# Copyright (C) 2012 Kouhei
|
|
62
|
+
# Copyright (C) 2012-2023 Sutou Kouhei <kou@clear-code.com>
|
|
65
63
|
#
|
|
66
64
|
# You may redistribute it and/or modify it under the same
|
|
67
65
|
# license terms as Ruby or LGPL.
|
data/doc/text/news.md
CHANGED
|
@@ -1,5 +1,137 @@
|
|
|
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
|
+
|
|
3
135
|
## 3.3.8: 2021-06-09 {#version-3-3-8}
|
|
4
136
|
|
|
5
137
|
### Improvements
|
data/gettext.gemspec
CHANGED
|
@@ -29,14 +29,16 @@ So you can use GNU gettext tools for maintaining.
|
|
|
29
29
|
|
|
30
30
|
s.required_ruby_version = ">= 2.5.0"
|
|
31
31
|
|
|
32
|
+
s.add_runtime_dependency("erubi")
|
|
32
33
|
s.add_runtime_dependency("locale", ">= 2.0.5")
|
|
33
|
-
s.add_runtime_dependency("
|
|
34
|
+
s.add_runtime_dependency("prime")
|
|
35
|
+
s.add_runtime_dependency("racc")
|
|
34
36
|
s.add_runtime_dependency("text", ">= 1.3.0")
|
|
35
|
-
s.add_development_dependency("rake")
|
|
36
|
-
s.add_development_dependency("racc")
|
|
37
|
-
s.add_development_dependency("yard")
|
|
38
37
|
s.add_development_dependency("kramdown")
|
|
38
|
+
s.add_development_dependency("rake")
|
|
39
|
+
s.add_development_dependency("red-datasets")
|
|
39
40
|
s.add_development_dependency("test-unit")
|
|
40
41
|
s.add_development_dependency("test-unit-rr")
|
|
41
|
-
s.
|
|
42
|
+
s.add_development_dependency("yard")
|
|
43
|
+
s.licenses = ["Ruby", "LGPL-3.0+"]
|
|
42
44
|
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-
|
|
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
|
-
|
|
172
|
-
|
|
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
|
data/lib/gettext/po_entry.rb
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# Copyright (C) 2012-
|
|
1
|
+
# Copyright (C) 2012-2023 Sutou Kouhei <kou@clear-code.com>
|
|
2
2
|
# Copyright (C) 2010 masone (Christian Felder) <ema@rh-productions.ch>
|
|
3
3
|
# Copyright (C) 2009 Masao Mutoh
|
|
4
4
|
#
|
|
@@ -241,11 +241,12 @@ module GetText
|
|
|
241
241
|
def escape(string)
|
|
242
242
|
return "" if string.nil?
|
|
243
243
|
|
|
244
|
-
string.gsub(/
|
|
245
|
-
special_character = $1
|
|
244
|
+
string.gsub(/[\\"\t\r\n]/) do |special_character|
|
|
246
245
|
case special_character
|
|
247
246
|
when "\t"
|
|
248
247
|
"\\t"
|
|
248
|
+
when "\r"
|
|
249
|
+
"\\r"
|
|
249
250
|
when "\n"
|
|
250
251
|
"\\n"
|
|
251
252
|
else
|
|
@@ -281,6 +282,9 @@ module GetText
|
|
|
281
282
|
# Wraps long lines that is longer than the `:max_line_width`.
|
|
282
283
|
# Don't break long lines if `:max_line_width` is less than 0
|
|
283
284
|
# such as `-1`.
|
|
285
|
+
# @option options [Bool] :use_one_line_per_reference (false)
|
|
286
|
+
# Whether each reference comment uses one line or not. If this
|
|
287
|
+
# is `true`, `:max_line_width` is ignored for reference comment.
|
|
284
288
|
# @option options [Encoding] :encoding (nil)
|
|
285
289
|
# Encodes to the specific encoding.
|
|
286
290
|
def initialize(entry, options={})
|
|
@@ -404,34 +408,40 @@ module GetText
|
|
|
404
408
|
end
|
|
405
409
|
|
|
406
410
|
def format_reference_comment
|
|
407
|
-
max_line_width = @options[:max_line_width]
|
|
408
411
|
formatted_reference = String.new
|
|
409
|
-
if
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
412
|
+
if @options[:use_one_line_per_reference]
|
|
413
|
+
@entry.references&.each do |reference|
|
|
414
|
+
formatted_reference << "#{REFERENCE_COMMENT_MARK} #{reference}\n"
|
|
415
|
+
end
|
|
416
|
+
else
|
|
417
|
+
max_line_width = @options[:max_line_width]
|
|
418
|
+
if not @entry.references.nil? and not @entry.references.empty?
|
|
419
|
+
formatted_reference << REFERENCE_COMMENT_MARK
|
|
420
|
+
line_width = 2
|
|
421
|
+
@entry.references.each do |reference|
|
|
422
|
+
if max_line_width > 0 and
|
|
414
423
|
line_width + reference.size > max_line_width
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
424
|
+
formatted_reference << "\n"
|
|
425
|
+
formatted_reference << "#{REFERENCE_COMMENT_MARK} #{reference}"
|
|
426
|
+
line_width = 3 + reference.size
|
|
427
|
+
else
|
|
428
|
+
formatted_reference << " #{reference}"
|
|
429
|
+
line_width += 1 + reference.size
|
|
430
|
+
end
|
|
421
431
|
end
|
|
432
|
+
formatted_reference << "\n"
|
|
422
433
|
end
|
|
423
|
-
|
|
424
|
-
formatted_reference << "\n"
|
|
425
434
|
end
|
|
426
435
|
formatted_reference
|
|
427
436
|
end
|
|
428
437
|
|
|
429
438
|
def format_flag_comment
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
439
|
+
if @entry.flags.empty?
|
|
440
|
+
String.new
|
|
441
|
+
else
|
|
442
|
+
joined_flags = @entry.flags.join(", ")
|
|
443
|
+
format_comment(FLAG_MARK, joined_flags)
|
|
433
444
|
end
|
|
434
|
-
formatted_flags
|
|
435
445
|
end
|
|
436
446
|
|
|
437
447
|
def format_previous_comment
|
data/lib/gettext/po_parser.rb
CHANGED
|
@@ -1,17 +1,15 @@
|
|
|
1
|
-
# -*- coding: utf-8 -*-
|
|
2
|
-
#
|
|
3
1
|
# po_parser.rb - Generate a .mo
|
|
4
2
|
#
|
|
5
3
|
# Copyright (C) 2003-2009 Masao Mutoh <mutomasa at gmail.com>
|
|
6
|
-
# Copyright (C) 2012-
|
|
4
|
+
# Copyright (C) 2012-2023 Sutou Kouhei <kou@clear-code.com>
|
|
7
5
|
#
|
|
8
6
|
# You may redistribute it and/or modify it under the same
|
|
9
7
|
# license terms as Ruby or LGPL.
|
|
10
8
|
|
|
11
9
|
#
|
|
12
10
|
# DO NOT MODIFY!!!!
|
|
13
|
-
# This file is automatically generated by Racc 1.
|
|
14
|
-
# from Racc
|
|
11
|
+
# This file is automatically generated by Racc 1.7.1
|
|
12
|
+
# from Racc grammar file "".
|
|
15
13
|
#
|
|
16
14
|
|
|
17
15
|
require 'racc/parser.rb'
|
|
@@ -21,7 +19,7 @@ require "gettext/po"
|
|
|
21
19
|
module GetText
|
|
22
20
|
class POParser < Racc::Parser
|
|
23
21
|
|
|
24
|
-
module_eval(<<'...end po_parser.ry/module_eval...', 'po_parser.ry',
|
|
22
|
+
module_eval(<<'...end po_parser.ry/module_eval...', 'po_parser.ry', 126)
|
|
25
23
|
if GetText.respond_to?(:bindtextdomain)
|
|
26
24
|
include GetText
|
|
27
25
|
GetText.bindtextdomain("gettext")
|
|
@@ -46,31 +44,26 @@ module_eval(<<'...end po_parser.ry/module_eval...', 'po_parser.ry', 123)
|
|
|
46
44
|
@report_warning
|
|
47
45
|
end
|
|
48
46
|
|
|
49
|
-
def unescape(
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
47
|
+
def unescape(string)
|
|
48
|
+
string.gsub(/\\(.)/) do
|
|
49
|
+
escaped_character = $1
|
|
50
|
+
case escaped_character
|
|
51
|
+
when "t"
|
|
52
|
+
"\t"
|
|
53
|
+
when "r"
|
|
54
|
+
"\r"
|
|
55
|
+
when "n"
|
|
56
|
+
"\n"
|
|
57
|
+
else
|
|
58
|
+
escaped_character
|
|
59
|
+
end
|
|
60
|
+
end
|
|
55
61
|
end
|
|
56
62
|
private :unescape
|
|
57
63
|
|
|
58
|
-
def unescape_string(string)
|
|
59
|
-
string.gsub(/\\\\/, "\\")
|
|
60
|
-
end
|
|
61
|
-
private :unescape_string
|
|
62
|
-
|
|
63
64
|
def parse(str, data)
|
|
64
|
-
|
|
65
|
-
@extracted_comments = []
|
|
66
|
-
@references = []
|
|
67
|
-
@flags = []
|
|
68
|
-
@previous = []
|
|
69
|
-
@comments = []
|
|
65
|
+
clear
|
|
70
66
|
@data = data
|
|
71
|
-
@fuzzy = false
|
|
72
|
-
@msgctxt = nil
|
|
73
|
-
@msgid_plural = nil
|
|
74
67
|
|
|
75
68
|
str = str.strip
|
|
76
69
|
@q = []
|
|
@@ -104,7 +97,7 @@ module_eval(<<'...end po_parser.ry/module_eval...', 'po_parser.ry', 123)
|
|
|
104
97
|
@q.push [:COMMENT, $&]
|
|
105
98
|
str = $'
|
|
106
99
|
when /\A\"(.*)\"/
|
|
107
|
-
@q.push [:STRING,
|
|
100
|
+
@q.push [:STRING, unescape($1)]
|
|
108
101
|
str = $'
|
|
109
102
|
else
|
|
110
103
|
#c = str[0,1]
|
|
@@ -156,15 +149,7 @@ module_eval(<<'...end po_parser.ry/module_eval...', 'po_parser.ry', 123)
|
|
|
156
149
|
@data.set_comment(msgid, format_comment(@comments))
|
|
157
150
|
end
|
|
158
151
|
|
|
159
|
-
|
|
160
|
-
@extracted_comments = []
|
|
161
|
-
@references = []
|
|
162
|
-
@flags = []
|
|
163
|
-
@previous = []
|
|
164
|
-
@references = []
|
|
165
|
-
@comments.clear
|
|
166
|
-
@msgctxt = nil
|
|
167
|
-
@msgid_plural = nil
|
|
152
|
+
clear
|
|
168
153
|
end
|
|
169
154
|
|
|
170
155
|
def format_comment(comments)
|
|
@@ -176,7 +161,11 @@ module_eval(<<'...end po_parser.ry/module_eval...', 'po_parser.ry', 123)
|
|
|
176
161
|
end
|
|
177
162
|
|
|
178
163
|
def on_comment(comment)
|
|
179
|
-
|
|
164
|
+
if comment.start_with?(POFormat::FLAG_MARK)
|
|
165
|
+
content = comment[POFormat::FLAG_MARK.size..-1]
|
|
166
|
+
flags = parse_flags_line(content)
|
|
167
|
+
@fuzzy = true if flags.include?("fuzzy")
|
|
168
|
+
end
|
|
180
169
|
if @data.instance_of?(PO)
|
|
181
170
|
if comment == "#"
|
|
182
171
|
@translator_comments << ""
|
|
@@ -191,7 +180,7 @@ module_eval(<<'...end po_parser.ry/module_eval...', 'po_parser.ry', 123)
|
|
|
191
180
|
when POFormat::REFERENCE_COMMENT_MARK
|
|
192
181
|
@references.concat(parse_references_line(content))
|
|
193
182
|
when POFormat::FLAG_MARK
|
|
194
|
-
@flags.concat(
|
|
183
|
+
@flags.concat(flags)
|
|
195
184
|
when POFormat::PREVIOUS_COMMENT_MARK
|
|
196
185
|
@previous << content
|
|
197
186
|
else
|
|
@@ -260,7 +249,19 @@ module_eval(<<'...end po_parser.ry/module_eval...', 'po_parser.ry', 123)
|
|
|
260
249
|
end
|
|
261
250
|
|
|
262
251
|
def parse_flags_line(line)
|
|
263
|
-
line.split(
|
|
252
|
+
line.split(",").collect(&:strip)
|
|
253
|
+
end
|
|
254
|
+
|
|
255
|
+
def clear
|
|
256
|
+
@translator_comments = []
|
|
257
|
+
@extracted_comments = []
|
|
258
|
+
@references = []
|
|
259
|
+
@flags = []
|
|
260
|
+
@previous = []
|
|
261
|
+
@references = []
|
|
262
|
+
@comments = []
|
|
263
|
+
@msgctxt = nil
|
|
264
|
+
@msgid_plural = nil
|
|
264
265
|
end
|
|
265
266
|
...end po_parser.ry/module_eval...
|
|
266
267
|
##### State transition tables begin ###
|
|
@@ -349,6 +350,7 @@ Racc_arg = [
|
|
|
349
350
|
racc_shift_n,
|
|
350
351
|
racc_reduce_n,
|
|
351
352
|
racc_use_result_var ]
|
|
353
|
+
Ractor.make_shareable(Racc_arg) if defined?(Ractor)
|
|
352
354
|
|
|
353
355
|
Racc_token_to_s_table = [
|
|
354
356
|
"$end",
|
|
@@ -370,6 +372,7 @@ Racc_token_to_s_table = [
|
|
|
370
372
|
"plural_message",
|
|
371
373
|
"msgstr_plural",
|
|
372
374
|
"msgstr_plural_line" ]
|
|
375
|
+
Ractor.make_shareable(Racc_token_to_s_table) if defined?(Ractor)
|
|
373
376
|
|
|
374
377
|
Racc_debug_parser = true
|
|
375
378
|
|
|
@@ -387,8 +390,8 @@ Racc_debug_parser = true
|
|
|
387
390
|
|
|
388
391
|
module_eval(<<'.,.,', 'po_parser.ry', 26)
|
|
389
392
|
def _reduce_5(val, _values, result)
|
|
390
|
-
@msgctxt =
|
|
391
|
-
|
|
393
|
+
@msgctxt = val[1]
|
|
394
|
+
|
|
392
395
|
result
|
|
393
396
|
end
|
|
394
397
|
.,.,
|
|
@@ -399,9 +402,8 @@ module_eval(<<'.,.,', 'po_parser.ry', 26)
|
|
|
399
402
|
|
|
400
403
|
module_eval(<<'.,.,', 'po_parser.ry', 38)
|
|
401
404
|
def _reduce_8(val, _values, result)
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
msgstr = unescape(val[3])
|
|
405
|
+
msgid = val[1]
|
|
406
|
+
msgstr = val[3]
|
|
405
407
|
use_message_p = true
|
|
406
408
|
if @fuzzy and not msgid.empty?
|
|
407
409
|
use_message_p = (not ignore_fuzzy?)
|
|
@@ -411,18 +413,22 @@ module_eval(<<'.,.,', 'po_parser.ry', 38)
|
|
|
411
413
|
else
|
|
412
414
|
$stderr.print _("Warning: fuzzy message was used.\n")
|
|
413
415
|
end
|
|
414
|
-
$stderr.print " #{@po_file}: msgid '#{
|
|
416
|
+
$stderr.print " #{@po_file}: msgid '#{msgid}'\n"
|
|
415
417
|
end
|
|
416
418
|
end
|
|
417
419
|
@fuzzy = false
|
|
418
|
-
|
|
420
|
+
if use_message_p
|
|
421
|
+
on_message(msgid, msgstr)
|
|
422
|
+
else
|
|
423
|
+
clear
|
|
424
|
+
end
|
|
419
425
|
result = ""
|
|
420
|
-
|
|
426
|
+
|
|
421
427
|
result
|
|
422
428
|
end
|
|
423
429
|
.,.,
|
|
424
430
|
|
|
425
|
-
module_eval(<<'.,.,', 'po_parser.ry',
|
|
431
|
+
module_eval(<<'.,.,', 'po_parser.ry', 64)
|
|
426
432
|
def _reduce_9(val, _values, result)
|
|
427
433
|
if @fuzzy and ignore_fuzzy?
|
|
428
434
|
if val[1] != ""
|
|
@@ -439,53 +445,53 @@ module_eval(<<'.,.,', 'po_parser.ry', 61)
|
|
|
439
445
|
on_message(unescape(val[1]), unescape(val[4]))
|
|
440
446
|
end
|
|
441
447
|
result = ""
|
|
442
|
-
|
|
448
|
+
|
|
443
449
|
result
|
|
444
450
|
end
|
|
445
451
|
.,.,
|
|
446
452
|
|
|
447
|
-
module_eval(<<'.,.,', 'po_parser.ry',
|
|
453
|
+
module_eval(<<'.,.,', 'po_parser.ry', 85)
|
|
448
454
|
def _reduce_10(val, _values, result)
|
|
449
455
|
if val[0].size > 0
|
|
450
456
|
result = val[0] + "\000" + val[1]
|
|
451
457
|
else
|
|
452
458
|
result = ""
|
|
453
459
|
end
|
|
454
|
-
|
|
460
|
+
|
|
455
461
|
result
|
|
456
462
|
end
|
|
457
463
|
.,.,
|
|
458
464
|
|
|
459
465
|
# reduce 11 omitted
|
|
460
466
|
|
|
461
|
-
module_eval(<<'.,.,', 'po_parser.ry',
|
|
467
|
+
module_eval(<<'.,.,', 'po_parser.ry', 97)
|
|
462
468
|
def _reduce_12(val, _values, result)
|
|
463
469
|
result = val[2]
|
|
464
|
-
|
|
470
|
+
|
|
465
471
|
result
|
|
466
472
|
end
|
|
467
473
|
.,.,
|
|
468
474
|
|
|
469
|
-
module_eval(<<'.,.,', 'po_parser.ry',
|
|
475
|
+
module_eval(<<'.,.,', 'po_parser.ry', 104)
|
|
470
476
|
def _reduce_13(val, _values, result)
|
|
471
477
|
on_comment(val[0])
|
|
472
|
-
|
|
478
|
+
|
|
473
479
|
result
|
|
474
480
|
end
|
|
475
481
|
.,.,
|
|
476
482
|
|
|
477
|
-
module_eval(<<'.,.,', 'po_parser.ry',
|
|
483
|
+
module_eval(<<'.,.,', 'po_parser.ry', 112)
|
|
478
484
|
def _reduce_14(val, _values, result)
|
|
479
485
|
result = val.delete_if{|item| item == ""}.join
|
|
480
|
-
|
|
486
|
+
|
|
481
487
|
result
|
|
482
488
|
end
|
|
483
489
|
.,.,
|
|
484
490
|
|
|
485
|
-
module_eval(<<'.,.,', 'po_parser.ry',
|
|
491
|
+
module_eval(<<'.,.,', 'po_parser.ry', 116)
|
|
486
492
|
def _reduce_15(val, _values, result)
|
|
487
493
|
result = val[0]
|
|
488
|
-
|
|
494
|
+
|
|
489
495
|
result
|
|
490
496
|
end
|
|
491
497
|
.,.,
|
|
@@ -77,11 +77,12 @@ module GetText
|
|
|
77
77
|
end
|
|
78
78
|
|
|
79
79
|
def each_text_domains(klass) #:nodoc:
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
80
|
+
Locale.candidates.each do |lang|
|
|
81
|
+
ClassInfo.related_classes(klass, @@gettext_classes).each do |target|
|
|
82
|
+
if group = @@text_domain_group_pool[target]
|
|
83
|
+
group.text_domains.each do |text_domain|
|
|
84
|
+
yield text_domain, lang
|
|
85
|
+
end
|
|
85
86
|
end
|
|
86
87
|
end
|
|
87
88
|
end
|
data/lib/gettext/tools/msgcat.rb
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# Copyright (C) 2014-
|
|
1
|
+
# Copyright (C) 2014-2023 Sutou Kouhei <kou@clear-code.com>
|
|
2
2
|
#
|
|
3
3
|
# License: Ruby's or LGPL
|
|
4
4
|
#
|
|
@@ -200,7 +200,8 @@ module GetText
|
|
|
200
200
|
@output = nil
|
|
201
201
|
@order = nil
|
|
202
202
|
@po_format_options = {
|
|
203
|
-
:
|
|
203
|
+
max_line_width: POEntry::Formatter::DEFAULT_MAX_LINE_WIDTH,
|
|
204
|
+
use_one_line_per_reference: false,
|
|
204
205
|
}
|
|
205
206
|
@include_fuzzy = true
|
|
206
207
|
@report_warning = true
|
|
@@ -322,6 +323,12 @@ module GetText
|
|
|
322
323
|
@po_format_options[:max_line_width] = max_line_width
|
|
323
324
|
end
|
|
324
325
|
|
|
326
|
+
parser.on("--[no-]use-one-line-per-reference",
|
|
327
|
+
_("Use one line for each reference comment"),
|
|
328
|
+
"(#{@po_format_options[:use_one_line_per_reference]})") do |use|
|
|
329
|
+
@po_format_options[:use_one_line_per_reference] = use
|
|
330
|
+
end
|
|
331
|
+
|
|
325
332
|
parser.on("--no-fuzzy",
|
|
326
333
|
_("Ignore fuzzy entries")) do |include_fuzzy|
|
|
327
334
|
@include_fuzzy = include_fuzzy
|
|
@@ -21,7 +21,10 @@
|
|
|
21
21
|
require "etc"
|
|
22
22
|
require "optparse"
|
|
23
23
|
|
|
24
|
-
|
|
24
|
+
begin
|
|
25
|
+
require "datasets"
|
|
26
|
+
rescue LoadError
|
|
27
|
+
end
|
|
25
28
|
require "locale/info"
|
|
26
29
|
|
|
27
30
|
require "gettext"
|
|
@@ -376,11 +379,13 @@ module GetText
|
|
|
376
379
|
def convert
|
|
377
380
|
n_plurals = nil
|
|
378
381
|
expression = nil
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
382
|
+
if defined?(Datasets::CLDRPlurals)
|
|
383
|
+
plurals = Datasets::CLDRPlurals.new
|
|
384
|
+
plurals.each do |locale|
|
|
385
|
+
next unless locale.name == @language
|
|
386
|
+
n_plurals, expression = convert_plural_rules(locale.rules)
|
|
387
|
+
break
|
|
388
|
+
end
|
|
384
389
|
end
|
|
385
390
|
"nplurals=#{n_plurals}; plural=#{expression};"
|
|
386
391
|
end
|