julen / translate forked from egparedes/translate

Toolkit assisting in the localization of software

This URL has Read+Write access

julen (author)
Sat Nov 22 04:54:00 -0800 2008
commit  e05b7b25a7dc733353b233b66ed4789bc6b78000
tree    2f35d4167f20124a704660e993e241f231ced101
parent  24c466f4605dc7f61b1fc4d02b9a312e1dc81aee
translate / tools / pocompile.py
100644 75 lines (66 sloc) 2.918 kb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
#!/usr/bin/env python
# -*- coding: utf-8 -*-
#
# Copyright 2005, 2006 Zuza Software Foundation
#
# This file is part of the translate-toolkit
#
# translate is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# translate is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with translate; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
 
"""Compile XLIFF and Gettext PO localization files into Gettext MO (Machine Object) files
 
See: http://translate.sourceforge.net/wiki/toolkit/pocompile for examples and
usage instructions
"""
 
from translate.storage import factory
from translate.storage import po
from translate.storage import mo
 
class POCompile:
 
    def convertstore(self, inputfile, includefuzzy=False):
        outputfile = mo.mofile()
        for unit in inputfile.units:
            if unit.istranslated() or (unit.isfuzzy() and includefuzzy and unit.target):
                mounit = mo.mounit()
                if unit.isheader():
                    mounit.source = ""
                else:
                    mounit.source = unit.source
                    if hasattr(unit, "msgidcomments"):
                        mounit.source.strings[0] = po.unquotefrompo(unit.msgidcomments) + mounit.source.strings[0]
                    if hasattr(unit, "msgctxt"):
                        mounit.msgctxt = po.unquotefrompo(unit.msgctxt)
                mounit.target = unit.target
                outputfile.addunit(mounit)
        return str(outputfile)
 
def convertmo(inputfile, outputfile, templatefile, includefuzzy=False):
    """reads in a base class derived inputfile, converts using pocompile, writes to outputfile"""
    # note that templatefile is not used, but it is required by the converter...
    inputstore = factory.getobject(inputfile)
    if inputstore.isempty():
        return 0
    convertor = POCompile()
    outputmo = convertor.convertstore(inputstore, includefuzzy)
    # We have to make sure that we write the files in binary mode, therefore we
    # reopen the file accordingly
    outputfile.close()
    outputfile = open(outputfile.name, 'wb')
    outputfile.write(outputmo)
    return 1
 
def main():
    from translate.convert import convert
    formats = {"po":("mo", convertmo), "xlf":("mo", convertmo)}
    parser = convert.ConvertOptionParser(formats, usepots=False, description=__doc__)
    parser.add_fuzzy_option()
    parser.run()
 
if __name__ == '__main__':
    main()