A shell script msgdiff.sh
Pros: tools available on every systemCons: ugly output, needs template file
#!/bin/sh PO_ORIG=$1 PO_REVIEW=$2 PO_TEMPL=$3 MSGMERGE=msgmerge DIFF=diff PAGER=more RM=/bin/rm MKTEMP=mktemp # Usage if test "$1" = "" -o "$2" = "" -o "$3" = ""; then echo Usage: $0 orig.po review.po template.pot exit 1 fi # Merge TMP_ORIG=`$MKTEMP po-orig.XXX` TMP_REVIEW=`$MKTEMP po-review.XXX` $MSGMERGE $PO_ORIG $PO_TEMPL > $TMP_ORIG 2> /dev/null $MSGMERGE $PO_REVIEW $PO_TEMPL > $TMP_REVIEW 2> /dev/null # Diff $DIFF -u $TMP_ORIG $TMP_REVIEW | $PAGER # Clean up files $RM $TMP_ORIG $TMP_REVIEW
Example:
$ ./msgdiff.sh fr.po fr.review.po thunar.pot [...] #: ../thunar-vcs-plugin/tvp-git-action.c:265 -#, fuzzy msgid "Menu|Bisect" -msgstr "Différences détaillées" +msgstr "Menu|Couper en deux" #: ../thunar-vcs-plugin/tvp-git-action.c:265 msgid "Bisect" -msgstr "" +msgstr "Couper en deux" [...]
A Python script podiff.py
Pros: programmable output
Cons: external dependency
The script depends on polib that can be installed with the setuptools scripts. Make sure setuptools is installed and than run the command
sudo easy_install polib
.#!/usr/bin/env python import polib def podiff(path_po_orig, path_po_review): po_orig = polib.pofile(path_po_orig) po_review = polib.pofile(path_po_review) po_diff = polib.POFile() po_diff.header = "PO Diff Header" for entry in po_review: orig_entry = po_orig.find(entry.msgid) if not entry.obsolete and (orig_entry.msgstr != entry.msgstr \ or ("fuzzy" in orig_entry.flags) != ("fuzzy" in entry.flags)): po_diff.append(entry) return po_diff if __name__ == "__main__": import sys import os.path # Usage if len(sys.argv) != 3 \ or not os.path.isfile(sys.argv[1]) \ or not os.path.isfile(sys.argv[2]): print "Usage: %s orig.po review.po" % sys.argv[0] sys.exit(1) # Retrieve diff path_po_orig = sys.argv[1] path_po_review = sys.argv[2] po_diff = podiff(path_po_orig, path_po_review) # Print out orig v. review messages po = polib.pofile(path_po_orig) for entry in po_diff: orig_entry = po.find(entry.msgid) orig_fuzzy = review_fuzzy = "fuzzy" if "fuzzy" not in orig_entry.flags: orig_fuzzy = "not fuzzy" if "fuzzy" not in entry.flags: review_fuzzy = "not fuzzy" print "'%s' was %s is %s\n\tOriginal => '%s'\n\tReviewed => '%s'\n" % (entry.msgid, orig_fuzzy, review_fuzzy, orig_entry.msgstr, entry.msgstr)
Example:
$ ./podiff.py fr.po fr.review.po 'Menu|Bisect' was fuzzy is not fuzzy Original => 'Différences détaillées' Reviewed => 'Menu|Couper en deux' 'Bisect' was not fuzzy is not fuzzy Original => '' Reviewed => 'Couper en deux' [...]
Per, Danish translator, pasted the following link: https://edge.launchpad.net/pyg3t.
ReplyDeletePyG3T consists of these parts:
- gtgrep: perform grep-like operations on po-files
- podiff: generate diffs of po-files, such that each differing entry is printed completely
- poabc: check for common translation errors, such as missing capitalization or punctuation
- gtxml: check xml in translations
What about this tool:
ReplyDeletehttp://gramps.svn.sourceforge.net/viewvc/gramps/trunk/po/check_po
?
I've found it useful while I was still doing translations.
I am currently translating po files with https://poeditor.com and to me it seems it is the best on the market. It has many helpful features that keep on adding up and a nice UI. I recommend it sincerely.
ReplyDelete