58 Zeilen
1.4 KiB
Python
58 Zeilen
1.4 KiB
Python
import os
|
|
import re
|
|
import codecs
|
|
|
|
|
|
def read_locale_file(filename):
|
|
with codecs.open(filename, 'r', 'utf-8') as f:
|
|
lines = f.readlines()
|
|
|
|
header = ''
|
|
for line in lines:
|
|
if line.startswith('##'):
|
|
header += line
|
|
else:
|
|
break
|
|
|
|
r = re.compile(r'^(#|)(([a-z0-9_\.:]*):([a-z0-9_\.-]+|[DINWECF][0-9]{4}))=(.*)$')
|
|
strings = []
|
|
garbage = ''
|
|
for line in lines:
|
|
m = r.match(line)
|
|
if m is not None:
|
|
strings.append({
|
|
'id': m.group(2),
|
|
'ns': m.group(3),
|
|
'value': m.group(5),
|
|
'hash': m.group(1) == '#',
|
|
})
|
|
elif line != '\n' and line != '\r\n' and not line.startswith('##'):
|
|
garbage += line
|
|
|
|
return (strings, header, garbage)
|
|
|
|
|
|
def write_locale_file(filename, header, strings, garbage=''):
|
|
txt = header
|
|
ns = None
|
|
for s in sorted(strings, key=lambda k: k['id']):
|
|
if ns != s['ns']:
|
|
ns = s['ns']
|
|
txt += '\n'
|
|
txt += ('#' if s['hash'] else '') + s['id'] + '=' + s['value'] + '\n'
|
|
|
|
if garbage != '':
|
|
txt += '\n\n#! Garbage\n' + garbage
|
|
|
|
i = 0
|
|
while True:
|
|
backup = filename + '~' + str(i)
|
|
if not os.path.exists(backup):
|
|
break
|
|
i += 1
|
|
|
|
os.rename(filename, backup)
|
|
|
|
with codecs.open(filename, 'w', 'utf-8') as f:
|
|
f.write(txt)
|