diff --git a/lib/gettext/tools/rmsgmerge.rb b/lib/gettext/tools/rmsgmerge.rb index 89028e9c..44741403 100644 --- a/lib/gettext/tools/rmsgmerge.rb +++ b/lib/gettext/tools/rmsgmerge.rb @@ -119,6 +119,13 @@ def generate_po_entry(msgid) id = msgid.gsub(/"/, '\"').gsub(/\r/, '') msgstr = @msgid2msgstr[msgid].gsub(/"/, '\"').gsub(/\r/, '') + if id.include?("\004") + ids = id.split(/\004/) + context = ids[0] + id = ids[1] + str << "msgctxt " << __conv(context) << "\n" + end + if id.include?("\000") ids = id.split(/\000/) str << "msgid " << __conv(ids[0]) << "\n" diff --git a/test/tools/test_rmsgmerge.rb b/test/tools/test_rmsgmerge.rb new file mode 100644 index 00000000..5f612fbb --- /dev/null +++ b/test/tools/test_rmsgmerge.rb @@ -0,0 +1,19 @@ +# encoding: utf-8 + +require 'testlib/helper' +require 'gettext/tools/rmsgmerge' + +class TestRMsgMerge < Test::Unit::TestCase + def test_po_data_should_generate_msgctxt + msg_id = "Context\004Translation" + + po_data = GetText::RMsgMerge::PoData.new + po_data[msg_id] = "Translated" + po_data.set_comment(msg_id, "#no comment") + + result = po_data.generate_po_entry(msg_id) + + expected = "#no comment\nmsgctxt \"Context\"\nmsgid \"Translation\"\nmsgstr \"Translated\"\n\n" + assert_equal expected, result + end +end \ No newline at end of file