switch the TP and Gettext to a new system/format architecture
offlate/formats/entry.py unknown status 1
1 | + | class Entry: | |
2 | + | def __init__(self, msgids, msgstrs, fuzzy, obsolete): | |
3 | + | self.msgids = msgids | |
4 | + | self.msgstrs = msgstrs | |
5 | + | self.fuzzy = fuzzy | |
6 | + | self.obsolete = obsolete | |
7 | + | ||
8 | + | def isTranslated(self): | |
9 | + | for msgstr in self.msgstrs: | |
10 | + | if msgstr == '': | |
11 | + | return False | |
12 | + | return True | |
13 | + | ||
14 | + | def isFuzzy(self): | |
15 | + | return self.fuzzy | |
16 | + | ||
17 | + | def isObsolete(self): | |
18 | + | return self.obsolete | |
19 | + | ||
20 | + | def update(self, index, content): | |
21 | + | self.msgstrs[index] = content | |
22 | + | ||
23 | + | def get(self, index): | |
24 | + | return self.msgstrs[index] | |
25 | + | ||
26 | + | class POEntry(Entry): | |
27 | + | def __init__(self, entry): | |
28 | + | msgids = [entry.msgid] | |
29 | + | msgstrs = [entry.msgstr] | |
30 | + | if 0 in entry.msgstr_plural: | |
31 | + | msgstrs = [] | |
32 | + | for msgstr in entry.msgstr_plural: | |
33 | + | msgstrs.append(entry.msgstr_plural[msgstr]) | |
34 | + | msgids = [entry.msgid, entry.msgid_plural] | |
35 | + | Entry.__init__(self, msgids, msgstrs, "fuzzy" in entry.flags, entry.obsolete) | |
36 | + | self.entry = entry | |
37 | + | ||
38 | + | def update(self, index, content): | |
39 | + | Entry.update(self, index, content) | |
40 | + | self.fuzzy = False | |
41 | + | self.entry.flags = [x for x in self.entry.flags if x != 'fuzzy'] | |
42 | + | if 0 in self.entry.msgstr_plural: | |
43 | + | self.entry.msgstr_plural[index] = content | |
44 | + | else: | |
45 | + | self.entry.msgstr = content | |
46 | + | ||
47 | + | class JSONEntry(Entry): | |
48 | + | def __init__(self, entry): | |
49 | + | Entry.__init__(self, [entry['source_string']], [entry['translation']], False, False) | |
50 | + | self.entry = entry | |
51 | + | ||
52 | + | def update(self, index, content): | |
53 | + | Entry.update(self, index, content) | |
54 | + | self.entry['translation'] = content | |
55 | + | ||
56 | + | class YAMLEntry(Entry): | |
57 | + | def __init__(self, entry): | |
58 | + | self.key = list(entry.keys())[0] | |
59 | + | Entry.__init__(self, self.key, entry[self.key], False, False) | |
60 | + | self.entry = entry | |
61 | + | ||
62 | + | def update(self, index, content): | |
63 | + | Entry.update(self, index, content) | |
64 | + | self.entry[self.key] = content |
offlate/formats/gettext.py unknown status 1
1 | + | """ The gettext format. """ | |
2 | + | ||
3 | + | import polib | |
4 | + | import datetime | |
5 | + | from dateutil.tz import tzlocal | |
6 | + | from .entry import POEntry | |
7 | + | ||
8 | + | class GettextFormat: | |
9 | + | def __init__(self, files, conf): | |
10 | + | self.po = polib.pofile(files["file"]) | |
11 | + | self.conf = conf | |
12 | + | ||
13 | + | def content(self): | |
14 | + | po = [POEntry(x) for x in self.po] | |
15 | + | return po | |
16 | + | ||
17 | + | def save(self): | |
18 | + | self.po.metadata['PO-Revision-Date'] = str(datetime.datetime.now(tzlocal()).__format__("%Y-%m-%d %H:%M%z")) | |
19 | + | self.po.metadata['Last-Translator'] = self.conf['fullname'] | |
20 | + | self.po.metadata['Language'] = self.conf['lang'] | |
21 | + | self.po.metadata['X-Generator'] = 'Offlate ' + self.conf['version'] | |
22 | + | self.po.save() |
offlate/systems/entry.py unknown status 2
1 | - | class Entry: | |
2 | - | def __init__(self, msgids, msgstrs, fuzzy, obsolete): | |
3 | - | self.msgids = msgids | |
4 | - | self.msgstrs = msgstrs | |
5 | - | self.fuzzy = fuzzy | |
6 | - | self.obsolete = obsolete | |
7 | - | ||
8 | - | def isTranslated(self): | |
9 | - | for msgstr in self.msgstrs: | |
10 | - | if msgstr == '': | |
11 | - | return False | |
12 | - | return True | |
13 | - | ||
14 | - | def isFuzzy(self): | |
15 | - | return self.fuzzy | |
16 | - | ||
17 | - | def isObsolete(self): | |
18 | - | return self.obsolete | |
19 | - | ||
20 | - | def update(self, index, content): | |
21 | - | self.msgstrs[index] = content | |
22 | - | ||
23 | - | def get(self, index): | |
24 | - | return self.msgstrs[index] | |
25 | - | ||
26 | - | class POEntry(Entry): | |
27 | - | def __init__(self, entry): | |
28 | - | msgids = [entry.msgid] | |
29 | - | msgstrs = [entry.msgstr] | |
30 | - | if 0 in entry.msgstr_plural: | |
31 | - | msgstrs = [] | |
32 | - | for msgstr in entry.msgstr_plural: | |
33 | - | msgstrs.append(entry.msgstr_plural[msgstr]) | |
34 | - | msgids = [entry.msgid, entry.msgid_plural] | |
35 | - | Entry.__init__(self, msgids, msgstrs, "fuzzy" in entry.flags, entry.obsolete) | |
36 | - | self.entry = entry | |
37 | - | ||
38 | - | def update(self, index, content): | |
39 | - | Entry.update(self, index, content) | |
40 | - | self.fuzzy = False | |
41 | - | self.entry.flags = [x for x in self.entry.flags if x != 'fuzzy'] | |
42 | - | if 0 in self.entry.msgstr_plural: | |
43 | - | self.entry.msgstr_plural[index] = content | |
44 | - | else: | |
45 | - | self.entry.msgstr = content | |
46 | - | ||
47 | - | class JSONEntry(Entry): | |
48 | - | def __init__(self, entry): | |
49 | - | Entry.__init__(self, [entry['source_string']], [entry['translation']], False, False) | |
50 | - | self.entry = entry | |
51 | - | ||
52 | - | def update(self, index, content): | |
53 | - | Entry.update(self, index, content) | |
54 | - | self.entry['translation'] = content | |
55 | - | ||
56 | - | class YAMLEntry(Entry): | |
57 | - | def __init__(self, entry): | |
58 | - | self.key = list(entry.keys())[0] | |
59 | - | Entry.__init__(self, self.key, entry[self.key], False, False) | |
60 | - | self.entry = entry | |
61 | - | ||
62 | - | def update(self, index, content): | |
63 | - | Entry.update(self, index, content) | |
64 | - | self.entry[self.key] = content |
offlate/systems/tp.py
14 | 14 | import shutil | |
15 | 15 | from pathlib import Path | |
16 | 16 | ||
17 | - | from .entry import POEntry | |
17 | + | from ..formats.entry import POEntry | |
18 | + | from ..formats.gettext import GettextFormat | |
18 | 19 | ||
19 | 20 | class TPProject: | |
20 | 21 | def __init__(self, conf, name, lang, data = {}): | |
… | |||
127 | 128 | s.send_message(msg) | |
128 | 129 | ||
129 | 130 | def save(self): | |
130 | - | self.po.metadata['PO-Revision-Date'] = str(datetime.datetime.now(tzlocal()).__format__("%Y-%m-%d %H:%M%z")) | |
131 | - | self.po.metadata['Last-Translator'] = self.conf['fullname'] | |
132 | - | self.po.metadata['Language'] = self.lang | |
133 | - | self.po.metadata['X-Generator'] = 'Offlate 0.1' | |
134 | 131 | self.po.save() | |
135 | 132 | ||
136 | 133 | def content(self): | |
137 | - | self.po = polib.pofile(self.popath) | |
138 | - | po = [POEntry(x) for x in self.po] | |
139 | - | return {'default': po} | |
134 | + | self.po = GettextFormat({'file': self.popath}, | |
135 | + | {'version': '0.1', | |
136 | + | 'fullname': self.conf['fullname'], | |
137 | + | 'lang': self.lang}) | |
138 | + | return {'default': self.po.content()} |
offlate/systems/transifex.py
7 | 7 | ||
8 | 8 | from pathlib import Path | |
9 | 9 | ||
10 | - | from .entry import JSONEntry | |
10 | + | from ..formats.entry import JSONEntry | |
11 | 11 | ||
12 | 12 | def yaml_rec_load(path, source, dest): | |
13 | 13 | ans = [] |