116 lines
3.5 KiB
Python
116 lines
3.5 KiB
Python
import os
|
|
import codecs
|
|
import json
|
|
import sys
|
|
import io
|
|
import csv
|
|
from shutil import copyfile
|
|
|
|
LANGUAGE_DEFAULT = "en_us" # default language, which takes priority
|
|
LANGUAGE_XX = "xx" # language for starting a translation
|
|
|
|
card_db_dir = os.path.join("..", "domdiv", "card_db") # directory of card data
|
|
output_dir = os.path.join(".", "card_db") # directory for output data
|
|
crossReference = "./CrossReference"
|
|
|
|
if len(sys.argv) > 1:
|
|
LANGUAGE_NEW = sys.argv[1].strip().lower()
|
|
else:
|
|
print("Usage: ", sys.argv[0], " xx")
|
|
print("where xx is the two letter language abreviation.")
|
|
sys.exit()
|
|
|
|
|
|
def unicode_csv_reader(utf8_data, dialect=csv.excel, **kwargs):
|
|
csv_reader = csv.reader(utf8_data, dialect=dialect, **kwargs)
|
|
for row in csv_reader:
|
|
yield [cell.decode("iso-8859-15") for cell in row]
|
|
|
|
|
|
def get_json_data(json_file_path):
|
|
# Read in the json from the specified file
|
|
with codecs.open(json_file_path, "r", "utf-8") as json_file:
|
|
data = json.load(json_file)
|
|
assert data, "Could not load json at: '%r' " % json_file_path
|
|
return data
|
|
|
|
|
|
def json_dict_entry(entry, separator=""):
|
|
# Return a nicely formated json dict entry.
|
|
# It does not include the enclosing {} and removes trailing white space
|
|
json_data = json.dumps(entry, indent=4, ensure_ascii=False, sort_keys=True)
|
|
json_data = json_data.strip(
|
|
"{}"
|
|
).rstrip() # Remove outer{} and then trailing whitespace
|
|
return separator + json_data
|
|
|
|
|
|
def find_index(items, find):
|
|
if find in items:
|
|
return items.index(find)
|
|
else:
|
|
return None
|
|
|
|
|
|
reader = unicode_csv_reader(open(crossReference + ".csv"))
|
|
cards = list(reader)
|
|
headers = cards[0]
|
|
|
|
if not os.path.exists(output_dir):
|
|
os.makedirs(output_dir)
|
|
|
|
lang_dir = os.path.join(output_dir, LANGUAGE_NEW)
|
|
if not os.path.exists(lang_dir):
|
|
os.makedirs(lang_dir)
|
|
|
|
for f in ["bonuses_", "cards_", "sets_", "types_"]:
|
|
copyfile(
|
|
os.path.join(card_db_dir, LANGUAGE_XX, f + LANGUAGE_XX + ".json"),
|
|
os.path.join(output_dir, LANGUAGE_NEW, f + LANGUAGE_NEW + ".json"),
|
|
)
|
|
|
|
|
|
lang_index = find_index(headers, LANGUAGE_NEW)
|
|
card_index = find_index(headers, "card_tag")
|
|
|
|
if lang_index is None or card_index is None:
|
|
print("Cound not find new language '", LANGUAGE_NEW, "' in the CrossReference file")
|
|
print("Files copied, but no name changes were made.")
|
|
sys.exit()
|
|
|
|
# Get the new names for those in the CrossReference
|
|
cardlist = {}
|
|
for row in cards:
|
|
if row[lang_index]:
|
|
cardlist[row[card_index]] = row[lang_index]
|
|
|
|
# Update the names based upon names in the cross reference file
|
|
fname = os.path.join(card_db_dir, LANGUAGE_XX, "cards_" + LANGUAGE_XX + ".json")
|
|
if os.path.isfile(fname):
|
|
lang_data = get_json_data(fname)
|
|
else:
|
|
print("ERROR: Failed to open :", fname)
|
|
sys.exit()
|
|
|
|
if cardlist:
|
|
with io.open(
|
|
os.path.join(output_dir, LANGUAGE_NEW, "cards_" + LANGUAGE_NEW + ".json"),
|
|
"w",
|
|
encoding="utf-8",
|
|
) as lang_out:
|
|
|
|
lang_out.write("{") # Start of set
|
|
sep = ""
|
|
|
|
for card in lang_data:
|
|
# print card, lang_data[card]
|
|
data = lang_data[card]
|
|
if card in cardlist:
|
|
# Have a new name, so update name
|
|
data["name"] = cardlist[card]
|
|
fields = ["description", "extra"] # but no u"name"
|
|
data["untranslated"] = fields
|
|
lang_out.write(json_dict_entry({card: data}, sep))
|
|
sep = ","
|
|
lang_out.write("\n}\n") # End of Set
|