write(): Do two levels of sorting: first sort the individual location
tuples by filename/lineno, then sort the catalog entries by their
location tuples.
diff --git a/Tools/i18n/pygettext.py b/Tools/i18n/pygettext.py
index 804c98c..14a83b4 100755
--- a/Tools/i18n/pygettext.py
+++ b/Tools/i18n/pygettext.py
@@ -325,7 +325,17 @@
         # The time stamp in the header doesn't have the same format as that
         # generated by xgettext...
         print >> fp, pot_header % {'time': timestamp, 'version': __version__}
+        # Sort the entries.  First sort each particular entry's keys, then
+        # sort all the entries by their first item.
+        reverse = {}
         for k, v in self.__messages.items():
+            keys = v.keys()
+            keys.sort()
+            reverse[tuple(keys)] = (k, v)
+        rkeys = reverse.keys()
+        rkeys.sort()
+        for rkey in rkeys:
+            k, v = reverse[rkey]
             # If the entry was gleaned out of a docstring, then add a comment
             # stating so.  This is to aid translators who may wish to skip
             # translating some unimportant docstrings.