mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-09 03:04:10 -04:00
This commit is contained in:
parent
90fa7a60f6
commit
65c8131813
121
src/libprs500/translations/automatic.py
Normal file
121
src/libprs500/translations/automatic.py
Normal file
@ -0,0 +1,121 @@
|
||||
|
||||
import sys, glob, re
|
||||
|
||||
import mechanize
|
||||
|
||||
URL = 'http://translate.google.com/translate_t?text=%(text)s&langpair=en|%(lang)s&oe=UTF8'
|
||||
|
||||
def browser():
|
||||
opener = mechanize.Browser()
|
||||
opener.set_handle_refresh(True)
|
||||
opener.set_handle_robots(False)
|
||||
opener.addheaders = [('User-agent', 'Mozilla/5.0 (X11; U; i686 Linux; en_US; rv:1.8.0.4) Gecko/20060508 Firefox/1.5.0.4')]
|
||||
return opener
|
||||
|
||||
|
||||
class PoFile(object):
|
||||
|
||||
SANITIZE = re.compile(r'&|<[^<>]+>|\%')
|
||||
STRING = re.compile(r'"(.*)"')
|
||||
|
||||
def __init__(self, po_file):
|
||||
self.po_file = open(po_file, 'r+b')
|
||||
self.browser = browser()
|
||||
self.entries = []
|
||||
self.read()
|
||||
|
||||
def sanitize_line(self, line):
|
||||
return self.SANITIZE.sub(line)
|
||||
|
||||
def read(self):
|
||||
translated_lines = []
|
||||
self.po_file.seek(0)
|
||||
|
||||
ID = 0
|
||||
STR = 1
|
||||
WHR = 2
|
||||
|
||||
mode = None
|
||||
where, msgid, msgstr, fuzzy = [], [], [], False
|
||||
|
||||
for line in self.po_file.readlines():
|
||||
prev_mode = mode
|
||||
if line.startswith('#:'):
|
||||
mode = WHR
|
||||
elif line.startswith('msgid'):
|
||||
mode = ID
|
||||
elif line.startswith('msgstr'):
|
||||
mode = STR
|
||||
elif line.startswith('#,'):
|
||||
fuzzy = True
|
||||
continue
|
||||
elif line.startswith('#') or not line.strip():
|
||||
mode = None
|
||||
|
||||
|
||||
if mode != prev_mode:
|
||||
if prev_mode == STR:
|
||||
self.add_entry(where, fuzzy, msgid, msgstr)
|
||||
where, msgid, msgstr, fuzzy = [], [], [], False
|
||||
|
||||
if mode == WHR:
|
||||
where.append(line[2:].strip())
|
||||
elif mode == ID:
|
||||
msgid.append(self.get_string(line))
|
||||
elif mode == STR:
|
||||
msgstr.append(self.get_string(line))
|
||||
elif mode == None:
|
||||
self.add_line(line)
|
||||
|
||||
def get_string(self, line):
|
||||
return self.STRING.search(line).group(1)
|
||||
|
||||
def add_line(self, line):
|
||||
self.entries.append(line.strip())
|
||||
|
||||
def add_entry(self, where, fuzzy, msgid, msgstr):
|
||||
self.entries.append(Entry(where, fuzzy, msgid, msgstr))
|
||||
|
||||
def __str__(self):
|
||||
return '\n'.join([str(i) for i in self.entries]) + '\n'
|
||||
|
||||
|
||||
class Entry(object):
|
||||
|
||||
def __init__(self, where, fuzzy, msgid, msgstr, encoding='utf-8'):
|
||||
self.fuzzy = fuzzy
|
||||
self.where = [i.decode(encoding) for i in where]
|
||||
self.msgid = [i.decode(encoding) for i in msgid]
|
||||
self.msgstr = [i.decode(encoding) for i in msgstr]
|
||||
self.encoding = encoding
|
||||
|
||||
def __str__(self):
|
||||
ans = []
|
||||
for line in self.where:
|
||||
ans.append('#: ' + line.encode(self.encoding))
|
||||
if self.fuzzy:
|
||||
ans.append('#, fuzzy')
|
||||
first = True
|
||||
for line in self.msgid:
|
||||
prefix = 'msgid ' if first else ''
|
||||
ans.append(prefix + '"%s"'%line.encode(self.encoding))
|
||||
first = False
|
||||
first = True
|
||||
for line in self.msgstr:
|
||||
prefix = 'msgstr ' if first else ''
|
||||
ans.append(prefix + '"%s"'%line.encode(self.encoding))
|
||||
first = False
|
||||
return '\n'.join(ans)
|
||||
|
||||
|
||||
|
||||
def main():
|
||||
po_files = glob.glob('*.po')
|
||||
for po_file in po_files:
|
||||
PoFile(po_file)
|
||||
pass
|
||||
|
||||
if __name__ == '__main__':
|
||||
pof = PoFile('de.po')
|
||||
open('/tmp/de.po', 'wb').write(str(pof))
|
||||
#sys.exit(main())
|
Loading…
x
Reference in New Issue
Block a user