diff -r 5ff1fc726848 -r c6bca38c1cbf parts/django/docs/topics/i18n/index.txt --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/parts/django/docs/topics/i18n/index.txt Sat Jan 08 11:20:57 2011 +0530 @@ -0,0 +1,113 @@ +===================================== +Internationalization and localization +===================================== + +Overview +======== + +Django has full support for internationalization of text in code and +templates, and format localization of dates and numbers. Here's how it works. + +Essentially, Django does two things: + + * It allows developers and template authors to specify which parts of + their apps should be translatable. + * It uses these hooks to translate Web apps for particular users according + to their language preferences. + +The complete process can be seen as divided in three stages. It is also possible +to identify an identical number of roles with very well defined responsibilities +associated with each of these tasks (although it's perfectly normal if you +find yourself performing more than one of these roles): + + * For application authors wishing to make sure their Django apps can be + used in different locales: :doc:`/topics/i18n/internationalization`. + * For translators wanting to translate Django apps: :doc:`/topics/i18n/localization`. + * For system administrators/final users setting up internationalized apps or + developers integrating third party apps: :doc:`/topics/i18n/deployment`. + +.. toctree:: + :hidden: + :maxdepth: 1 + + internationalization + localization + deployment + +.. _ seealso:: + +For more general information about the topic, see the `GNU gettext documentation`_ +and the `Wikipedia article`_. + +.. _GNU gettext documentation: http://www.gnu.org/software/gettext/manual/gettext.html#Concepts +.. _Wikipedia article: http://en.wikipedia.org/wiki/Internationalization_and_localization + +Glossary +======== + +First lets define some terms that will help us to handle a common language: + +.. glossary:: + + locale name + A locale name, either a language specification of the form ``ll`` or a + combined language and country specification of the form ``ll_CC``. + Examples: ``it``, ``de_AT``, ``es``, ``pt_BR``. Note the underscore in + some of them and the case of the part located to its right. + + language code + Represents the name of a language. Browsers send the names of the + languages they accept in the ``Accept-Language`` HTTP header using this + format. Examples: ``it``, ``de-at``, ``es``, ``pt-br``. Note the ``-`` + separator. + + message file + A message file is a plain-text file, representing a single language, + that contains all available :term:`translation strings + ` and how they should be represented in the given + language. Message files have a ``.po`` file extension. + + translation string + A literal that can be translated. + +.. _specialties-of-django-i18n: + +Specialties of Django translation +================================= + +Django's translation machinery uses the standard ``gettext`` module that comes +with Python. If you know ``gettext``, you might note these specialties in the +way Django does translation: + + * The string domain is ``django`` or ``djangojs``. This string domain is + used to differentiate between different programs that store their data + in a common message-file library (usually ``/usr/share/locale/``). The + ``django`` domain is used for python and template translation strings + and is loaded into the global translation catalogs. The ``djangojs`` + domain is only used for JavaScript translation catalogs to make sure + that those are as small as possible. + * Django doesn't use ``xgettext`` alone. It uses Python wrappers around + ``xgettext`` and ``msgfmt``. This is mostly for convenience. + +.. _technical-messages: + +Django technical message IDs +---------------------------- + +.. versionchanged:: 1.2 + Starting with Django 1.2, technical message IDs are being replaced by :ref:`format-localization` + +Django uses technical message IDs to translate date formats and time formats. +Technical message IDs are :term:`translation strings ` and +can be easily recognized; they're all upper case. You don't translate the +message ID as with other translation strings, you provide the correct local +variant on the provided English value. The format is identical to the format +strings used by the ``now`` template tag. + +For example, with ``DATETIME_FORMAT`` (or ``DATE_FORMAT`` or ``TIME_FORMAT``), +this would be the format string that you want to use in your language. A Django +contributor localizing it to Spanish probably would provide a ``"j N Y P"`` +"translation" for it in the relevant ``django.po`` file:: + + msgid "DATETIME_FORMAT" + msgstr "j N Y P"