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