1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 """Perform quality checks on Gettext PO, XLIFF and TMX localization files
22
23 Snippet files whenever a test fails. These can be examined, corrected and
24 merged back into the originals using pomerge
25
26 See: http://translate.sourceforge.net/wiki/toolkit/pofilter for examples and
27 usage instructions and http://translate.sourceforge.net/wiki/toolkit/pofilter_tests
28 for full descriptions of all tests
29 """
30
31 from translate.storage import factory
32 from translate.filters import checks
33 from translate.filters import autocorrect
34 from translate.misc import optrecurse
35 import os
36
38 - def __init__(self, options, checkerclasses=None, checkerconfig=None):
50
52 """lists the docs for filters available on checker..."""
53 filterdict = self.checker.getfilters()
54 filterdocs = ["%s\t%s" % (name, filterfunc.__doc__) for (name, filterfunc) in filterdict.iteritems()]
55 filterdocs.sort()
56 return "\n".join(filterdocs)
57
74
76 """Runs filters on a translation store object.
77 Parameters:
78 - transfile. A translation store object.
79 Return value:
80 - A new translation store object with the results of the filter included."""
81 newtransfile = type(transfile)()
82 newtransfile.setsourcelanguage(transfile.sourcelanguage)
83 newtransfile.settargetlanguage(transfile.targetlanguage)
84 for unit in transfile.units:
85 filterresult = self.filterunit(unit)
86 if filterresult:
87 if filterresult != autocorrect:
88 for filtername, filtermessage in filterresult.iteritems():
89 unit.adderror(filtername, filtermessage)
90 if isinstance(filtermessage, checks.SeriousFilterFailure):
91 unit.markfuzzy()
92 newtransfile.addunit(unit)
93 if self.options.includeheader and newtransfile.units > 0:
94 newtransfile.units.insert(0, newtransfile.makeheader())
95 newtransfile.changeencoding("UTF-8")
96 return newtransfile
97
99 """a specialized Option Parser for filter tools..."""
101 """construct the specialized Option Parser"""
102 optrecurse.RecursiveOptionParser.__init__(self, formats)
103 self.set_usage()
104 self.add_option("-l", "--listfilters", action="callback", dest='listfilters',
105 default=False, callback_kwargs={'dest_value': True},
106 callback=self.parse_noinput, help="list filters available")
107
112
151
152 -def runfilter(inputfile, outputfile, templatefile, checkfilter=None):
153 """reads in inputfile, filters using checkfilter, writes to outputfile"""
154 fromfile = factory.getobject(inputfile)
155 tofile = checkfilter.filterfile(fromfile)
156 if tofile.isempty():
157 return 0
158 outputfile.write(str(tofile))
159 return 1
160
162 formats = {"po":("po", runfilter), "pot":("pot", runfilter),
163 "xliff":("xliff", runfilter), "xlf":("xlf", runfilter),
164 "tmx":("tmx", runfilter),
165 None:("po", runfilter)}
166
167 parser = FilterOptionParser(formats)
168 parser.add_option("", "--review", dest="includereview",
169 action="store_true", default=True,
170 help="include units marked for review (default)")
171 parser.add_option("", "--noreview", dest="includereview",
172 action="store_false", default=True,
173 help="exclude units marked for review")
174 parser.add_option("", "--fuzzy", dest="includefuzzy",
175 action="store_true", default=True,
176 help="include units marked fuzzy (default)")
177 parser.add_option("", "--nofuzzy", dest="includefuzzy",
178 action="store_false", default=True,
179 help="exclude units marked fuzzy")
180 parser.add_option("", "--header", dest="includeheader",
181 action="store_true", default=False,
182 help="include a PO header in the output")
183 parser.add_option("", "--autocorrect", dest="autocorrect",
184 action="store_true", default=False,
185 help="output automatic corrections where possible rather than describing issues")
186 parser.add_option("", "--language", dest="targetlanguage", default=None,
187 help="set target language code (e.g. af-ZA) [required for spell check and recommended in general]", metavar="LANG")
188 parser.add_option("", "--openoffice", dest="filterclass",
189 action="store_const", default=None, const=checks.OpenOfficeChecker,
190 help="use the standard checks for OpenOffice translations")
191 parser.add_option("", "--mozilla", dest="filterclass",
192 action="store_const", default=None, const=checks.MozillaChecker,
193 help="use the standard checks for Mozilla translations")
194 parser.add_option("", "--gnome", dest="filterclass",
195 action="store_const", default=None, const=checks.GnomeChecker,
196 help="use the standard checks for Gnome translations")
197 parser.add_option("", "--kde", dest="filterclass",
198 action="store_const", default=None, const=checks.KdeChecker,
199 help="use the standard checks for KDE translations")
200 parser.add_option("", "--wx", dest="filterclass",
201 action="store_const", default=None, const=checks.KdeChecker,
202 help="use the standard checks for wxWidgets translations")
203 parser.add_option("", "--excludefilter", dest="excludefilters",
204 action="append", default=[], type="string", metavar="FILTER",
205 help="don't use FILTER when filtering")
206 parser.add_option("-t", "--test", dest="limitfilters",
207 action="append", default=None, type="string", metavar="FILTER",
208 help="only use test FILTERs specified with this option when filtering")
209 parser.add_option("", "--notranslatefile", dest="notranslatefile",
210 default=None, type="string", metavar="FILE",
211 help="read list of untranslatable words from FILE (must not be translated)")
212 parser.add_option("", "--musttranslatefile", dest="musttranslatefile",
213 default=None, type="string", metavar="FILE",
214 help="read list of translatable words from FILE (must be translated)")
215 parser.add_option("", "--validcharsfile", dest="validcharsfile",
216 default=None, type="string", metavar="FILE",
217 help="read list of all valid characters from FILE (must be in UTF-8)")
218 parser.passthrough.append('checkfilter')
219 parser.description = __doc__
220 return parser
221
223 parser = cmdlineparser()
224 parser.run()
225
226 if __name__ == '__main__':
227 main()
228