from __future__ import print_function 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 = [u"description", u"extra"] # but no u"name" data['untranslated'] = ', '.join(fields) lang_out.write(json_dict_entry({card: data}, sep)) sep = "," lang_out.write("\n}\n") # End of Set