1#!/usr/bin/python 2 3import sys, time, os 4 5fallback_file = "core_language_en_tag.xml" 6 7header = "# SOME DESCRIPTIVE TITLE.\n\ 8# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER\n\ 9# This file is distributed under the same license as the PACKAGE package.\n\ 10# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.\n\ 11#\n\ 12#, fuzzy\n\ 13msgid \"\"\n\ 14msgstr \"\"\n\ 15\"Project-Id-Version: PACKAGE VERSION\"\n\ 16\"Report-Msgid-Bugs-To: \"\n\ 17\"POT-Creation-Date: " + time.strftime("%Y-%m-%d %H:%M%z") + "\"\n\ 18\"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\"\n\ 19\"Last-Translator: FULL NAME <EMAIL@ADDRESS>\"\n\ 20\"Language-Team: LANGUAGE <LL@li.org>\"\n\ 21\"Language: \"\n\ 22\"MIME-Version: 1.0\"\n\ 23\"Content-Type: text/plain; charset=CHARSET\"\n\ 24\"Content-Transfer-Encoding: 8bit\"\n" 25 26ignore_tags = ["GameVersion", "PageURL", "LANG_EN", "LANG_DE", "LANG_FI", "LANG_PL", "LANG_RO", "LANG_FR", "LANG_RU", "LANG_PT", "LANG_IT", "LANG_SK" ] 27 28def usage(): 29 print("Usage: " + sys.argv[0] + " someFile.xml someFile.pot") 30 print("Usage: " + sys.argv[0] + " someFile.po someFile.xml") 31 32if (len(sys.argv)) != 3: 33 usage() 34 sys.exit(0) 35 36file1 = sys.argv[1] 37file2 = sys.argv[2] 38#print(file1) 39#print(file2) 40 41f1 = open(file1, 'r', encoding="utf8") 42f2 = open(file2, 'w', encoding="utf8") 43 44msgs = {} 45# msgs = {"foo":"bar", "asdf":"ghij"} 46 47if file1.endswith(".xml") and file2.endswith(".pot"): 48 #xml2po 49 50 # read xml 51 for line in f1: 52 if line.strip().startswith("<Tag name="): 53 msgid = line.split("=\"")[1].split("\"")[0] 54 msgstr = line.split(">")[1].split("<")[0] 55 # ignore 56 if msgid not in ignore_tags: 57 msgs[msgid] = msgstr 58 59 # write pot 60 61 # header 62 result = header + "\n" 63 64 # translations 65 for mid, mstr in msgs.items(): 66 #result += "# " + mid + "\n" 67 result += "msgctxt \"" + mid + "\"\n" 68 result += "msgid \"" + mstr + "\"\n" 69 result += "msgstr \"\"\n" 70 result += "\n" 71 72 f2.write(result) 73 74elif file1.endswith(".po") and file2.endswith(".xml"): 75 #po2xml 76 77 msgid = "" 78 msgstr = "" 79 last = "msgstr" 80 # read po 81 for line in f1: 82 #print(line) 83 if line.strip().startswith("\""): 84 if last == "msgctxt": 85 #msgid += line.strip().split("\"")[1].replace("\\n", "\n") 86 pass 87 elif last == "msgstr": 88 msgstr += line.strip().split("\"")[1].replace("\\n", "\n") 89 if line.strip().startswith("msgctxt"): 90 # add previous msgstr 91 if msgid != "": 92 msgs[msgid] = msgstr 93 94 msgid = line.split("\"")[1].replace("\\n", "\n") 95 last = "msgctxt" 96 if line.strip().startswith("msgstr"): 97 msgstr = line.split("\"")[1].replace("\\n", "\n") 98 last = "msgstr" 99 # add last line 100 msgs[msgid] = msgstr 101 102 # write xml 103 result = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n\ 104<MyGUI>\n" 105 106 # read english xml for fallback when untranslated 107 msgs_f = {} 108 f_f = open(os.path.join(os.path.dirname(file2), fallback_file), encoding="utf8") 109 for line in f_f: 110 if line.strip().startswith("<Tag name="): 111 msgid = line.split("=\"")[1].split("\"")[0] 112 msgstr = line.split(">")[1].split("<")[0] 113 msgs_f[msgid] = msgstr 114 115 for mid, mstr in msgs.items(): 116 if mid in msgs_f: 117 if mstr.strip() != "" and mid not in ignore_tags: 118 result += "\t<Tag name=\"" + mid + "\">" + mstr + "</Tag>\n" 119 else: 120 # if untranslated or not to be translated (ignore), use english string 121 result += "\t<Tag name=\"" + mid + "\">" + msgs_f[mid] + "</Tag>\n" 122 123 # put all stuff that is not in .po yet, but is in template, in it's english version 124 for mid, mstr in msgs_f.items(): 125 if not mid in msgs and mid not in ignore_tags: 126 result += "\t<Tag name=\"" + mid + "\">" + mstr + "</Tag>\n" 127 128 # use english string for ignored 129 for ignored in ignore_tags: 130 result += "\t<Tag name=\"" + ignored + "\">" + msgs_f[ignored] + "</Tag>\n" 131 132 result += "\n</MyGUI>" 133 f2.write(result) 134 135else: 136 usage() 137 138f1.close() 139f2.close() 140