diff options
Diffstat (limited to 'tools/editor/translations/extract.py')
-rwxr-xr-x | tools/editor/translations/extract.py | 121 |
1 files changed, 121 insertions, 0 deletions
diff --git a/tools/editor/translations/extract.py b/tools/editor/translations/extract.py new file mode 100755 index 0000000000..1192c19011 --- /dev/null +++ b/tools/editor/translations/extract.py @@ -0,0 +1,121 @@ +#!/bin/python + +import fnmatch +import os +import shutil +import subprocess +import sys + + +line_nb = False + +for arg in sys.argv[1:]: + if (arg == "--with-line-nb"): + print("Enabling line numbers in the context locations.") + line_nb = True + else: + os.sys.exit("Non supported argument '" + arg + "'. Aborting.") + + +if (not os.path.exists("tools")): + os.sys.exit("ERROR: This script should be started from the root of the git repo.") + + +matches = [] +for root, dirnames, filenames in os.walk('.'): + for filename in fnmatch.filter(filenames, '*.cpp'): + if (filename.find("collada") != -1): + continue + matches.append(os.path.join(root, filename)) + for filename in fnmatch.filter(filenames, '*.h'): + if (filename.find("collada") != -1): + continue + matches.append(os.path.join(root, filename)) +matches.sort() + + +unique_str = [] +unique_loc = {} +main_po = """ +# LANGUAGE translation of the Godot Engine editor +# Copyright (C) 2016-2017 Juan Linietsky, Ariel Manzur and the Godot community +# This file is distributed under the same license as the Godot source code. +# +# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Godot Engine editor\\n" +"Content-Type: text/plain; charset=UTF-8\\n" +"Content-Transfer-Encoding: 8-bit\\n" +""" + +print("Updating the tools.pot template...") + +for fname in matches: + + f = open(fname, "rb") + + l = f.readline() + lc = 1 + while (l): + + patterns = ['RTR(\"', 'TTR(\"'] + idx = 0 + pos = 0 + while (pos >= 0): + pos = l.find(patterns[idx], pos) + if (pos == -1): + if (idx < len(patterns) - 1): + idx += 1 + pos = 0 + continue + pos += 5 + + msg = "" + while (pos < len(l) and (l[pos] != '"' or l[pos - 1] == '\\')): + msg += l[pos] + pos += 1 + + location = os.path.relpath(fname).replace('\\', '/') + if (line_nb): + location += ":" + str(lc) + + if (not msg in unique_str): + main_po += "\n#: " + location + "\n" + main_po += 'msgid "' + msg + '"\n' + main_po += 'msgstr ""\n' + unique_str.append(msg) + unique_loc[msg] = [location] + elif (not location in unique_loc[msg]): + # Add additional location to previous occurence too + msg_pos = main_po.find('\nmsgid "' + msg + '"') + if (msg_pos == -1): + print("Someone apparently thought writing Python was as easy as GDScript. Ping Akien.") + main_po = main_po[:msg_pos] + ' ' + location + main_po[msg_pos:] + unique_loc[msg].append(location) + + l = f.readline() + lc += 1 + + f.close() + + +f = open("tools.pot", "wb") +f.write(main_po) +f.close() + +if (os.name == "posix"): + print("Wrapping template at 79 characters for compatibility with Weblate.") + os.system("msgmerge -w79 tools.pot tools.pot > tools.pot.wrap") + shutil.move("tools.pot.wrap", "tools.pot") + +shutil.move("tools.pot", "tools/translations/tools.pot") + +# TODO: Make that in a portable way, if we care; if not, kudos to Unix users +if (os.name == "posix"): + added = subprocess.check_output("git diff tools/translations/tools.pot | grep \+msgid | wc -l", shell=True) + removed = subprocess.check_output("git diff tools/translations/tools.pot | grep \\\-msgid | wc -l", shell=True) + print("\n# Template changes compared to the staged status:") + print("# Additions: %s msgids.\n# Deletions: %s msgids." % (int(added), int(removed))) |