Index: translate/storage/test_cpo.py =================================================================== --- translate/storage/test_cpo.py (revision 7848) +++ translate/storage/test_cpo.py (working copy) @@ -72,6 +72,17 @@ unit.addnote("# Double commented comment") assert unit.getnotes() == "# Double commented comment" + def test_context(self): + """tests if we handle msgctxt properly""" + unit = self.UnitClass("content") + assert unit.getcontext() == "" + + unit.setcontext("content context") + assert unit.getcontext() == "content context" + + unit.setcontext("") + assert unit.getcontext() == "" + class TestCPOFile(test_po.TestPOFile): StoreClass = cpo.pofile def test_msgidcomments(self): Index: translate/storage/cpo.py =================================================================== --- translate/storage/cpo.py (revision 7848) +++ translate/storage/cpo.py (working copy) @@ -513,6 +513,11 @@ else: return msgidcomment + def setcontext(self, context): + """Sets the current context for this unit""" + # TODO: inspect what behavior this should really have + gpo.po_message_set_msgctxt(self._gpo_message, context) + class pofile(pocommon.pofile): UnitClass = pounit def __init__(self, inputfile=None, encoding=None, unitclass=pounit): Index: translate/convert/xliff2po.py =================================================================== --- translate/convert/xliff2po.py (revision 7848) +++ translate/convert/xliff2po.py (working copy) @@ -42,6 +42,11 @@ thepo.source = transunit.source thepo.target = transunit.target + #Context + context = transunit.getcontextgroups('po-1025') + if context: + thepo.setcontext(context[0][0][1]) + #Location comments locations = transunit.getlocations() if locations: Index: translate/convert/test_xliff2po.py =================================================================== --- translate/convert/test_xliff2po.py (revision 7848) +++ translate/convert/test_xliff2po.py (working copy) @@ -170,7 +170,20 @@ assert potext.index('msgstr[0] "inkomo"') assert potext.index('msgstr[1] "iinkomo"') + def test_xliff_with_context(self): + """tests if we support context strings""" + minixlf = self.xliffskeleton % ''' + gold + ouro + + the precious + +''' + pofile = self.xliff2po(minixlf) + unit = pofile.units[0] + assert unit.getcontext() == "the precious" + class TestBasicXLIFF2PO(TestXLIFF2PO): """This tests a basic XLIFF file without xmlns attribute""" Index: translate/convert/po2xliff.py =================================================================== --- translate/convert/po2xliff.py (revision 7848) +++ translate/convert/po2xliff.py (working copy) @@ -45,6 +45,12 @@ unit.markfuzzy(inputunit.isfuzzy()) else: unit.markapproved(False) + + #Handle msgctxt + context = inputunit.getcontext() + if context: + unit.createcontextgroup("po-1025", [("x-unknown", context)], + purpose="match information") #Handle #: location comments for location in inputunit.getlocations(): Index: translate/convert/test_po2xliff.py =================================================================== --- translate/convert/test_po2xliff.py (revision 7848) +++ translate/convert/test_po2xliff.py (working copy) @@ -294,3 +294,15 @@ assert xliff.units[2].xmlelement.get("approved") == "no" assert not xliff.units[2].isapproved() + def test_po_with_msgctxt(self): + minipo = 'msgctxt "numbers"\nmsgid "one"\nmsgstr "um"\n' + xliff = self.po2xliff(minipo) + print str(xliff) + node = xliff.units[0].xmlelement + contextgroups = node.findall(".//%s" % xliff.namespaced("context-group")) + assert len(contextgroups) == 1 + for group in contextgroups: + assert group.get("name") == "po-1025" + assert group.get("purpose") == "match information" + tuples = self.getcontexttuples(node, xliff.namespace) + assert tuples == [('x-unknown', 'numbers')]