1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 from translate.storage import base
23 from translate.storage import poheader
24 from translate.storage.workflow import StateEnum as state
25
26 import re
27
28 msgid_comment_re = re.compile("_: (.*?)\n")
29
39
40
41 -class pounit(base.TranslationUnit):
42 S_OBSOLETE = state.OBSOLETE
43 S_UNTRANSLATED = state.EMPTY
44 S_FUZZY = state.NEEDS_WORK
45 S_TRANSLATED = state.UNREVIEWED
46
47 STATE = {
48 S_OBSOLETE: (state.OBSOLETE, state.EMPTY),
49 S_UNTRANSLATED: (state.EMPTY, state.NEEDS_WORK),
50 S_FUZZY: (state.NEEDS_WORK, state.UNREVIEWED),
51 S_TRANSLATED: (state.UNREVIEWED, state.MAX),
52 }
53
54 - def adderror(self, errorname, errortext):
55 """Adds an error message to this unit."""
56 text = u'(pofilter) %s: %s' % (errorname, errortext)
57
58 if text not in self.getnotes(origin='translator'):
59 self.addnote(text, origin="translator")
60
62 """Get all error messages."""
63 notes = self.getnotes(origin="translator").split('\n')
64 errordict = {}
65 for note in notes:
66 if '(pofilter) ' in note:
67 error = note.replace('(pofilter) ', '')
68 errorname, errortext = error.split(': ', 1)
69 errordict[errorname] = errortext
70 return errordict
71
73 """Marks the unit to indicate whether it needs review. Adds an optional explanation as a note."""
74 if needsreview:
75 reviewnote = "(review)"
76 if explanation:
77 reviewnote += " " + explanation
78 self.addnote(reviewnote, origin="translator")
79 else:
80
81 notestring = self.getnotes(origin="translator")
82 notes = notestring.split('\n')
83 newnotes = []
84 for note in notes:
85 if not '(review)' in note:
86 newnotes.append(note)
87 newnotes = '\n'.join(newnotes)
88 self.removenotes()
89 self.addnote(newnotes, origin="translator")
90
93
96
99
102
105
108
116
119
124
126 raise NotImplementedError()
127
132
133
135 """Tests whether the given encoding is known in the python runtime, or returns utf-8.
136 This function is used to ensure that a valid encoding is always used."""
137 if encoding == "CHARSET" or encoding == None:
138 return 'utf-8'
139 return encoding
140
141
142
143
144
145
146
147
148 -class pofile(poheader.poheader, base.TranslationStore):
149 Name = _("Gettext PO file")
150 Mimetypes = ["text/x-gettext-catalog", "text/x-gettext-translation", "text/x-po", "text/x-pot"]
151 Extensions = ["po", "pot"]
152
153 - def __init__(self, inputfile=None, encoding=None):
154 super(pofile, self).__init__(unitclass=self.UnitClass)
155 self.units = []
156 self.filename = ''
157 self._encoding = encodingToUse(encoding)
158 if inputfile is not None:
159 self.parse(inputfile)
160 else:
161 self.init_headers()
162