1   
  2   
  3  from translate.convert import xliff2po 
  4  from translate.misc import wStringIO 
  5   
  7      xliffskeleton = '''<?xml version="1.0" ?> 
  8  <xliff version="1.1" xmlns="urn:oasis:names:tc:xliff:document:1.1"> 
  9    <file original="filename.po" source-language="en-US" datatype="po"> 
 10      <body> 
 11          %s 
 12      </body> 
 13    </file> 
 14  </xliff>''' 
 15   
 17          """helper that converts xliff source to po source without requiring files""" 
 18          inputfile = wStringIO.StringIO(xliffsource) 
 19          convertor = xliff2po.xliff2po() 
 20          outputpo = convertor.convertstore(inputfile) 
 21          print "The generated po:" 
 22          print type(outputpo) 
 23          print str(outputpo) 
 24          return outputpo 
  25           
 35    
 37          headertext = '''Project-Id-Version: program 2.1-branch 
 38  Report-Msgid-Bugs-To:  
 39  POT-Creation-Date: 2006-01-09 07:15+0100 
 40  PO-Revision-Date: 2004-03-30 17:02+0200 
 41  Last-Translator: Zuza Software Foundation <xxx@translate.org.za> 
 42  Language-Team: Afrikaans <translate-discuss-xxx@lists.sourceforge.net> 
 43  MIME-Version: 1.0 
 44  Content-Type: text/plain; charset=UTF-8 
 45  Content-Transfer-Encoding: 8bit''' 
 46   
 47          minixlf = (self.xliffskeleton % '''<trans-unit id="1" restype="x-gettext-domain-header" approved="no" xml:space="preserve"> 
 48    <source>%s</source> 
 49    <target>%s</target> 
 50    <note from="po-translator">Zulu translation of program ABC</note> 
 51    </trans-unit> 
 52    <trans-unit> 
 53      <source>gras</source> 
 54      <target>utshani</target> 
 55    </trans-unit>''') % (headertext, headertext) 
 56   
 57          print minixlf 
 58          pofile = self.xliff2po(minixlf) 
 59          assert pofile.translate("gras") == "utshani" 
 60          assert pofile.translate("bla") is None 
 61          potext = str(pofile) 
 62          assert potext.index('# Zulu translation of program ABC') == 0 
 63          assert potext.index('msgid "gras"\n') 
 64          assert potext.index('msgstr "utshani"\n') 
 65          assert potext.index('MIME-Version: 1.0\\n') 
  66   
 86   
106   
108          """Tests location comments (#:)""" 
109          minixlf = self.xliffskeleton % '''<trans-unit id="1"> 
110          <source>nonsense</source> 
111          <target>matlhapolosa</target> 
112          <context-group name="po-reference" purpose="location"> 
113              <context context-type="sourcefile">example.c</context> 
114              <context context-type="linenumber">123</context> 
115              </context-group> 
116          <context-group name="po-reference" purpose="location"> 
117              <context context-type="sourcefile">place.py</context> 
118          </context-group> 
119  </trans-unit>''' 
120          pofile = self.xliff2po(minixlf) 
121          assert pofile.translate("nonsense") == "matlhapolosa" 
122          assert pofile.translate("bla") is None 
123          unit = pofile.units[0] 
124          locations = unit.getlocations() 
125          assert len(locations) == 2 
126          assert "example.c:123" in locations 
127          assert "place.py" in locations 
 128   
130          """Tests fuzzyness""" 
131          minixlf = self.xliffskeleton % '''<trans-unit approved="no"> 
132              <source>book</source> 
133          </trans-unit> 
134          <trans-unit id="2" approved="yes"> 
135              <source>nonsense</source> 
136              <target>matlhapolosa</target> 
137          </trans-unit> 
138          <trans-unit id="2" approved="no"> 
139              <source>verb</source> 
140              <target state="needs-review-translation">lediri</target> 
141          </trans-unit>''' 
142          pofile = self.xliff2po(minixlf) 
143          assert pofile.translate("nonsense") == "matlhapolosa" 
144          assert pofile.translate("verb") == "lediri" 
145          assert pofile.translate("book") is None 
146          assert pofile.translate("bla") is None 
147          assert len(pofile.units) == 3 
148           
149           
150          assert not pofile.units[1].isfuzzy() 
151          assert pofile.units[2].isfuzzy() 
 152           
154          """Tests fuzzyness""" 
155          minixlf = self.xliffskeleton % '''<group restype="x-gettext-plurals"> 
156          <trans-unit id="1[0]" xml:space="preserve"> 
157              <source>cow</source> 
158              <target>inkomo</target> 
159          </trans-unit> 
160          <trans-unit id="1[1]" xml:space="preserve"> 
161              <source>cows</source> 
162              <target>iinkomo</target> 
163          </trans-unit> 
164  </group>''' 
165          pofile = self.xliff2po(minixlf) 
166          print str(pofile) 
167          potext = str(pofile) 
168          assert len(pofile.units) == 1 
169          assert potext.index('msgid_plural "cows"') 
170          assert potext.index('msgstr[0] "inkomo"') 
171          assert potext.index('msgstr[1] "iinkomo"') 
  172   
173   
175      """This tests a basic XLIFF file without xmlns attribute""" 
176   
177      xliffskeleton = '''<?xml version="1.0" ?> 
178  <xliff version="1.1"> 
179    <file original="filename.po" source-language="en-US" datatype="po"> 
180      <body> 
181          %s 
182      </body> 
183    </file> 
184  </xliff>''' 
 185