diff --git a/translations/README.md b/translations/README.md index 86c9ff2..7e79870 100644 --- a/translations/README.md +++ b/translations/README.md @@ -27,33 +27,51 @@ Creating a new translation Updating an existing translation -------------------------------- -1. Move the existing .po file: +Use `update-translations.py` to update one or more PO files. - $ mv ja.po old.po +Here is an example with `ja.po` and `ko.po`: -2. Create an empty .po file for the translation: +Command-line: +```sh +./update-translations.py ja.po ko.po +``` - $ xgettext -s -o diffuse.pot -L Python ../src/usr/bin/diffuse - $ msginit -l ja -o empty.po -i diffuse.pot +Output: +``` +Generate 'diffuse.pot'. +Updating translation file 'ja.po'... +Created /tmp/tmp0gtniydu/ja.empty.po. +Validate ja.po: +183 translated messages, 2 untranslated messages. +Update done. +Updating translation file 'ko.po'... +Created /tmp/tmp0gtniydu/ko.empty.po. +Validate ko.po: +183 translated messages, 2 untranslated messages. +Update done. +``` -3. Merge the old translations: - - $ msgmerge old.po empty.po -o ja.po - -4. Clean up: - - $ rm old.po empty.po - -5. Manually complete in the translations in the .po file: - - $ vi ja.po +Then use the text editor of your choice to complete the translations. Validate a translation ---------------------- -1. Attempt to compile the .po file and note any warnings: +Use `update-translations.py` to validate one or more PO files. - $ msgfmt -c -v ja.po +Here is an example with `ja.po` and `ko.po`: + +Command-line: +```sh +./update-translations.py --check-only ja.po ko.po +``` + +Output: +``` +Validate ja.po: +183 translated messages, 2 untranslated messages. +Validate ko.po: +183 translated messages, 2 untranslated messages. +``` System Integration ================== diff --git a/translations/update-translations.py b/translations/update-translations.py index f58bb73..8c3e63c 100755 --- a/translations/update-translations.py +++ b/translations/update-translations.py @@ -19,6 +19,7 @@ # (http://www.fsf.org/) or by writing to the Free Software Foundation, Inc., # 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +import argparse import glob import os import subprocess @@ -28,6 +29,9 @@ import tempfile def generate_pot_file(): subprocess.run(["xgettext", "-s", "-o", "diffuse.pot", "-L", "Python", "../src/usr/bin/diffuse"]) +def check_translation(filename): + subprocess.run(["msgfmt", "-c", "-v", filename]) + def update_translation(filename): print(f"Updating translation file '{filename}'...") @@ -46,21 +50,42 @@ def update_translation(filename): subprocess.run(["msgmerge", "-q", "--no-wrap", tmpfile, emptypofile, "-o", filename]) # Validate translation - print(f"Validation:") - subprocess.run(["msgfmt", "-c", "-v", filename]) + print(f"Validate {filename}:") + check_translation(filename) print(f"Update done.") -# Generate diffuse.pot file -generate_pot_file() +# Setup argument parser +parser = argparse.ArgumentParser(description='Update translation files (.po).') +parser.add_argument('po_files', metavar='filename.po', nargs='+', + help='the translation file') +parser.add_argument('-c', '--check-only', action='store_true', + help='check the PO files') +parser.add_argument('--no-pot-generation', action='store_true', + help='don\'t generate the POT file') + +# Parse command-line arguments +args = parser.parse_args() + +# Get PO files from command-line +po_files = args.po_files +po_files.sort() + +if args.check_only: + for file in po_files: + print(f"Validate {file}:") + check_translation(file) + exit(0) + +if not args.no_pot_generation: + # Generate diffuse.pot file + print("Generate 'diffuse.pot'.") + 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: