Translators, when adding/updating your translation files, please follow
the following rules:

* Update debian/changelog:

  - Beware the you should NOT update any of the legacy ChangeLog.old
    files for translation updates.

* Format of entries in debian/changelog:

  Translation updates should go in a dedicated "[ Updated Translations ]"
  section:

==========================================================
dpkg (1.13.15) unstable; urgency=low

  .../...

  [ Updated Translations ]
  * Catalan (Jordi Mallach).
  * Portuguese (Miguel Figueiredo).
  * Swedish (Daniel Nylander).
==========================================================

  New translations should go in a dedicated section named
  "[ New Translations ]":

==========================================================
dpkg (1.13.15) unstable; urgency=low

  .../...

  [ New Translations ]
  * Vogon (Douglas Adams).
==========================================================

  This file contents MUST be encoded in UTF-8, and the entries inserted
  in language alphabetical order.

* Format of commit message

  The formats above only apply to the debian/changelog file.
  They do not apply to the commit message. Following recommendations
  of http://wiki.debian.org/Teams/Dpkg/GitUsage you should start the
  commit message with a summary line, followed by an empty line and a
  a detailed/long description. For example:

==========================================================
Update german translation of manual pages

Update to 1354t.
==========================================================

  Note that the update should mention the file statistics as XXXtYYYfZZZu.

  "XXXt" means "XXX translated strings".
  "YYYf" means "YYY fuzzy strings strings".
  "ZZZu" means "ZZZ untranslated strings".
  YYY or ZZZ may be omitted if they are null.

* Use of po/LINGUAS, dselect/po/LINGUAS or scripts/po/LINGUAS:

  When ADDING a new translation, don't forget adding the language to
  the LINGUAS file, otherwise it will not be used.

* Always CHECK your translations:

  You MUST check your PO files for validity.

  The correct syntax for doing so is:

  $ msgmerge -U <file> dpkg.pot
  $ msgfmt -c -o /dev/null --statistics <file>
  $ msgcat <file> >/dev/null

  - msgmerge updates your file with the current POT file.
  - msgfmt checks it for validity.
  - msgcat may detect encoding problems.
