| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152 | #!/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-commentsimport copyfrom pathlib import Pathimport yamlI18N_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 = 0for 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!")
 |