Index: ps/trunk/source/tools/i18n/cleanTranslationFiles.py =================================================================== --- ps/trunk/source/tools/i18n/cleanTranslationFiles.py +++ ps/trunk/source/tools/i18n/cleanTranslationFiles.py @@ -0,0 +1,70 @@ +#!/usr/bin/env python3 +# +# Copyright (C) 2021 Wildfire Games. +# This file is part of 0 A.D. +# +# 0 A.D. is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 2 of the License, or +# (at your option) any later version. +# +# 0 A.D. is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with 0 A.D. If not, see . + +""" +This file removes unneeded personal data from the translators. Most notably +the e-mail addresses. We need to translators' nicks for the credits, but no +more data is required. + +TODO: ideally we don't even pull the e-mail addresses in the .po files. +However that needs to be fixed on the transifex side, see rP25896. For now +strip the e-mails using this script. +""" + +import sys, os, glob, re, fileinput + +from i18n_helper import l10nToolsDirectory, projectRootDirectory + +def main(): + l10nFolderName = "l10n" + transifexClientFolder = ".tx" + + # Prepare some regexes. + commentMatch = re.compile('#.*') + translatorMatch = re.compile("(# [^,<]*)(?: <.*>)?(?:, [0-9,-]{4,9})") + lastTranslatorMatch = re.compile("(\"Last-Translator: [^,<]*)(?: <.*>)?( ?\\\\n\")") + + for root, folders, filenames in os.walk(projectRootDirectory): + for folder in folders: + if folder == l10nFolderName: + if os.path.exists(os.path.join(root, folder, transifexClientFolder)): + path = os.path.join(root, folder, "*.po") + files = glob.glob(path) + for file in files: + usernames = [] + reached = False + for line in fileinput.input(file.replace("\\", "/"), inplace=1): + if reached: + if line == "# \n": + line = "" + m = translatorMatch.match(line) + if m: + if m.group(1) in usernames: + line = "" + else: + line = m.group(1) + "\n" + usernames.append(m.group(1)) + m2 = lastTranslatorMatch.match(line) + if m2: + line = m2.group(1) + "\\n\"\n" + elif line.strip() == "# Translators:": + reached = True + sys.stdout.write(line) + +if __name__ == "__main__": + main() Index: ps/trunk/source/tools/i18n/creditTranslators.py =================================================================== --- ps/trunk/source/tools/i18n/creditTranslators.py +++ ps/trunk/source/tools/i18n/creditTranslators.py @@ -128,8 +128,7 @@ # Now go through the list of languages and search the .po files for people # Prepare some regexes -commentMatch = re.compile('#.*') -translatorMatch = re.compile('# ([^,<]*)(?: <.*>)?, [0-9,-]{4,9}') +translatorMatch = re.compile('# (.*)') deletedUsernameMatch = re.compile('[0-9a-f]{32}') # Search @@ -144,13 +143,13 @@ reached = False for line in poFile: if reached: - if not commentMatch.match(line): - break m = translatorMatch.match(line) - if m: - username = m.group(1) - if not deletedUsernameMatch.match(username): - langsLists[lang].append(m.group(1)) + if not m: + break + + username = m.group(1) + if not deletedUsernameMatch.match(username): + langsLists[lang].append(username) if line.strip() == '# Translators:': reached = True poFile.close() Index: ps/trunk/source/tools/i18n/maintenanceTasks.sh =================================================================== --- ps/trunk/source/tools/i18n/maintenanceTasks.sh +++ ps/trunk/source/tools/i18n/maintenanceTasks.sh @@ -20,6 +20,9 @@ # Pre-Commit Cleanup ######################################################### +echo ":: Removing unneeded data from the .po files…" +python3 "${SCRIPT_PATH}/cleanTranslationFiles.py" + echo ":: Reverting unnecessary changes…" python3 "${SCRIPT_PATH}/checkDiff.py"