1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 """convert Gettext PO localization files to Windows Resource (.rc) files
24
25 see: http://translate.sourceforge.net/wiki/toolkit/po2rc for examples and
26 usage instructions
27 """
28
29 from translate.misc import quote
30 from translate.storage import po
31 from translate.storage import rc
32
33 eol = "\n"
34
36 - def __init__(self, templatefile, charset="utf-8", lang=None, sublang=None):
37 self.templatefile = templatefile
38 self.templatestore = rc.rcfile(templatefile)
39 self.inputdict = {}
40 self.charset = charset
41 self.lang = lang
42 self.sublang = sublang
43
45 self.makestoredict(inputstore, includefuzzy)
46 outputblocks = []
47 for block in self.templatestore.blocks:
48 outputblocks.append(self.convertblock(block))
49 if self.charset == "utf-8":
50 outputblocks.insert(0, "#pragma code_page(65001)\n")
51 outputblocks.append("#pragma code_page(default)")
52 return outputblocks
53
63
65 newblock = block
66 if isinstance(newblock, unicode):
67 newblock = newblock.encode('utf-8')
68 if newblock.startswith("LANGUAGE"):
69 return "LANGUAGE %s, %s" % (self.lang, self.sublang)
70 for unit in self.templatestore.units:
71 location = unit.getlocations()[0]
72 if self.inputdict.has_key(location):
73 if self.inputdict[location] != unit.match.groupdict()['value']:
74 newmatch = unit.match.group().replace(unit.match.groupdict()['value'], self.inputdict[location])
75 newblock = newblock.replace(unit.match.group(), newmatch)
76 if isinstance(newblock, unicode):
77 newblock = newblock.encode(self.charset)
78 return newblock
79
80 -def convertrc(inputfile, outputfile, templatefile, includefuzzy=False, charset=None, lang=None, sublang=None):
81 inputstore = po.pofile(inputfile)
82 if not lang:
83 raise ValueError("must specify a target language")
84 if templatefile is None:
85 raise ValueError("must have template file for rc files")
86
87 else:
88 convertor = rerc(templatefile, charset, lang, sublang)
89 outputrclines = convertor.convertstore(inputstore, includefuzzy)
90 outputfile.writelines(outputrclines)
91 return 1
92
94
95 from translate.convert import convert
96 formats = {("po", "rc"): ("rc", convertrc)}
97 parser = convert.ConvertOptionParser(formats, usetemplates=True, description=__doc__)
98 defaultcharset = "utf-8"
99 parser.add_option("", "--charset", dest="charset", default=defaultcharset,
100 help="charset to use to decode the RC files (default: %s)" % defaultcharset, metavar="CHARSET")
101 parser.add_option("-l", "--lang", dest="lang", default=None,
102 help="LANG entry", metavar="LANG")
103 defaultsublang="SUBLANG_DEFAULT"
104 parser.add_option("", "--sublang", dest="sublang", default=defaultsublang,
105 help="SUBLANG entry (default: %s)" % defaultsublang, metavar="SUBLANG")
106 parser.passthrough.append("charset")
107 parser.passthrough.append("lang")
108 parser.passthrough.append("sublang")
109 parser.add_fuzzy_option()
110 parser.run(argv)
111
112 if __name__ == '__main__':
113 main()
114