gettext 2.3.3 → 2.3.4
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.
- data/doc/text/news.md +37 -0
- data/gettext.gemspec +1 -0
- data/lib/gettext/runtime/mo.rb +382 -0
- data/lib/gettext/runtime/mofile.rb +24 -366
- data/lib/gettext/runtime/textdomain.rb +17 -17
- data/lib/gettext/tools.rb +1 -1
- data/lib/gettext/tools/msgfmt.rb +2 -2
- data/lib/gettext/tools/msginit.rb +16 -15
- data/lib/gettext/tools/msgmerge.rb +258 -255
- data/lib/gettext/tools/parser/ruby.rb +24 -24
- data/lib/gettext/tools/po.rb +256 -0
- data/lib/gettext/tools/po_entry.rb +355 -0
- data/lib/gettext/tools/poparser.rb +118 -16
- data/lib/gettext/tools/xgettext.rb +56 -58
- data/lib/gettext/version.rb +1 -1
- data/samples/po/hello.pot +3 -3
- data/samples/po/hello2.pot +3 -3
- data/samples/po/hello_glade2.pot +3 -3
- data/samples/po/hello_gtk2.pot +3 -3
- data/samples/po/hello_noop.pot +3 -3
- data/samples/po/hello_plural.pot +3 -3
- data/samples/po/hello_tk.pot +3 -3
- data/src/poparser.ry +111 -9
- data/test/parser/test_ruby.rb +17 -13
- data/test/po/_.pot +3 -3
- data/test/po/backslash.pot +3 -3
- data/test/po/non_ascii.pot +3 -3
- data/test/po/np_.pot +5 -4
- 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 +3 -3
- data/test/{test_mofile.rb → test_mo.rb} +3 -3
- data/test/test_parser.rb +13 -12
- data/test/test_po_entry.rb +329 -0
- data/test/test_po_parser.rb +209 -8
- data/test/tools/test_msginit.rb +0 -2
- data/test/tools/test_msgmerge.rb +427 -50
- data/test/tools/test_po.rb +487 -0
- data/test/tools/test_xgettext.rb +1 -1
- metadata +28 -45
- data/data/locale/de/LC_MESSAGES/gettext.mo +0 -0
- data/data/locale/de/LC_MESSAGES/rgettext.mo +0 -0
- data/data/locale/el/LC_MESSAGES/gettext.mo +0 -0
- data/data/locale/el/LC_MESSAGES/rgettext.mo +0 -0
- data/data/locale/sr/LC_MESSAGES/gettext.mo +0 -0
- data/data/locale/sr/LC_MESSAGES/rgettext.mo +0 -0
- data/data/locale/uk/LC_MESSAGES/gettext.mo +0 -0
- data/data/locale/uk/LC_MESSAGES/rgettext.mo +0 -0
- data/lib/gettext/tools/pomessage.rb +0 -232
- data/samples/locale/bg/LC_MESSAGES/hello_gtk.mo +0 -0
- data/samples/locale/bs/LC_MESSAGES/hello_gtk.mo +0 -0
- data/samples/locale/ca/LC_MESSAGES/hello_gtk.mo +0 -0
- data/samples/locale/cs/LC_MESSAGES/hello_gtk.mo +0 -0
- data/samples/locale/de/LC_MESSAGES/hello_gtk.mo +0 -0
- data/samples/locale/el/LC_MESSAGES/hello_gtk.mo +0 -0
- data/samples/locale/eo/LC_MESSAGES/hello_gtk.mo +0 -0
- data/samples/locale/es/LC_MESSAGES/hello_gtk.mo +0 -0
- data/samples/locale/fr/LC_MESSAGES/hello_gtk.mo +0 -0
- data/samples/locale/hr/LC_MESSAGES/hello_gtk.mo +0 -0
- data/samples/locale/hu/LC_MESSAGES/hello_gtk.mo +0 -0
- data/samples/locale/it/LC_MESSAGES/hello_gtk.mo +0 -0
- data/samples/locale/ja/LC_MESSAGES/hello_gtk.mo +0 -0
- data/samples/locale/ko/LC_MESSAGES/hello_gtk.mo +0 -0
- data/samples/locale/lv/LC_MESSAGES/hello_gtk.mo +0 -0
- data/samples/locale/nb/LC_MESSAGES/hello_gtk.mo +0 -0
- data/samples/locale/nl/LC_MESSAGES/hello_gtk.mo +0 -0
- data/samples/locale/pt_BR/LC_MESSAGES/hello_gtk.mo +0 -0
- data/samples/locale/ru/LC_MESSAGES/hello_gtk.mo +0 -0
- data/samples/locale/sr/LC_MESSAGES/hello_gtk.mo +0 -0
- data/samples/locale/sv/LC_MESSAGES/hello_gtk.mo +0 -0
- data/samples/locale/uk/LC_MESSAGES/hello_gtk.mo +0 -0
- data/samples/locale/vi/LC_MESSAGES/hello_gtk.mo +0 -0
- data/samples/locale/zh/LC_MESSAGES/hello_gtk.mo +0 -0
- data/samples/locale/zh_TW/LC_MESSAGES/hello_gtk.mo +0 -0
- data/test/po/ascii.pot +0 -23
- data/test/po/no_exist_msgid.pot +0 -20
- data/test/po/not_existed_msgid.pot +0 -20
- data/test/test_po_message.rb +0 -118
@@ -15,10 +15,16 @@
|
|
15
15
|
#
|
16
16
|
|
17
17
|
require 'racc/parser.rb'
|
18
|
+
|
19
|
+
require "gettext/tools/po"
|
20
|
+
require "gettext/tools/msgmerge"
|
18
21
|
module GetText
|
19
|
-
class
|
22
|
+
class POParser < Racc::Parser
|
23
|
+
|
24
|
+
module_eval(<<'...end poparser.ry/module_eval...', 'poparser.ry', 123)
|
25
|
+
# for backward compatibility.
|
26
|
+
PoParser = POParser
|
20
27
|
|
21
|
-
module_eval(<<'...end poparser.ry/module_eval...', 'poparser.ry', 119)
|
22
28
|
if GetText.respond_to?(:bindtextdomain)
|
23
29
|
include GetText
|
24
30
|
GetText.bindtextdomain("gettext")
|
@@ -58,10 +64,16 @@ module_eval(<<'...end poparser.ry/module_eval...', 'poparser.ry', 119)
|
|
58
64
|
private :unescape_string
|
59
65
|
|
60
66
|
def parse(str, data)
|
67
|
+
@translator_comments = []
|
68
|
+
@extracted_comments = []
|
69
|
+
@references = []
|
70
|
+
@flag = []
|
71
|
+
@previous = []
|
61
72
|
@comments = []
|
62
73
|
@data = data
|
63
74
|
@fuzzy = false
|
64
|
-
@msgctxt =
|
75
|
+
@msgctxt = nil
|
76
|
+
@msgid_plural = nil
|
65
77
|
|
66
78
|
str.strip!
|
67
79
|
@q = []
|
@@ -124,16 +136,89 @@ module_eval(<<'...end poparser.ry/module_eval...', 'poparser.ry', 119)
|
|
124
136
|
|
125
137
|
def on_message(msgid, msgstr)
|
126
138
|
msgstr = nil if msgstr.empty?
|
127
|
-
@data[msgid] = msgstr
|
128
|
-
@data.set_comment(msgid, @comments.join("\n"))
|
129
139
|
|
140
|
+
if @data.instance_of?(PO) or
|
141
|
+
@data.instance_of?(GetText::Tools::MsgMerge::PoData)
|
142
|
+
type = detect_entry_type
|
143
|
+
entry = POEntry.new(type)
|
144
|
+
entry.translator_comment = format_comment(@translator_comments)
|
145
|
+
entry.extracted_comment = format_comment(@extracted_comments)
|
146
|
+
entry.flag = format_comment(@flag)
|
147
|
+
entry.previous = format_comment(@previous)
|
148
|
+
entry.references = @references
|
149
|
+
entry.msgctxt = @msgctxt
|
150
|
+
entry.msgid = msgid
|
151
|
+
entry.msgid_plural = @msgid_plural
|
152
|
+
entry.msgstr = msgstr
|
153
|
+
|
154
|
+
if @data.instance_of?(PO)
|
155
|
+
@data[@msgctxt, msgid] = entry
|
156
|
+
elsif @data.instance_of?(GetText::Tools::MsgMerge::PoData)
|
157
|
+
id = ""
|
158
|
+
id << "#{@msgctxt}\004" unless @msgctxt.nil?
|
159
|
+
id << msgid
|
160
|
+
id << "\000#{@msgid_plural}" unless @msgid_plural.nil?
|
161
|
+
@data[id] = entry
|
162
|
+
end
|
163
|
+
else
|
164
|
+
options = {}
|
165
|
+
options[:msgctxt] = @msgctxt
|
166
|
+
options[:msgid_plural] = @msgid_plural
|
167
|
+
@data.store(msgid, msgstr, options)
|
168
|
+
@data.set_comment(msgid, format_comment(@comments))
|
169
|
+
end
|
170
|
+
|
171
|
+
@translator_comments = []
|
172
|
+
@extracted_comments = []
|
173
|
+
@references = []
|
174
|
+
@flag = []
|
175
|
+
@previous = []
|
176
|
+
@references = []
|
130
177
|
@comments.clear
|
131
|
-
@msgctxt =
|
178
|
+
@msgctxt = nil
|
179
|
+
@msgid_plural = nil
|
132
180
|
end
|
133
181
|
|
182
|
+
def format_comment(comments)
|
183
|
+
return "" if comments.empty?
|
184
|
+
|
185
|
+
comment = comments.join("\n")
|
186
|
+
comment << "\n" if comments.last.empty?
|
187
|
+
comment
|
188
|
+
end
|
189
|
+
|
190
|
+
TRANSLATOR_COMMENT_MARK = "# "
|
191
|
+
EXTRACTED_COMMENT_MARK = "#."
|
192
|
+
FLAG_MARK = "#,"
|
193
|
+
PREVIOUS_MSGID_COMMENT_MARK = "#|"
|
194
|
+
REFERENCE_COMMENT_MARK = "#:"
|
134
195
|
def on_comment(comment)
|
135
196
|
@fuzzy = true if (/fuzzy/ =~ comment)
|
136
|
-
@
|
197
|
+
if @data.instance_of?(PO) or
|
198
|
+
@data.instance_of?(GetText::Tools::MsgMerge::PoData)
|
199
|
+
if comment == "#"
|
200
|
+
@translator_comments << ""
|
201
|
+
elsif /\A(#.)\s*(.*)\z/ =~ comment
|
202
|
+
mark = $1
|
203
|
+
content = $2
|
204
|
+
case mark
|
205
|
+
when TRANSLATOR_COMMENT_MARK
|
206
|
+
@translator_comments << content
|
207
|
+
when EXTRACTED_COMMENT_MARK
|
208
|
+
@extracted_comments << content
|
209
|
+
when REFERENCE_COMMENT_MARK
|
210
|
+
@references << content
|
211
|
+
when FLAG_MARK
|
212
|
+
@flag << content
|
213
|
+
when PREVIOUS_MSGID_COMMENT_MARK
|
214
|
+
@previous << content
|
215
|
+
else
|
216
|
+
@comments << comment
|
217
|
+
end
|
218
|
+
end
|
219
|
+
else
|
220
|
+
@comments << comment
|
221
|
+
end
|
137
222
|
end
|
138
223
|
|
139
224
|
def parse_file(po_file, data)
|
@@ -155,6 +240,22 @@ module_eval(<<'...end poparser.ry/module_eval...', 'poparser.ry', 119)
|
|
155
240
|
end
|
156
241
|
Encoding.default_external
|
157
242
|
end
|
243
|
+
|
244
|
+
def detect_entry_type
|
245
|
+
if @msgctxt.nil?
|
246
|
+
if @msgid_plural.nil?
|
247
|
+
:normal
|
248
|
+
else
|
249
|
+
:plural
|
250
|
+
end
|
251
|
+
else
|
252
|
+
if @msgid_plural.nil?
|
253
|
+
:msgctxt
|
254
|
+
else
|
255
|
+
:msgctxt_plural
|
256
|
+
end
|
257
|
+
end
|
258
|
+
end
|
158
259
|
private :detect_file_encoding
|
159
260
|
...end poparser.ry/module_eval...
|
160
261
|
##### State transition tables begin ###
|
@@ -281,7 +382,7 @@ Racc_debug_parser = true
|
|
281
382
|
|
282
383
|
module_eval(<<'.,.,', 'poparser.ry', 26)
|
283
384
|
def _reduce_5(val, _values, result)
|
284
|
-
@msgctxt = unescape(val[1])
|
385
|
+
@msgctxt = unescape(val[1])
|
285
386
|
|
286
387
|
result
|
287
388
|
end
|
@@ -309,7 +410,7 @@ module_eval(<<'.,.,', 'poparser.ry', 38)
|
|
309
410
|
end
|
310
411
|
end
|
311
412
|
@fuzzy = false
|
312
|
-
on_message(
|
413
|
+
on_message(msgid, msgstr) if use_message_p
|
313
414
|
result = ""
|
314
415
|
|
315
416
|
result
|
@@ -329,7 +430,8 @@ module_eval(<<'.,.,', 'poparser.ry', 61)
|
|
329
430
|
end
|
330
431
|
@fuzzy = false
|
331
432
|
else
|
332
|
-
|
433
|
+
@msgid_plural = unescape(val[3])
|
434
|
+
on_message(unescape(val[1]), unescape(val[4]))
|
333
435
|
end
|
334
436
|
result = ""
|
335
437
|
|
@@ -337,7 +439,7 @@ module_eval(<<'.,.,', 'poparser.ry', 61)
|
|
337
439
|
end
|
338
440
|
.,.,
|
339
441
|
|
340
|
-
module_eval(<<'.,.,', 'poparser.ry',
|
442
|
+
module_eval(<<'.,.,', 'poparser.ry', 82)
|
341
443
|
def _reduce_10(val, _values, result)
|
342
444
|
if val[0].size > 0
|
343
445
|
result = val[0] + "\000" + val[1]
|
@@ -351,7 +453,7 @@ module_eval(<<'.,.,', 'poparser.ry', 81)
|
|
351
453
|
|
352
454
|
# reduce 11 omitted
|
353
455
|
|
354
|
-
module_eval(<<'.,.,', 'poparser.ry',
|
456
|
+
module_eval(<<'.,.,', 'poparser.ry', 94)
|
355
457
|
def _reduce_12(val, _values, result)
|
356
458
|
result = val[2]
|
357
459
|
|
@@ -359,7 +461,7 @@ module_eval(<<'.,.,', 'poparser.ry', 93)
|
|
359
461
|
end
|
360
462
|
.,.,
|
361
463
|
|
362
|
-
module_eval(<<'.,.,', 'poparser.ry',
|
464
|
+
module_eval(<<'.,.,', 'poparser.ry', 101)
|
363
465
|
def _reduce_13(val, _values, result)
|
364
466
|
on_comment(val[0])
|
365
467
|
|
@@ -367,7 +469,7 @@ module_eval(<<'.,.,', 'poparser.ry', 100)
|
|
367
469
|
end
|
368
470
|
.,.,
|
369
471
|
|
370
|
-
module_eval(<<'.,.,', 'poparser.ry',
|
472
|
+
module_eval(<<'.,.,', 'poparser.ry', 109)
|
371
473
|
def _reduce_14(val, _values, result)
|
372
474
|
result = val.delete_if{|item| item == ""}.join
|
373
475
|
|
@@ -375,7 +477,7 @@ module_eval(<<'.,.,', 'poparser.ry', 108)
|
|
375
477
|
end
|
376
478
|
.,.,
|
377
479
|
|
378
|
-
module_eval(<<'.,.,', 'poparser.ry',
|
480
|
+
module_eval(<<'.,.,', 'poparser.ry', 113)
|
379
481
|
def _reduce_15(val, _values, result)
|
380
482
|
result = val[0]
|
381
483
|
|
@@ -387,7 +489,7 @@ def _reduce_none(val, _values, result)
|
|
387
489
|
val[0]
|
388
490
|
end
|
389
491
|
|
390
|
-
end # class
|
492
|
+
end # class POParser
|
391
493
|
end # module GetText
|
392
494
|
|
393
495
|
|
@@ -89,40 +89,40 @@ module GetText
|
|
89
89
|
# File.extname(path) == ".foo" # *.foo file only.
|
90
90
|
# end
|
91
91
|
# def parse(path)
|
92
|
-
#
|
93
|
-
# # Simple
|
94
|
-
#
|
95
|
-
#
|
96
|
-
#
|
97
|
-
#
|
98
|
-
#
|
99
|
-
# # Plural
|
100
|
-
#
|
101
|
-
#
|
102
|
-
#
|
103
|
-
#
|
104
|
-
#
|
105
|
-
# # Simple
|
106
|
-
#
|
107
|
-
#
|
108
|
-
#
|
109
|
-
#
|
110
|
-
#
|
111
|
-
# # Plural
|
112
|
-
#
|
113
|
-
#
|
114
|
-
#
|
115
|
-
#
|
116
|
-
#
|
117
|
-
#
|
118
|
-
# return
|
92
|
+
# po = []
|
93
|
+
# # Simple entry
|
94
|
+
# entry = POEntry.new(:normal)
|
95
|
+
# entry.msgid = "hello"
|
96
|
+
# entry.references = ["foo.rb:200", "bar.rb:300"]
|
97
|
+
# entry.add_comment("Comment for the entry")
|
98
|
+
# po << entry
|
99
|
+
# # Plural entry
|
100
|
+
# entry = POEntry.new(:plural)
|
101
|
+
# entry.msgid = "An apple"
|
102
|
+
# entry.msgid_plural = "Apples"
|
103
|
+
# entry.references = ["foo.rb:200", "bar.rb:300"]
|
104
|
+
# po << entry
|
105
|
+
# # Simple entry with the entry context
|
106
|
+
# entry = POEntry.new(:msgctxt)
|
107
|
+
# entry.msgctxt = "context"
|
108
|
+
# entry.msgid = "hello"
|
109
|
+
# entry.references = ["foo.rb:200", "bar.rb:300"]
|
110
|
+
# po << entry
|
111
|
+
# # Plural entry with the message context.
|
112
|
+
# entry = POEntry.new(:msgctxt_plural)
|
113
|
+
# entry.msgctxt = "context"
|
114
|
+
# entry.msgid = "An apple"
|
115
|
+
# entry.msgid_plural = "Apples"
|
116
|
+
# entry.references = ["foo.rb:200", "bar.rb:300"]
|
117
|
+
# po << entry
|
118
|
+
# return po
|
119
119
|
# end
|
120
120
|
# end
|
121
121
|
#
|
122
122
|
# GetText::XGetText.add_parser(FooParser.new)
|
123
123
|
#
|
124
124
|
# @param [#target?, #parse] parser
|
125
|
-
# It parses target file and extracts translate target
|
125
|
+
# It parses target file and extracts translate target entries from the
|
126
126
|
# target file. If there are multiple target files, parser.parse is
|
127
127
|
# called multiple times.
|
128
128
|
# @return [void]
|
@@ -157,26 +157,26 @@ EOH
|
|
157
157
|
end
|
158
158
|
|
159
159
|
def generate_pot(paths) # :nodoc:
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
160
|
+
po = parse(paths)
|
161
|
+
entries = []
|
162
|
+
po.each do |target|
|
163
|
+
entries << encode(target.to_s)
|
164
164
|
end
|
165
|
-
|
165
|
+
entries.join("\n")
|
166
166
|
end
|
167
167
|
|
168
168
|
def parse(paths) # :nodoc:
|
169
|
-
|
169
|
+
po = []
|
170
170
|
paths = [paths] if paths.kind_of?(String)
|
171
171
|
paths.each do |path|
|
172
172
|
begin
|
173
|
-
parse_path(path,
|
173
|
+
parse_path(path, po)
|
174
174
|
rescue
|
175
175
|
puts(_("Error parsing %{path}") % {:path => path})
|
176
176
|
raise
|
177
177
|
end
|
178
178
|
end
|
179
|
-
|
179
|
+
po
|
180
180
|
end
|
181
181
|
|
182
182
|
def check_command_line_options(*options) # :nodoc:
|
@@ -267,18 +267,16 @@ EOH
|
|
267
267
|
check_command_line_options(*options)
|
268
268
|
|
269
269
|
@output_encoding ||= "UTF-8"
|
270
|
-
|
271
|
-
|
272
|
-
|
270
|
+
pot = generate_pot_header
|
271
|
+
pot << "\n"
|
272
|
+
pot << generate_pot(@input_files)
|
273
273
|
|
274
274
|
if @output.is_a?(String)
|
275
275
|
File.open(File.expand_path(@output), "w+") do |file|
|
276
|
-
file.puts(
|
277
|
-
file.puts(pot_messages)
|
276
|
+
file.puts(pot)
|
278
277
|
end
|
279
278
|
else
|
280
|
-
@output.puts(
|
281
|
-
@output.puts(pot_messages)
|
279
|
+
@output.puts(pot)
|
282
280
|
end
|
283
281
|
self
|
284
282
|
end
|
@@ -288,21 +286,21 @@ EOH
|
|
288
286
|
Time.now
|
289
287
|
end
|
290
288
|
|
291
|
-
def parse_path(path,
|
289
|
+
def parse_path(path, po)
|
292
290
|
@parsers.each do |parser|
|
293
291
|
next unless parser.target?(path)
|
294
292
|
|
295
|
-
|
296
|
-
|
297
|
-
if
|
298
|
-
|
293
|
+
extracted_po = parser.parse(path)
|
294
|
+
extracted_po.each do |po_entry|
|
295
|
+
if po_entry.kind_of?(Array)
|
296
|
+
po_entry = POEntry.new_from_ary(po_entry)
|
299
297
|
end
|
300
298
|
|
301
|
-
if
|
299
|
+
if po_entry.msgid.empty?
|
302
300
|
warn _("Warning: The empty \"\" msgid is reserved by " +
|
303
301
|
"gettext. So gettext(\"\") doesn't returns " +
|
304
302
|
"empty string but the header entry in po file.")
|
305
|
-
# TODO: add pommesage.
|
303
|
+
# TODO: add pommesage.reference to the pot header as below:
|
306
304
|
# # SOME DESCRIPTIVE TITLE.
|
307
305
|
# # Copyright (C) YEAR THE COPYRIGHT HOLDER
|
308
306
|
# # This file is distributed under the same license as the PACKAGE package.
|
@@ -316,8 +314,8 @@ EOH
|
|
316
314
|
|
317
315
|
if @output.is_a?(String)
|
318
316
|
base_path = Pathname.new(@output).dirname.expand_path
|
319
|
-
|
320
|
-
path, line, =
|
317
|
+
po_entry.references = po_entry.references.collect do |reference|
|
318
|
+
path, line, = reference.split(/:(\d+)\z/, 2)
|
321
319
|
absolute_path = Pathname.new(path).expand_path
|
322
320
|
begin
|
323
321
|
path = absolute_path.relative_path_from(base_path).to_s
|
@@ -329,18 +327,18 @@ EOH
|
|
329
327
|
end
|
330
328
|
|
331
329
|
# Save the previous target
|
332
|
-
if
|
330
|
+
if po.empty?
|
333
331
|
existing = nil
|
334
332
|
else
|
335
|
-
|
336
|
-
existing =
|
333
|
+
entry = po.find {|t| t.mergeable?(po_entry)}
|
334
|
+
existing = po.index(entry)
|
337
335
|
end
|
338
336
|
|
339
337
|
if existing
|
340
|
-
|
341
|
-
|
338
|
+
po_entry = po[existing].merge(po_entry)
|
339
|
+
po[existing] = po_entry
|
342
340
|
else
|
343
|
-
|
341
|
+
po << po_entry
|
344
342
|
end
|
345
343
|
end
|
346
344
|
break
|
data/lib/gettext/version.rb
CHANGED
data/samples/po/hello.pot
CHANGED
@@ -6,10 +6,10 @@
|
|
6
6
|
#, fuzzy
|
7
7
|
msgid ""
|
8
8
|
msgstr ""
|
9
|
-
"Project-Id-Version: gettext 2.3.
|
9
|
+
"Project-Id-Version: gettext 2.3.4\n"
|
10
10
|
"Report-Msgid-Bugs-To: \n"
|
11
|
-
"POT-Creation-Date: 2012-
|
12
|
-
"PO-Revision-Date: 2012-
|
11
|
+
"POT-Creation-Date: 2012-11-15 10:50+0900\n"
|
12
|
+
"PO-Revision-Date: 2012-11-15 10:50+0900\n"
|
13
13
|
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
14
14
|
"Language-Team: LANGUAGE <LL@li.org>\n"
|
15
15
|
"Language: \n"
|
data/samples/po/hello2.pot
CHANGED
@@ -6,10 +6,10 @@
|
|
6
6
|
#, fuzzy
|
7
7
|
msgid ""
|
8
8
|
msgstr ""
|
9
|
-
"Project-Id-Version: gettext 2.3.
|
9
|
+
"Project-Id-Version: gettext 2.3.4\n"
|
10
10
|
"Report-Msgid-Bugs-To: \n"
|
11
|
-
"POT-Creation-Date: 2012-
|
12
|
-
"PO-Revision-Date: 2012-
|
11
|
+
"POT-Creation-Date: 2012-11-15 10:50+0900\n"
|
12
|
+
"PO-Revision-Date: 2012-11-15 10:50+0900\n"
|
13
13
|
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
14
14
|
"Language-Team: LANGUAGE <LL@li.org>\n"
|
15
15
|
"Language: \n"
|