From 0070908415f67661492ebed444bfba0e5514ee30 Mon Sep 17 00:00:00 2001 From: Romain Failliot Date: Mon, 29 Jun 2020 15:01:30 -0400 Subject: [PATCH] Add Python script to update all the translations --- CHANGELOG.md | 1 + translations/update-translations.py | 68 +++++++++++++++++++++++++++++ 2 files changed, 69 insertions(+) create mode 100755 translations/update-translations.py diff --git a/CHANGELOG.md b/CHANGELOG.md index 7c9b3b1..fb5ddb7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,6 +15,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - added .editorconfig file - added .gitignore file - added message when removing files during uninstallation +- added Python script to update all the translation files at once ### Changed - convert to Python 3 diff --git a/translations/update-translations.py b/translations/update-translations.py new file mode 100755 index 0000000..f58bb73 --- /dev/null +++ b/translations/update-translations.py @@ -0,0 +1,68 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- + +# Copyright (C) 2020 Romain Failliot +# +# This program 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. +# +# This program 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 +# this program. You may also obtain a copy of the GNU General Public License +# from the Free Software Foundation by visiting their web site +# (http://www.fsf.org/) or by writing to the Free Software Foundation, Inc., +# 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +import glob +import os +import subprocess +import shutil +import tempfile + +def generate_pot_file(): + subprocess.run(["xgettext", "-s", "-o", "diffuse.pot", "-L", "Python", "../src/usr/bin/diffuse"]) + +def update_translation(filename): + print(f"Updating translation file '{filename}'...") + + # Get language + lang = os.path.splitext(filename)[0] + + # Move existing .po file to working directory + tmpfile = os.path.join(tmpdir, filename) + shutil.move(filename, tmpfile) + + # Create a new .po file for this language + emptypofile = os.path.join(tmpdir, f"{lang}.empty.po") + subprocess.run(["msginit", "--no-wrap", "--no-translator", "-l", lang, "-o", emptypofile, "-i", "diffuse.pot"]) + + # Merge with the old translation + subprocess.run(["msgmerge", "-q", "--no-wrap", tmpfile, emptypofile, "-o", filename]) + + # Validate translation + print(f"Validation:") + subprocess.run(["msgfmt", "-c", "-v", filename]) + + print(f"Update done.") + +# Generate diffuse.pot file +generate_pot_file() + +# Create temporary working directory +tmpdir = tempfile.mkdtemp() + +try: + # Update PO files + po_files = glob.glob("*.po", recursive=False) + po_files.sort() + for file in po_files: + update_translation(file) +finally: + # Remove working directory + shutil.rmtree(tmpdir)