The usual workflow for translating apps is pretty complex. We made it simple by removing some of the steps that don't bring much of a value in a regular translation pipeline. Our design philosophy is "make simple simple, make complex possible". There are some of these things:
- The compiled translations are stored next to your Python code instead of
/usr/share/locale
. - We don't generate
*.pot
files. Instead, we directly create empty*.po
files for all languages. - You don't need to explicitly update translations for each language. Instead, the
extract
command updates all translation files in place. - There is only one translation file per project per language. No need to merge multiple files together.
- There is no
LC_MESSAGES
subdirectory because "flat is better than nested". - There is only one
.get
method instead of the whole mess of similar ones (gettext
,ngettext
,pgettext
, and so on) provided by gettext. - The locale doesn't have categories. While UNIX and other OS allow to specify locale for each action (
LC_TIME
for formatting time,LC_NUMERIC
for formatting numbers), we make one-to-one correspondence between locales and categories. If you need to format a number in a different locale, just use a separate Locale instance for it.