1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 """ Convert PHP format .po files to Python format .po files """
23
24 import re
25
26 from translate.storage import po
27 from translate.misc.multistring import multistring
28
29
31
33 """Converts a given .po file (PHP Format) to a Python format .po file, the difference being
34 how variable substitutions work. PHP uses a %1$s format, and Python uses
35 a {0} format (zero indexed). This method will convert, e.g.:
36 I have %2$s apples and %1$s oranges
37 to
38 I have {1} apples and {0} oranges
39 This method ignores strings with %s as both languages will recognize that.
40 """
41 thetargetfile = po.pofile(inputfile="")
42
43 for unit in inputstore.units:
44 newunit = self.convertunit(unit)
45 thetargetfile.addunit(newunit)
46 return thetargetfile
47
57
59 return re.sub('%(\d)\$s', lambda x: "{%d}" % (int(x.group(1))-1), input)
60
62 if isinstance(input, multistring):
63 strings = input.strings
64 elif isinstance(input, list):
65 strings = input
66 else:
67 return self.convertstring(input)
68 for index, string in enumerate(strings):
69 strings[index] = re.sub('%(\d)\$s', lambda x: "{%d}" % (int(x.group(1))-1), string)
70 return multistring(strings)
71
72
74 """Converts from PHP .po format to Python .po format
75
76 @param inputfile: file handle of the source
77 @param outputfile: file handle to write to
78 @param template: unused
79 """
80 convertor = phppo2pypo()
81 inputstore = po.pofile(inputfile)
82 outputstore = convertor.convertstore(inputstore)
83 if outputstore.isempty():
84 return False
85 outputfile.write(str(outputstore))
86 return True
87
88
90 """Converts PHP .po files to Python .po files."""
91 from translate.convert import convert
92
93 formats = {"po": ("po", convertphp2py)}
94 parser = convert.ConvertOptionParser(formats, description=__doc__)
95 parser.run(argv)
96
97
98 if __name__ == '__main__':
99 main()
100