mirror of
https://github.com/tiennm99/HugoBlox-kit.git
synced 2026-10-04 22:13:04 +00:00
The structure of some language packs is very outdated, leading to missing user interface text when using these packs. Developed a Python script to sync the structure of all language packs against the master pack (English) so that each pack has the latest set of localisation strings. Note that synced items will still need translating, this commit just ensures that all language packs have the same structure. Fix #1062
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 Academic'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!")
|