53 lines
1.8 KiB
Python
53 lines
1.8 KiB
Python
|
#!/usr/bin/env python3
|
||
|
|
||
|
# Sync Language Packs
|
||
|
# Script to synchronize each language pack's items against academia's master pack (English).
|
||
|
# https://sourcethemes.com/academic/
|
||
|
#
|
||
|
# Prerequisites: pip3 install PyYAML
|
||
|
#
|
||
|
# TODO: Switch from PyYAML to Ruamel in order to load/dump comments -
|
||
|
# see https://stackoverflow.com/questions/47382227/python-yaml-update-preserving-order-and-comments
|
||
|
|
||
|
import copy
|
||
|
from pathlib import Path
|
||
|
import yaml
|
||
|
|
||
|
I18N_PATH = Path(__file__).resolve().parent.parent.joinpath('i18n')
|
||
|
MASTER_PACK = I18N_PATH.joinpath('en.yaml')
|
||
|
|
||
|
|
||
|
# Load master language pack (English).
|
||
|
with open(MASTER_PACK) as f:
|
||
|
master_map = yaml.safe_load(f)
|
||
|
# if (DEBUG)
|
||
|
# print(master_map)
|
||
|
|
||
|
# Iterate over each child language pack.
|
||
|
cnt = 0
|
||
|
for filename in Path(I18N_PATH).glob("*.yaml"):
|
||
|
if filename.stem != 'en':
|
||
|
i18n_file = I18N_PATH.joinpath(filename)
|
||
|
print(f"Processing {i18n_file} ...")
|
||
|
|
||
|
# Load a child language pack.
|
||
|
with open(i18n_file) as f:
|
||
|
child_map = yaml.safe_load(f)
|
||
|
|
||
|
# Synchronize the language pack's structure against the master language pack.
|
||
|
tmp_map = copy.deepcopy(master_map) # Make a temporary deep copy of the master map (list of objects).
|
||
|
master_index = 0
|
||
|
for master_item in master_map:
|
||
|
translation = next((item['translation'] for item in child_map if item['id'] == master_item['id']),
|
||
|
master_item['translation'])
|
||
|
tmp_map[master_index]['translation'] = translation
|
||
|
master_index += 1
|
||
|
|
||
|
# Write the synced language pack to file.
|
||
|
with open(i18n_file, 'w') as f:
|
||
|
yaml.dump(tmp_map, f, allow_unicode=True, width=float("inf")) # PyYAML will break lines unless a large column width is set.
|
||
|
cnt += 1
|
||
|
|
||
|
# Print results.
|
||
|
print(f"{cnt} child language packs successfully synchronized!")
|