gettext 3.3.0 → 3.3.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (110) hide show
  1. checksums.yaml +4 -4
  2. data/doc/text/news.md +23 -0
  3. data/lib/gettext/tools/msginit.rb +5 -4
  4. data/lib/gettext/tools/parser/gtk_builder_ui_definitions.rb +129 -0
  5. data/lib/gettext/tools/parser/ruby.rb +48 -22
  6. data/lib/gettext/tools/xgettext.rb +6 -6
  7. data/lib/gettext/version.rb +1 -1
  8. data/locale/ja/LC_MESSAGES/gettext.mo +0 -0
  9. data/po/bg/gettext.edit.po +12 -4
  10. data/po/bg/gettext.po +7 -3
  11. data/po/bs/gettext.edit.po +12 -4
  12. data/po/bs/gettext.po +7 -3
  13. data/po/ca/gettext.edit.po +12 -4
  14. data/po/ca/gettext.po +7 -3
  15. data/po/cs/gettext.edit.po +12 -4
  16. data/po/cs/gettext.po +7 -3
  17. data/po/de/gettext.edit.po +12 -4
  18. data/po/de/gettext.po +7 -3
  19. data/po/el/gettext.edit.po +12 -4
  20. data/po/el/gettext.po +7 -3
  21. data/po/eo/gettext.edit.po +12 -4
  22. data/po/eo/gettext.po +7 -3
  23. data/po/es/gettext.edit.po +12 -4
  24. data/po/es/gettext.po +7 -3
  25. data/po/et/gettext.edit.po +12 -4
  26. data/po/et/gettext.po +7 -3
  27. data/po/fr/gettext.edit.po +12 -4
  28. data/po/fr/gettext.po +7 -3
  29. data/po/gettext.pot +15 -9
  30. data/po/hr/gettext.edit.po +12 -4
  31. data/po/hr/gettext.po +7 -3
  32. data/po/hu/gettext.edit.po +12 -4
  33. data/po/hu/gettext.po +7 -3
  34. data/po/it/gettext.edit.po +12 -4
  35. data/po/it/gettext.po +7 -3
  36. data/po/ja/gettext.edit.po +14 -6
  37. data/po/ja/gettext.po +9 -5
  38. data/po/ko/gettext.edit.po +12 -4
  39. data/po/ko/gettext.po +7 -3
  40. data/po/lv/gettext.edit.po +12 -4
  41. data/po/lv/gettext.po +7 -3
  42. data/po/nb/gettext.edit.po +12 -4
  43. data/po/nb/gettext.po +7 -3
  44. data/po/nl/gettext.edit.po +12 -4
  45. data/po/nl/gettext.po +7 -3
  46. data/po/pt_BR/gettext.edit.po +12 -4
  47. data/po/pt_BR/gettext.po +7 -3
  48. data/po/ru/gettext.edit.po +12 -4
  49. data/po/ru/gettext.po +7 -3
  50. data/po/sr/gettext.edit.po +12 -4
  51. data/po/sr/gettext.po +7 -3
  52. data/po/sv/gettext.edit.po +12 -4
  53. data/po/sv/gettext.po +7 -3
  54. data/po/uk/gettext.edit.po +12 -4
  55. data/po/uk/gettext.po +7 -3
  56. data/po/vi/gettext.edit.po +12 -4
  57. data/po/vi/gettext.po +7 -3
  58. data/po/zh/gettext.edit.po +12 -4
  59. data/po/zh/gettext.po +7 -3
  60. data/po/zh_TW/gettext.edit.po +12 -4
  61. data/po/zh_TW/gettext.po +7 -3
  62. data/samples/cgi/po/helloerb1.pot +3 -3
  63. data/samples/cgi/po/helloerb2.pot +3 -3
  64. data/samples/cgi/po/hellolib.pot +3 -3
  65. data/samples/cgi/po/main.pot +3 -3
  66. data/samples/po/hello.pot +3 -3
  67. data/samples/po/hello2.pot +4 -4
  68. data/samples/po/hello_glade2.pot +4 -4
  69. data/samples/po/hello_gtk2.pot +4 -4
  70. data/samples/po/hello_gtk_builder.pot +5 -4
  71. data/samples/po/hello_noop.pot +4 -4
  72. data/samples/po/hello_plural.pot +4 -4
  73. data/samples/po/hello_tk.pot +4 -4
  74. data/test/fixtures/_/backtick.rb +30 -0
  75. data/test/fixtures/_/block_parameter.rb +2 -2
  76. data/test/fixtures/_/double_quote_in_double_quote.rb +2 -2
  77. data/test/fixtures/_/double_quote_in_single_quote.rb +2 -2
  78. data/test/fixtures/_/literal_concatenation_with_continuation_line.rb +2 -2
  79. data/test/fixtures/_/middle_new_line.rb +2 -2
  80. data/test/fixtures/_/multiple_lines_literal.rb +2 -2
  81. data/test/fixtures/_/multiple_messages_in_same_line.rb +2 -2
  82. data/test/fixtures/_/multiple_same_messages.rb +2 -2
  83. data/test/fixtures/_/one_line.rb +2 -2
  84. data/test/fixtures/_/one_new_line.rb +2 -2
  85. data/test/{gettext-test-utils.rb → fixtures/_/percent_strings.rb} +21 -26
  86. data/test/fixtures/_/quoted_symbol.rb +34 -0
  87. data/test/fixtures/gtk_builder_ui_definitions.ui +68 -0
  88. data/test/fixtures/ns_/custom.rb +2 -2
  89. data/test/fixtures/s_/custom.rb +2 -2
  90. data/test/helper.rb +99 -0
  91. data/test/po/_.pot +2 -6
  92. data/test/po/backslash.pot +4 -6
  93. data/test/po/hello.pot +3 -3
  94. data/test/po/ja/_.edit.po +0 -4
  95. data/test/po/ja/hello.edit.po +1 -0
  96. data/test/po/non_ascii.pot +4 -4
  97. data/test/po/np_.pot +5 -8
  98. data/test/po/ns_.pot +4 -6
  99. data/test/po/p_.pot +3 -3
  100. data/test/po/s_.pot +4 -6
  101. data/test/po/untranslated.pot +4 -4
  102. data/test/run-test.rb +2 -2
  103. data/test/test_parser.rb +11 -10
  104. data/test/test_po_parser.rb +2 -2
  105. data/test/test_string.rb +1 -1
  106. data/test/tools/parser/test_gtk_builder_ui_definitions.rb +45 -0
  107. data/test/tools/parser/test_ruby.rb +26 -39
  108. data/test/tools/test_msgmerge.rb +3 -3
  109. data/test/tools/test_xgettext.rb +2 -2
  110. metadata +20 -14
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: a7f90846d2f7fec5d336b6867dbaef56d739cb0917ccf8d9579e3342d2b281aa
4
- data.tar.gz: 5ea3cd94fb22f166310ca120ad9164d73ac0c04c29b6fc74814e6e72bf593d5a
3
+ metadata.gz: d22629a729714a92e020579fcf8b6958a81f167a5c8126971383584f4cf20767
4
+ data.tar.gz: 01cd63601bbe76f52566d20015be66891e02022ce5c02691350a5d2da3980f6f
5
5
  SHA512:
6
- metadata.gz: e3545417d8a7348df2cc46a38cd791cc366c6b7a8eaeb2a82eb8570d98f80afa9fbe9b046a4bfe2e28e09f9f4f2211702a261fb97382aa73876aacb030aa9255
7
- data.tar.gz: 3bca29b8aa87ee03734c691d1006fabb9831f3f43017a83ec4e449adcedcf7db0b165790b42c6a2dcc23b9fe363a5aec01cf9fabcf4c551f3f6eea9b631aa07c
6
+ metadata.gz: 071e7bc118369c5eaffb4b7ba1653572e22a007fb4035e2620ad3bf3c152dd5fe25fafe0c8404b78fade0af264125fd716fc3fd8fa0bd3a70815837a63cc2587
7
+ data.tar.gz: 7d725646addcf0a3c3dd5460dac0dc8adfe0211190cc91164e25232a9dd392c3903fd98f55feb31ad824e3a6fa23e19202ef2e9b7fa519fbdc1b6aee91887563
data/doc/text/news.md CHANGED
@@ -1,5 +1,28 @@
1
1
  # News
2
2
 
3
+ ## 3.3.1: 2020-01-12 {#version-3-3-1}
4
+
5
+ ### Improvements
6
+
7
+ * Stopped detecting string interpolation literal.
8
+ [GitHub#21][Reported by Remo]
9
+
10
+ * `rxgettext`: Added support for adding a new parser by `--require`.
11
+
12
+ * Added support for GtkBuilder UI definitions file.
13
+ [GitHub#63][Reported by Alex]
14
+
15
+ * Improved percent literal parsing.
16
+ [GitHub#67][Patch by KITAITI Makoto]
17
+
18
+ ### Thanks
19
+
20
+ * Remo
21
+
22
+ * Alex
23
+
24
+ * KITAITI Makoto
25
+
3
26
  ## 3.3.0: 2020-01-08 {#version-3-3-0}
4
27
 
5
28
  ### Improvements
@@ -156,7 +156,7 @@ module GetText
156
156
  else
157
157
  unless File.exist?(@input_file)
158
158
  raise(ValidationError,
159
- _("file '%s' does not exist." % @input_file))
159
+ _("file '%s' does not exist.") % @input_file)
160
160
  end
161
161
  end
162
162
 
@@ -168,8 +168,9 @@ module GetText
168
168
 
169
169
  unless valid_locale?(language_tag)
170
170
  raise(ValidationError,
171
- _("Locale '#{language_tag}' is invalid. " +
172
- "Please check if your specified locale is usable."))
171
+ _("Locale '%s' is invalid. " +
172
+ "Please check if your specified locale is usable.") %
173
+ language_tag)
173
174
  end
174
175
  @locale = language_tag.to_simple.to_s
175
176
  @language = language_tag.language
@@ -177,7 +178,7 @@ module GetText
177
178
  @output_file ||= "#{@locale}.po"
178
179
  if File.exist?(@output_file)
179
180
  raise(ValidationError,
180
- _("file '%s' has already existed." % @output_file))
181
+ _("file '%s' has already existed.") % @output_file)
181
182
  end
182
183
  end
183
184
 
@@ -0,0 +1,129 @@
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
+ require "English"
19
+ require "cgi"
20
+ require "strscan"
21
+
22
+ require "gettext/po_entry"
23
+
24
+ module GetText
25
+ class GtkBuilderUIDefinitionsParser
26
+ @config = {
27
+ :extnames => [".ui"]
28
+ }
29
+
30
+ class << self
31
+ # Sets some preferences to parse GtkBuilder UI definitions files.
32
+ # * config: a Hash of the config. It can takes some values below:
33
+ # * :extnames: An Array of target files extension. Default is [".ui"].
34
+ def init(config)
35
+ config.each do |k, v|
36
+ @config[k] = v
37
+ end
38
+ end
39
+
40
+ def target?(file) # :nodoc:
41
+ @config[:extnames].each do |extname|
42
+ return true if File.extname(file) == extname
43
+ end
44
+ false
45
+ end
46
+
47
+ def parse(path, options={})
48
+ parser = new(path, options)
49
+ parser.parse
50
+ end
51
+ end
52
+
53
+ TARGET1 = /<property.*translatable="yes">(.*)/
54
+ TARGET2 = /(.*)<\/property>/
55
+
56
+ def initialize(path, options={})
57
+ @path = path
58
+ @options = options
59
+ end
60
+
61
+ def parse # :nodoc:
62
+ File.open(@path) do |file|
63
+ po = []
64
+ start_line_no = nil
65
+ property = nil
66
+ file.each_line do |line|
67
+ case line
68
+ when /<property/
69
+ property = $POSTMATCH
70
+ start_line_no = file.lineno
71
+ if /<\/property>/ =~ property
72
+ property << $PREMATCH
73
+ add_po_entry(po, property, start_line_no)
74
+ property = nil
75
+ end
76
+ when /<\/property>/
77
+ property << $PREMATCH
78
+ add_po_entry(po, property, start_line_no)
79
+ property = nil
80
+ else
81
+ property << line if property
82
+ end
83
+ end
84
+ po
85
+ end
86
+ end
87
+
88
+ private
89
+ def add_po_entry(po, property, line_no)
90
+ raw_attributes, raw_data_and_close_tag = property.split(">", 2)
91
+ raw_data, _close_tag = raw_data_and_close_tag.split("<", 2)
92
+ return if raw_data.empty?
93
+
94
+ attributes = parse_attributes(raw_attributes)
95
+ return unless attributes["translatable"] == "yes"
96
+
97
+ data = CGI.unescapeHTML(raw_data)
98
+ context = attributes["context"]
99
+ if context
100
+ po_entry = POEntry.new(:msgctxt)
101
+ po_entry.msgctxt = context
102
+ else
103
+ po_entry = POEntry.new(:normal)
104
+ end
105
+ po_entry.msgid = data
106
+ po_entry.references << "#{@path}:#{line_no}"
107
+ po << po_entry
108
+ end
109
+
110
+ def parse_attributes(raw_attributes)
111
+ scanner = StringScanner.new(raw_attributes)
112
+ attributes = {}
113
+ loop do
114
+ scanner.scan(/\s*/m)
115
+ break if scanner.eos?
116
+ name = scanner.scan(/[^=]+/)
117
+ break if name.nil?
118
+ break unless scanner.scan(/=/)
119
+ quote = scanner.scan(/["']/)
120
+ break if quote.nil?
121
+ value = scanner.scan(/[^#{Regexp.escape(quote)}]+/m)
122
+ break if value.nil?
123
+ break unless scanner.scan(/#{Regexp.escape(quote)}/)
124
+ attributes[name] = CGI.unescapeHTML(value)
125
+ end
126
+ attributes
127
+ end
128
+ end
129
+ end
@@ -38,7 +38,6 @@ module GetText
38
38
  @comment_tag = nil
39
39
  @last_comment = ""
40
40
  @reset_comment = false
41
- @embed_expression_level = 0
42
41
  @string_mark_stack = []
43
42
  @string_stack = []
44
43
  end
@@ -67,11 +66,6 @@ module GetText
67
66
  end
68
67
 
69
68
  def process_on_ident(token, po)
70
- if @embed_expression_level > 0
71
- @string_stack.last << token
72
- return po
73
- end
74
-
75
69
  store_po_entry(po)
76
70
 
77
71
  return po if @in_block_arguments
@@ -127,13 +121,22 @@ module GetText
127
121
  end
128
122
 
129
123
  def process_on_tstring_beg(token, po)
130
- @string_mark_stack << token
124
+ if token.start_with?("%Q")
125
+ @string_mark_stack << "\""
126
+ elsif token.start_with?("%q")
127
+ @string_mark_stack << "'"
128
+ elsif token.start_with?("%")
129
+ @string_mark_stack << "\""
130
+ else
131
+ @string_mark_stack << token
132
+ end
131
133
  @string_stack << ""
132
134
  po
133
135
  end
134
136
 
135
137
  def process_on_tstring_content(token, po)
136
- if @string_mark_stack.last == "\""
138
+ case @string_mark_stack.last
139
+ when "\"", "`"
137
140
  @string_stack.last << token.gsub(/\\./) do |data|
138
141
  case data
139
142
  when "\\n"
@@ -167,12 +170,15 @@ module GetText
167
170
 
168
171
  def process_on_tstring_end(token, po)
169
172
  @ignore_next_comma = false
170
- @string_mark_stack.pop
171
- last_string = @string_stack.pop
172
- if @current_po_entry and last_string
173
- @current_po_entry[@current_po_entry_nth_attribute] =
174
- (@current_po_entry[@current_po_entry_nth_attribute] || "") +
175
- last_string
173
+ string_mark = @string_mark_stack.pop
174
+ case string_mark
175
+ when "\"", "'"
176
+ last_string = @string_stack.pop
177
+ if @current_po_entry and last_string
178
+ @current_po_entry[@current_po_entry_nth_attribute] =
179
+ (@current_po_entry[@current_po_entry_nth_attribute] || "") +
180
+ last_string
181
+ end
176
182
  end
177
183
  po
178
184
  end
@@ -198,14 +204,8 @@ module GetText
198
204
  end
199
205
 
200
206
  def process_on_embexpr_beg(token, po)
201
- @embed_expression_level += 1
202
- @string_stack.last << token
203
- po
204
- end
205
-
206
- def process_on_embexpr_end(token, po)
207
- @embed_expression_level -= 1
208
- @string_stack.last << token
207
+ @current_po_entry = nil
208
+ @current_po_entry_nth_attribute = 0
209
209
  po
210
210
  end
211
211
 
@@ -239,6 +239,32 @@ module GetText
239
239
  po
240
240
  end
241
241
 
242
+ def process_on_symbeg(token, po)
243
+ if token.start_with?("%s") or [":'", ":\""].include?(token)
244
+ @string_mark_stack << ":"
245
+ @string_stack << ""
246
+ end
247
+ po
248
+ end
249
+
250
+ def process_on_backtick(token, po)
251
+ @string_mark_stack << "`"
252
+ @string_stack << ""
253
+ po
254
+ end
255
+
256
+ def process_on_qsymbols_beg(token, po)
257
+ @string_mark_stack << token
258
+ @string_stack << ""
259
+ po
260
+ end
261
+
262
+ def process_on_qwords_beg(token, po)
263
+ @string_mark_stack << token
264
+ @string_stack << ""
265
+ po
266
+ end
267
+
242
268
  def on_default(event, token, po)
243
269
  trace(event, token) do
244
270
  process_method = "process_#{event}"
@@ -52,15 +52,15 @@ module GetText
52
52
  # @api private
53
53
  @@default_parsers = []
54
54
  builtin_parser_info_list = [
55
- ["glade", "GladeParser"],
55
+ ["ruby", "RubyParser"], # Default parser.
56
56
  ["erb", "ErbParser"],
57
- # ["ripper", "RipperParser"],
58
- ["ruby", "RubyParser"] # Default parser.
57
+ ["gtk_builder_ui_definitions", "GtkBuilderUIDefinitionsParser"],
58
+ ["glade", "GladeParser"],
59
59
  ]
60
60
  builtin_parser_info_list.each do |f, klass|
61
61
  begin
62
62
  require "gettext/tools/parser/#{f}"
63
- @@default_parsers << GetText.const_get(klass)
63
+ add_parser(GetText.const_get(klass))
64
64
  rescue
65
65
  $stderr.puts(_("'%{klass}' is ignored.") % {:klass => klass})
66
66
  $stderr.puts($!) if $DEBUG
@@ -74,7 +74,7 @@ module GetText
74
74
  attr_reader :parse_options
75
75
 
76
76
  def initialize #:nodoc:
77
- @parsers = @@default_parsers.dup
77
+ @parsers = []
78
78
 
79
79
  @input_files = nil
80
80
  @output = nil
@@ -357,7 +357,7 @@ Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;
357
357
  end
358
358
 
359
359
  def parse_path(path, po)
360
- @parsers.each do |parser|
360
+ (@parsers + @@default_parsers).each do |parser|
361
361
  next unless parser.target?(path)
362
362
 
363
363
  # For backward compatibility
@@ -9,5 +9,5 @@
9
9
  =end
10
10
 
11
11
  module GetText
12
- VERSION = "3.3.0"
12
+ VERSION = "3.3.1"
13
13
  end
Binary file
@@ -192,18 +192,18 @@ msgid "file '%s' does not exist."
192
192
  msgstr "Файлът '%s' съществува."
193
193
 
194
194
  #: ../lib/gettext/tools/msginit.rb:171
195
- msgid "Locale '#{language_tag}' is invalid. Please check if your specified locale is usable."
195
+ msgid "Locale '%s' is invalid. Please check if your specified locale is usable."
196
196
  msgstr ""
197
197
 
198
- #: ../lib/gettext/tools/msginit.rb:180
198
+ #: ../lib/gettext/tools/msginit.rb:181
199
199
  msgid "file '%s' has already existed."
200
200
  msgstr "Файлът '%s' съществува."
201
201
 
202
- #: ../lib/gettext/tools/msginit.rb:222
202
+ #: ../lib/gettext/tools/msginit.rb:223
203
203
  msgid "Please enter your full name"
204
204
  msgstr ""
205
205
 
206
- #: ../lib/gettext/tools/msginit.rb:251
206
+ #: ../lib/gettext/tools/msginit.rb:252
207
207
  msgid "Please enter your email address"
208
208
  msgstr ""
209
209
 
@@ -469,6 +469,10 @@ msgid ""
469
469
  "Here document2\n"
470
470
  msgstr ""
471
471
 
472
+ #: ../test/fixtures/_.rb:109
473
+ msgid "in_quote"
474
+ msgstr ""
475
+
472
476
  #. TRANSLATORS: This is a proper name. See the gettext
473
477
  #. manual, section Names. Note this is actually a non-ASCII
474
478
  #. name: The first name is (with Unicode escapes)
@@ -537,6 +541,10 @@ msgid ""
537
541
  "one new line\n"
538
542
  msgstr ""
539
543
 
544
+ #: ../test/fixtures/_/percent_strings.rb:34
545
+ msgid "hello world"
546
+ msgstr ""
547
+
540
548
  #: ../test/fixtures/backslash.rb:27
541
549
  msgid "You should escape '\\' as '\\\\'."
542
550
  msgstr ""
data/po/bg/gettext.po CHANGED
@@ -158,9 +158,7 @@ msgstr ""
158
158
  msgid "file '%s' does not exist."
159
159
  msgstr "Файлът '%s' съществува."
160
160
 
161
- msgid ""
162
- "Locale '#{language_tag}' is invalid. Please check if your specified locale is "
163
- "usable."
161
+ msgid "Locale '%s' is invalid. Please check if your specified locale is usable."
164
162
  msgstr ""
165
163
 
166
164
  msgid "file '%s' has already existed."
@@ -389,6 +387,9 @@ msgid ""
389
387
  "Here document2\n"
390
388
  msgstr ""
391
389
 
390
+ msgid "in_quote"
391
+ msgstr ""
392
+
392
393
  #. TRANSLATORS: This is a proper name. See the gettext
393
394
  #. manual, section Names. Note this is actually a non-ASCII
394
395
  #. name: The first name is (with Unicode escapes)
@@ -443,6 +444,9 @@ msgid ""
443
444
  "one new line\n"
444
445
  msgstr ""
445
446
 
447
+ msgid "hello world"
448
+ msgstr ""
449
+
446
450
  msgid "You should escape '\\' as '\\\\'."
447
451
  msgstr ""
448
452
 
@@ -194,18 +194,18 @@ msgid "file '%s' does not exist."
194
194
  msgstr "Datoteka '%s' već postoji."
195
195
 
196
196
  #: ../lib/gettext/tools/msginit.rb:171
197
- msgid "Locale '#{language_tag}' is invalid. Please check if your specified locale is usable."
197
+ msgid "Locale '%s' is invalid. Please check if your specified locale is usable."
198
198
  msgstr ""
199
199
 
200
- #: ../lib/gettext/tools/msginit.rb:180
200
+ #: ../lib/gettext/tools/msginit.rb:181
201
201
  msgid "file '%s' has already existed."
202
202
  msgstr "Datoteka '%s' već postoji."
203
203
 
204
- #: ../lib/gettext/tools/msginit.rb:222
204
+ #: ../lib/gettext/tools/msginit.rb:223
205
205
  msgid "Please enter your full name"
206
206
  msgstr ""
207
207
 
208
- #: ../lib/gettext/tools/msginit.rb:251
208
+ #: ../lib/gettext/tools/msginit.rb:252
209
209
  msgid "Please enter your email address"
210
210
  msgstr ""
211
211
 
@@ -474,6 +474,10 @@ msgid ""
474
474
  "Here document2\n"
475
475
  msgstr ""
476
476
 
477
+ #: ../test/fixtures/_.rb:109
478
+ msgid "in_quote"
479
+ msgstr ""
480
+
477
481
  #. TRANSLATORS: This is a proper name. See the gettext
478
482
  #. manual, section Names. Note this is actually a non-ASCII
479
483
  #. name: The first name is (with Unicode escapes)
@@ -542,6 +546,10 @@ msgid ""
542
546
  "one new line\n"
543
547
  msgstr ""
544
548
 
549
+ #: ../test/fixtures/_/percent_strings.rb:34
550
+ msgid "hello world"
551
+ msgstr ""
552
+
545
553
  #: ../test/fixtures/backslash.rb:27
546
554
  msgid "You should escape '\\' as '\\\\'."
547
555
  msgstr ""