Package translate :: Package storage :: Module tmx
[hide private]
[frames] | no frames]

Source Code for Module translate.storage.tmx

  1  #!/usr/bin/env python 
  2  # -*- coding: utf-8 -*- 
  3  # 
  4  # Copyright 2005-2007 Zuza Software Foundation 
  5  #  
  6  # This file is part of translate. 
  7  # 
  8  # translate is free software; you can redistribute it and/or modify 
  9  # it under the terms of the GNU General Public License as published by 
 10  # the Free Software Foundation; either version 2 of the License, or 
 11  # (at your option) any later version. 
 12  #  
 13  # translate is distributed in the hope that it will be useful, 
 14  # but WITHOUT ANY WARRANTY; without even the implied warranty of 
 15  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the 
 16  # GNU General Public License for more details. 
 17  # 
 18  # You should have received a copy of the GNU General Public License 
 19  # along with translate; if not, write to the Free Software 
 20  # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA 
 21  # 
 22   
 23  """module for parsing TMX translation memeory files""" 
 24   
 25  from translate.storage import lisa 
 26  from lxml import etree 
 27   
 28  from translate import __version__ 
 29   
30 -class tmxunit(lisa.LISAunit):
31 """A single unit in the TMX file.""" 32 rootNode = "tu" 33 languageNode = "tuv" 34 textNode = "seg" 35
36 - def createlanguageNode(self, lang, text, purpose):
37 """returns a langset xml Element setup with given parameters""" 38 if isinstance(text, str): 39 text = text.decode("utf-8") 40 langset = etree.Element(self.languageNode) 41 lisa.setXMLlang(langset, lang) 42 seg = etree.SubElement(langset, self.textNode) 43 seg.text = text 44 return langset
45
46 - def addnote(self, text, origin=None):
47 """Add a note specifically in a "note" tag. 48 49 The origin parameter is ignored""" 50 if isinstance(text, str): 51 text = text.decode("utf-8") 52 note = etree.SubElement(self.xmlelement, self.namespaced("note")) 53 note.text = text.strip()
54
55 - def getnotelist(self, origin=None):
56 """Private method that returns the text from notes. 57 58 The origin parameter is ignored..""" 59 note_nodes = self.xmlelement.findall(".//%s" % self.namespaced("note")) 60 note_list = [lisa.getText(note) for note in note_nodes] 61 62 return note_list
63
64 - def getnotes(self, origin=None):
65 return '\n'.join(self.getnotelist(origin=origin))
66
67 - def removenotes(self):
68 """Remove all the translator notes.""" 69 notes = self.xmlelement.findall(".//%s" % self.namespaced("note")) 70 for note in notes: 71 self.xmlelement.remove(note)
72
73 - def adderror(self, errorname, errortext):
74 """Adds an error message to this unit.""" 75 #TODO: consider factoring out: some duplication between XLIFF and TMX 76 text = errorname + ': ' + errortext 77 self.addnote(text, origin="pofilter")
78
79 - def geterrors(self):
80 """Get all error messages.""" 81 #TODO: consider factoring out: some duplication between XLIFF and TMX 82 notelist = self.getnotelist(origin="pofilter") 83 errordict = {} 84 for note in notelist: 85 errorname, errortext = note.split(': ') 86 errordict[errorname] = errortext 87 return errordict
88 89
90 -class tmxfile(lisa.LISAfile):
91 """Class representing a TMX file store.""" 92 UnitClass = tmxunit 93 rootNode = "tmx" 94 bodyNode = "body" 95 XMLskeleton = '''<?xml version="1.0" encoding="utf-8"?> 96 <!DOCTYPE tmx SYSTEM "tmx14.dtd"> 97 <tmx version="1.4"> 98 <header></header> 99 <body></body> 100 </tmx>''' 101
102 - def addheader(self):
103 headernode = self.document.find("//%s" % self.namespaced("header")) 104 headernode.set("creationtool", "Translate Toolkit - po2tmx") 105 headernode.set("creationtoolversion", __version__.ver) 106 headernode.set("segtype", "sentence") 107 headernode.set("o-tmf", "UTF-8") 108 headernode.set("adminlang", "en") 109 #TODO: consider adminlang. Used for notes, etc. Possibly same as targetlanguage 110 headernode.set("srclang", self.sourcelanguage) 111 headernode.set("datatype", "PlainText")
112 #headernode.set("creationdate", "YYYYMMDDTHHMMSSZ" 113 #headernode.set("creationid", "CodeSyntax" 114
115 - def addtranslation(self, source, srclang, translation, translang):
116 """addtranslation method for testing old unit tests""" 117 unit = self.addsourceunit(source) 118 unit.target = translation 119 tuvs = unit.xmlelement.findall('.//%s' % self.namespaced('tuv')) 120 lisa.setXMLlang(tuvs[0], srclang) 121 lisa.setXMLlang(tuvs[1], translang)
122
123 - def translate(self, sourcetext, sourcelang=None, targetlang=None):
124 """method to test old unit tests""" 125 return getattr(self.findunit(sourcetext), "target", None)
126