Add more ``Plural-Forms``. Document how the current ``Plural-Forms`` were
obtained.

 * http://translate.sourceforge.net/wiki/l10n/pluralforms
 * http://unicode.org/cldr/trac/browser/trunk/common/supplemental/plurals.xml

Complain about incorrect locale codes:

 * ``al`` → ``sq``
 * ``bh`` → ``bho`` | ``mai`` | ``mag``
 * ``ca-XV`` → ``ca@valencia``
 * ``cn`` → ``zh``
 * ``cz`` → ``cs``
 * ``dk`` → ``da``
 * ``en_UK`` → ``en_GB``
 * ``gr`` → ``el``
 * ``in`` → ``id``
 * ``iw`` → ``he``
 * ``ji`` → ``yi``
 * ``mo`` → ``ro_MD``
 * ``no`` → ``nb``
 * ``sh_BA`` → ``bs_BA``
 * ``sh_HR`` → ``hr_HR``
 * ``sh_RS`` → ``sr_RS``
 * ``sr@Latn`` → ``sr@latin``
 * ``sr_CS`` → ``sr``
 * ``sr_SR`` → ``sr_RS``
 * ``sr_YU`` → ``sr``
 * ``uk_UK`` → ``uk_UA``
 * ``vn`` → ``vi``

Correct locale codes in invalid format, e.g.:

 * ``da-DK`` → ``da_DK``: http://sources.debian.net/data/main/d/debian-handbook/6.0+20121031/da-DK/00a_preface.po
 * ``pt_br`` → ``pt_BR``: http://sources.debian.net/data/main/p/pam-pkcs11/0.6.8-1/po/pt_br.po
 * ``Pt`` → ``pt``: http://sources.debian.net/data/main/d/darcsweb/1.1-3.1/debian/po/pt.po

Correct ``Language`` with both a natural language and a language code, e.g.

 * ``nl (Dutch)``: http://sources.debian.net/data/main/g/garcon/0.1.12-1/po/nl.po
 * ``Serbian (sr)``: http://sources.debian.net/data/main/a/at-spi2-atk/2.5.3-2/po/sr.po

Guess language from ``Language-Team``.

 * https://translationproject.org/team/

Guess language from the filename even when it includes encoding. Test-cases:

 * http://sources.debian.net/src/vim/2:7.3.547-7/src/po

Add ``characters=``\ … for more languages. Document how the current values were
obtained.

Fix support for ``X-Poedit-Language: (Afan) Oromo``.

Fix support for ``X-Poedit-Language: Serbian (Latin)``.

Document the security model.

Add tests for:

 * Debian source packages
 * Debian binary packages
 * MO files (at least against some tags)
 * languages with multiple correct Plural-Forms
 * lib.moparser
 * all non-Python encodings
 * 0x5c byte as a part of a multibyte character:
   http://sources.debian.net/src/vim/2:7.3.547-7/src/po/zh_TW.po/#L13
 * SHIFT_JIS encoding:
   http://git.savannah.gnu.org/cgit/gettext.git/tree/gettext-tools/src/po-lex.c?id=v0.18.3#n179

Detect question marks in unusual places.

Add support for configuration files. Once it's implemented:

 * Disable --debian by default.
 * Disable --pedantic by default.

Add support for profiles: severity of a tag may depend on whether you are
upstream, a translator, or a user.

Add support for overrides.

Add option for disabling/forcing colored output.

Use `blessings <https://pypi.python.org/pypi/blessings/>`_ for colored output.

Reimplement the EUC-TW codec with PyICU.

Check for hardcoded Language in POT files.

Add option for printing tag descriptions.

When emitting encoding-in-language-header-field, check if the encoding
matches the one from Content-Type. Test-cases:

 * http://sources.debian.net/data/main/r/rhn-client-tools/1.8.9-3/po/zh_CN.GB2312.po

Split no-email-address-in-last-translator from invalid-last-translator.
Test-cases:

 * http://sources.debian.net/data/main/m/mtpaint/3.40-1/po/de.po
 * http://sources.debian.net/data/main/y/yaboot-installer/1.1.26/debian/po/hi.po

Split missing-timezone-in-date from invalid-date.

Check for non-ASCII (translated?) project id. Test-case:

 * http://sources.debian.net/data/main/a/alarm-clock/1.2.5-1.2/po/sr.po

Split {trailing,leading}-junk-in-plural-forms from
syntax-error-in-plural-forms. Test-case:

 * http://sources.debian.net/data/main/d/dpkg/1.16.10/po/ja.po

Decide what to do with commas in Last-Translator: either accept them, or
provide a better error message. Test-case:

 * http://sources.debian.net/data/main/i/installation-guide/20130503/po/zh_TW/using-d-i.po

polib PO encoding detection is not robust enough. Test-case: xfail-header-imitation.po

Add support for system-dependent messages (minor revision 1).

Check for PO files that are not encoding-aware:

 * http://www.monkey.org/openbsd/archive2/ports/200105/msg00081.html

Add support for MediaWiki Translate's ``invalid-plural`` flag. Test-case:

 * http://sources.debian.net/data/main/e/evolution/3.4.4-3/po/fi.po

Add support for pygettext's ``docstring`` flag.

Check .desktop files:

 * http://standards.freedesktop.org/desktop-entry-spec/latest/ar01s04.html

Check Shared Mime Info files:

 * http://standards.freedesktop.org/shared-mime-info-spec/shared-mime-info-spec-latest.html

Figure out what to do with software that call ``gettext("")`` intentionally.
Test-case:

 * http://sources.debian.net/src/evolution/3.4.4-3/shell/main.c/#L579

Check for the ``I`` C format string flag in msgid.

Check for ``msgstr_plural`` without ``msgstr[N]``, and other way round.

Verify that if *n* = plural(1) = plural(i) for some *i* > 1, then msgstr[*n*]
distinguishes singular and plural forms, even when no numeral is involved.

 * https://bugs.debian.org/753946#51

Add support for more string formats (in popularity order):

 * python-format
 * kde-format
 * perl-format
 * csharp-format
 * sh-format
 * qt-format
 * php-format
 * perl-brace-format
 * java-format
 * tcl-format
 * boost-format
 * lisp-format
 * scheme-format
 * qt-plural-format
 * ycp-format

and unused:

 * awk-format
 * elisp-format
 * gcc-internal-format
 * gfc-internal-format
 * javascript-format
 * librep-format
 * lua-format
 * objc-format
 * object-pascal-format
 * python-brace-format
 * smalltalk-format

SHIFT_JIS and JOHAB encodings are broken in Python; or at least they
are not compatible with glibc. Implement a work-around. Test-case::

    assert b'\\'.decode('SHIFT_JIS') == '\N{YEN SIGN}'
    assert b'\\'.decode('JOHAB') == '\N{WON SIGN}'

Timezone abbreviations not only are not unique, but also can change their
meaning over time: http://mm.icann.org/pipermail/tz/2014-June/021089.html

Check for capitalization inconsistencies.

.. vim:ft=rst
