Made small edits to docs/i18n.txt

git-svn-id: http://code.djangoproject.com/svn/django/trunk@1090 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
Adrian Holovaty 2005-11-05 04:40:07 +00:00
parent 0588183976
commit e859854d0a
1 changed files with 27 additions and 15 deletions

View File

@ -3,12 +3,7 @@ Internationalization
==================== ====================
Django has full support for internationalization of text in code and templates. Django has full support for internationalization of text in code and templates.
Here's an overview of how translation works in Django. Here's how it works.
.. admonition:: Behind the scenes
Django's translation machinery uses the standard ``gettext`` module that
comes with Python.
Overview Overview
======== ========
@ -40,6 +35,12 @@ How to internationalize your app: in three steps
support. support.
3. Activate the locale middleware in your Django settings. 3. Activate the locale middleware in your Django settings.
.. admonition:: Behind the scenes
Django's translation machinery uses the standard ``gettext`` module that
comes with Python.
How to specify translation strings How to specify translation strings
================================== ==================================
@ -87,6 +88,11 @@ Translation works on variables. Again, here's an identical example::
output = _(sentence) output = _(sentence)
return HttpResponse(output) return HttpResponse(output)
(The caveat with using variables or computed values, as in the previous two
examples, is that Django's translation-string-detecting utility,
``make-messages.py``, won't be able to find these strings. More on
``make-messages`` later.)
The strings you pass to ``_()`` or ``gettext()`` can take placeholders, The strings you pass to ``_()`` or ``gettext()`` can take placeholders,
specified with Python's standard named-string interpolation syntax. Example:: specified with Python's standard named-string interpolation syntax. Example::
@ -108,7 +114,7 @@ Marking strings as no-op
~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~
Use the function ``django.utils.translation.gettext_noop()`` to mark a string Use the function ``django.utils.translation.gettext_noop()`` to mark a string
as a translate string without translating it. The string is later translated as a translation string without translating it. The string is later translated
from a variable. from a variable.
Use this if you have constant strings that should be stored in the source Use this if you have constant strings that should be stored in the source
@ -135,14 +141,14 @@ not the actual translation. The translation itself will be done when the string
is used in a string context, such as template rendering on the Django admin site. is used in a string context, such as template rendering on the Django admin site.
If you don't like the verbose name ``gettext_lazy``, you can just alias it as If you don't like the verbose name ``gettext_lazy``, you can just alias it as
``_``, like so:: ``_`` (underscore), like so::
from django.utils.translation import gettext_lazy as _ from django.utils.translation import gettext_lazy as _
class MyThing(meta.Model): class MyThing(meta.Model):
name = meta.CharField(help_text=_('This is the help text')) name = meta.CharField(help_text=_('This is the help text'))
Always use lazy translations in Django models. And it's a good idea to add Always use lazy translations in `Django models`_. And it's a good idea to add
translations for the field names and table names, too. This means writing translations for the field names and table names, too. This means writing
explicit ``verbose_name`` and ``verbose_name_plural`` options in the ``META`` explicit ``verbose_name`` and ``verbose_name_plural`` options in the ``META``
class, though:: class, though::
@ -155,6 +161,8 @@ class, though::
verbose_name = _('my thing') verbose_name = _('my thing')
verbose_name_plural = _('mythings') verbose_name_plural = _('mythings')
.. _Django models: http://www.djangoproject.com/documentation/model_api/
Pluralization Pluralization
~~~~~~~~~~~~~ ~~~~~~~~~~~~~
@ -175,7 +183,7 @@ translation languages as the ``count`` variable).
In template code In template code
---------------- ----------------
Using translations in Django templates uses two template tags and a slightly Using translations in `Django templates`_ uses two template tags and a slightly
different syntax than in Python code. To give your template access to these different syntax than in Python code. To give your template access to these
tags, put ``{% load i18n %}`` toward the top of your template. tags, put ``{% load i18n %}`` toward the top of your template.
@ -240,6 +248,8 @@ translation string. Example::
In this case, both the tag and the filter will see the already-translated In this case, both the tag and the filter will see the already-translated
string, so they don't need to be aware of translations. string, so they don't need to be aware of translations.
.. _Django templates: http://www.djangoproject.com/documentation/templates_python/
How to create language files How to create language files
============================ ============================
@ -262,10 +272,10 @@ To create or update a message file, run this command::
bin/make-messages.py -l de bin/make-messages.py -l de
...where ``de`` is the language code for the message file you want to create. ...where ``de`` is the language code for the message file you want to create.
(The language code, in this case, is in locale format. So, for example, it's The language code, in this case, is in locale format. For example, it's
``pt_BR`` for Brazilian and ``de_AT`` for Austrian German.) ``pt_BR`` for Brazilian and ``de_AT`` for Austrian German.
The script should be run from one of three places:: The script should be run from one of three places:
* The root ``django`` directory (not a Subversion checkout, but the one * The root ``django`` directory (not a Subversion checkout, but the one
that is linked-to via ``$PYTHONPATH`` or is located somewhere on that that is linked-to via ``$PYTHONPATH`` or is located somewhere on that
@ -325,10 +335,12 @@ otherwise, they'll be tacked together without whitespace!
When creating a ``.po`` file with your favorite text editor, first edit When creating a ``.po`` file with your favorite text editor, first edit
the charset line (search for ``"CHARSET"``) and set it to the charset the charset line (search for ``"CHARSET"``) and set it to the charset
you'll be using to edit the content. Generally, utf-8 should work for most you'll be using to edit the content. Generally, utf-8 should work for most
languages, but ``gettext`` can handle any charset you throw at it. languages, but ``gettext`` should handle any charset you throw at it.
To reexamine all source code and templates for new translation strings and To reexamine all source code and templates for new translation strings and
update all message files for **all** languages, run ``make-messages.py -a``. update all message files for **all** languages, run this::
make-messages.py -a
Compiling message files Compiling message files
----------------------- -----------------------