mirror of
https://github.com/tildearrow/furnace.git
synced 2024-11-30 00:13:03 +00:00
43 lines
1.6 KiB
Python
43 lines
1.6 KiB
Python
|
def merge_po_files_preserve_format(base_file, new_file, output_file):
|
||
|
with open(base_file, 'r', encoding='utf-8') as f1, open(new_file, 'r', encoding='utf-8') as f2:
|
||
|
base_lines = f1.readlines()
|
||
|
new_lines = f2.readlines()
|
||
|
|
||
|
# Traverse the new_lines and extract msgid and msgstr
|
||
|
new_translations = {}
|
||
|
i = 0
|
||
|
while i < len(new_lines):
|
||
|
if new_lines[i].startswith('msgid '):
|
||
|
msgid_start = i
|
||
|
while not new_lines[i].startswith('msgstr '):
|
||
|
i += 1
|
||
|
msgid = ''.join(new_lines[msgid_start:i])
|
||
|
msgstr = new_lines[i].split('msgstr ')[1].strip()
|
||
|
new_translations[msgid] = msgstr
|
||
|
i += 1
|
||
|
|
||
|
# Open the output_file and write the merged content
|
||
|
with open(output_file, 'w', encoding='utf-8') as output:
|
||
|
i = 0
|
||
|
while i < len(base_lines):
|
||
|
if base_lines[i].startswith('msgid '):
|
||
|
msgid_start = i
|
||
|
while not base_lines[i].startswith('msgstr '):
|
||
|
i += 1
|
||
|
msgid = ''.join(base_lines[msgid_start:i])
|
||
|
if msgid in new_translations:
|
||
|
output.write(f'{msgid}')
|
||
|
output.write(f'msgstr {new_translations[msgid]}\n')
|
||
|
else:
|
||
|
output.write(base_lines[i])
|
||
|
i += 1
|
||
|
else:
|
||
|
output.write(base_lines[i])
|
||
|
i += 1
|
||
|
|
||
|
if __name__ == '__main__':
|
||
|
base_file = 'base.po'
|
||
|
new_file = 'new.po'
|
||
|
output_file = 'output.po'
|
||
|
merge_po_files_preserve_format(base_file, new_file, output_file)
|