Dunedan
57308bb847
This refactors the script for cleaning the translations to get the same result by doing less. This is achieved by the following changes: - Use glob-patterns for finding the files to clean more efficiently, without the need to exclude collected files again. - Only write files which are supposed to be modified (previously all portable object files did get rewritten by this script, no matter if it did change something or not). - Stop searching for sections in files to clean up, once they are already passed.
92 lines
3.4 KiB
Python
Executable File
92 lines
3.4 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
#
|
|
# Copyright (C) 2024 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 <http://www.gnu.org/licenses/>.
|
|
|
|
"""Remove unnecessary personal data of translators.
|
|
|
|
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 glob
|
|
import os
|
|
import re
|
|
|
|
from i18n_helper import L10N_FOLDER_NAME, PROJECT_ROOT_DIRECTORY, TRANSIFEX_CLIENT_FOLDER
|
|
|
|
|
|
TRANSLATOR_REGEX = re.compile(r"^(#\s+[^,<]*)\s+<.*>(.*)$")
|
|
LAST_TRANSLATION_REGEX = re.compile(r"^(\"Last-Translator:[^,<]*)\s+<.*>(.*)$")
|
|
|
|
|
|
def main():
|
|
for folder in glob.iglob(
|
|
f"**/{L10N_FOLDER_NAME}/{TRANSIFEX_CLIENT_FOLDER}/",
|
|
root_dir=PROJECT_ROOT_DIRECTORY,
|
|
recursive=True,
|
|
):
|
|
for file in glob.iglob(
|
|
f"{os.path.join(folder, os.pardir)}/*.po", root_dir=PROJECT_ROOT_DIRECTORY
|
|
):
|
|
absolute_file_path = os.path.abspath(f"{PROJECT_ROOT_DIRECTORY}/{file}")
|
|
|
|
file_content = []
|
|
usernames = []
|
|
changes = False
|
|
in_translators = False
|
|
found_last_translator = False
|
|
with open(absolute_file_path, "r+", encoding="utf-8") as fd:
|
|
for line in fd:
|
|
if line.strip() == "# Translators:":
|
|
in_translators = True
|
|
elif not line.strip().startswith("#"):
|
|
in_translators = False
|
|
elif in_translators:
|
|
if line == "# \n":
|
|
changes = True
|
|
continue
|
|
translator_match = TRANSLATOR_REGEX.match(line)
|
|
if translator_match:
|
|
changes = True
|
|
if translator_match.group(1) in usernames:
|
|
continue
|
|
line = TRANSLATOR_REGEX.sub(r"\1\2", line)
|
|
usernames.append(translator_match.group(1))
|
|
|
|
if not in_translators and not found_last_translator:
|
|
last_translator_match = LAST_TRANSLATION_REGEX.match(line)
|
|
if last_translator_match:
|
|
found_last_translator = True
|
|
changes = True
|
|
line = LAST_TRANSLATION_REGEX.sub(r"\1\2", line)
|
|
|
|
file_content.append(line)
|
|
|
|
if changes:
|
|
fd.seek(0)
|
|
fd.truncate()
|
|
fd.writelines(file_content)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|