You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
116 lines
3.7 KiB
Python
116 lines
3.7 KiB
Python
import csv
|
|
import json
|
|
import os
|
|
import sys
|
|
|
|
# This allows for importing from the localization and util directories NOTE: Auto importing tools will also prepend the import paths with "tools." this will not work and needs to be removed from import paths
|
|
sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), "..")))
|
|
from util.listUtils import missingFromSet
|
|
|
|
|
|
def edit_strings(json_file, json_file_new, csv_file, for_export):
|
|
|
|
# Delete new file if it exists
|
|
if os.path.exists(json_file_new):
|
|
os.remove(json_file_new)
|
|
# Load the JSON file
|
|
with open(json_file, "r") as f:
|
|
data = json.load(f)
|
|
|
|
all_keys = set(data.keys())
|
|
|
|
remove_keys = set()
|
|
add_keys = set()
|
|
keep_keys = set()
|
|
|
|
# Open the CSV file
|
|
with open(csv_file, "r") as f:
|
|
reader = csv.DictReader(f)
|
|
for row in reader:
|
|
|
|
execute = row["EXECUTE"]
|
|
if execute != "TRUE":
|
|
continue
|
|
|
|
action = row["ACTION"]
|
|
existing_key = row["EXISTING_STRING"].strip()
|
|
new_key = row["NEW_STRING"].strip()
|
|
done = row["DONE"]
|
|
|
|
if done == "FALSE":
|
|
continue
|
|
|
|
# Perform the action
|
|
if action == "remove":
|
|
if existing_key in data:
|
|
del data[existing_key]
|
|
remove_keys.add(existing_key)
|
|
else:
|
|
print(f"Key '{existing_key}' not found in JSON file")
|
|
|
|
elif action == "add":
|
|
if new_key not in data:
|
|
data[new_key] = row["NEW_PHRASE"]
|
|
add_keys.add(new_key)
|
|
else:
|
|
print(f"Key '{new_key}' already exists in JSON file")
|
|
|
|
elif action == "replace":
|
|
if existing_key in data:
|
|
del data[existing_key]
|
|
remove_keys.add(existing_key)
|
|
else:
|
|
print(f"Key '{existing_key}' not found in JSON file")
|
|
data[new_key] = row["NEW_PHRASE"]
|
|
add_keys.add(new_key)
|
|
|
|
elif action == "keep":
|
|
if new_key not in data:
|
|
print(f"Key '{new_key}' not found in JSON file")
|
|
data[new_key] = row["NEW_PHRASE"]
|
|
keep_keys.add(new_key)
|
|
|
|
touched_keys = remove_keys.union(add_keys).union(keep_keys)
|
|
untouched_keys = missingFromSet(all_keys, touched_keys)
|
|
if untouched_keys:
|
|
print(
|
|
"The following keys were not touched by the CSV file and will be removed:"
|
|
)
|
|
for key in untouched_keys:
|
|
print(key)
|
|
# del data[key]
|
|
|
|
for_export_keys = set()
|
|
|
|
# Open the CSV file for export
|
|
with open(for_export, "r") as f:
|
|
reader = csv.DictReader(f)
|
|
for row in reader:
|
|
key = row["STRING"]
|
|
phrase = row["ENGLISH"]
|
|
|
|
# If the key is not in data add it with the phrase
|
|
if key not in data:
|
|
data[key] = phrase
|
|
for_export_keys.add(key)
|
|
# If the key is in data and the phrase is different, update the phrase
|
|
elif data[key] != phrase:
|
|
print(
|
|
f"Key '{key}' already exists in JSON file with a different phrase"
|
|
)
|
|
|
|
# Save the JSON file
|
|
with open(json_file_new, "w") as f:
|
|
# remove empty lines
|
|
data = {k: v for k, v in data.items() if v}
|
|
json.dump(data, f, indent=2, sort_keys=True)
|
|
|
|
|
|
# Call the function
|
|
edit_strings(
|
|
"./_locales/en/messages-old.json",
|
|
"./_locales/en/messages.json",
|
|
"./tools/localization/masterdoc.csv",
|
|
"./tools/localization/forexport.csv",
|
|
)
|