gettext 3.3.0 → 3.3.1

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 (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 ""