Merge pull request #50 from MightyCreak/fix-translations
Improve update-translations.py and its documentation
This commit is contained in:
commit
01888e39a3
|
@ -27,33 +27,51 @@ Creating a new translation
|
||||||
Updating an existing 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
|
Output:
|
||||||
$ msginit -l ja -o empty.po -i diffuse.pot
|
```
|
||||||
|
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:
|
Then use the text editor of your choice to complete the 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
|
|
||||||
|
|
||||||
Validate a translation
|
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
|
System Integration
|
||||||
==================
|
==================
|
||||||
|
|
|
@ -19,6 +19,7 @@
|
||||||
# (http://www.fsf.org/) or by writing to the Free Software Foundation, Inc.,
|
# (http://www.fsf.org/) or by writing to the Free Software Foundation, Inc.,
|
||||||
# 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
# 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
|
||||||
|
import argparse
|
||||||
import glob
|
import glob
|
||||||
import os
|
import os
|
||||||
import subprocess
|
import subprocess
|
||||||
|
@ -28,6 +29,9 @@ import tempfile
|
||||||
def generate_pot_file():
|
def generate_pot_file():
|
||||||
subprocess.run(["xgettext", "-s", "-o", "diffuse.pot", "-L", "Python", "../src/usr/bin/diffuse"])
|
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):
|
def update_translation(filename):
|
||||||
print(f"Updating translation file '{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])
|
subprocess.run(["msgmerge", "-q", "--no-wrap", tmpfile, emptypofile, "-o", filename])
|
||||||
|
|
||||||
# Validate translation
|
# Validate translation
|
||||||
print(f"Validation:")
|
print(f"Validate {filename}:")
|
||||||
subprocess.run(["msgfmt", "-c", "-v", filename])
|
check_translation(filename)
|
||||||
|
|
||||||
print(f"Update done.")
|
print(f"Update done.")
|
||||||
|
|
||||||
# Generate diffuse.pot file
|
# Setup argument parser
|
||||||
generate_pot_file()
|
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
|
# Create temporary working directory
|
||||||
tmpdir = tempfile.mkdtemp()
|
tmpdir = tempfile.mkdtemp()
|
||||||
|
|
||||||
try:
|
try:
|
||||||
# Update PO files
|
# Update PO files
|
||||||
po_files = glob.glob("*.po", recursive=False)
|
|
||||||
po_files.sort()
|
|
||||||
for file in po_files:
|
for file in po_files:
|
||||||
update_translation(file)
|
update_translation(file)
|
||||||
finally:
|
finally:
|
||||||
|
|
Loading…
Reference in New Issue