summaryrefslogtreecommitdiff
path: root/docs/narr/i18n.rst
diff options
context:
space:
mode:
Diffstat (limited to 'docs/narr/i18n.rst')
-rw-r--r--docs/narr/i18n.rst81
1 files changed, 41 insertions, 40 deletions
diff --git a/docs/narr/i18n.rst b/docs/narr/i18n.rst
index d8cc5cb1c..218b7a2b4 100644
--- a/docs/narr/i18n.rst
+++ b/docs/narr/i18n.rst
@@ -59,7 +59,7 @@ This creates a Unicode-like object that is a TranslationString.
:term:`Django` i18n, using a TranslationString is a lot like using
"lazy" versions of related gettext APIs.
-The first argument to :class:`pyramid.i18n.TranslationString` is
+The first argument to :class:`~pyramid.i18n.TranslationString` is
the ``msgid``; it is required. It represents the key into the
translation mappings provided by a particular localization. The
``msgid`` argument must be a Unicode object or an ASCII string. The
@@ -139,7 +139,7 @@ Using the ``TranslationStringFactory`` Class
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Another way to generate a translation string is to use the
-:attr:`pyramid.i18n.TranslationStringFactory` object. This object
+:attr:`~pyramid.i18n.TranslationStringFactory` object. This object
is a *translation string factory*. Basically a translation string
factory presets the ``domain`` value of any :term:`translation string`
generated by using it. For example:
@@ -156,11 +156,11 @@ generated by using it. For example:
file generation tools.
After assigning ``_`` to the result of a
-:func:`pyramid.i18n.TranslationStringFactory`, the subsequent result
-of calling ``_`` will be a :class:`pyramid.i18n.TranslationString`
+:func:`~pyramid.i18n.TranslationStringFactory`, the subsequent result
+of calling ``_`` will be a :class:`~pyramid.i18n.TranslationString`
instance. Even though a ``domain`` value was not passed to ``_`` (as
would have been necessary if the
-:class:`pyramid.i18n.TranslationString` constructor were used instead
+:class:`~pyramid.i18n.TranslationString` constructor were used instead
of a translation string factory), the ``domain`` attribute of the
resulting translation string will be ``pyramid``. As a result, the
previous code example is completely equivalent (except for spelling)
@@ -175,7 +175,7 @@ to:
You can set up your own translation string factory much like the one
provided above by using the
-:class:`pyramid.i18n.TranslationStringFactory` class. For example,
+:class:`~pyramid.i18n.TranslationStringFactory` class. For example,
if you'd like to create a translation string factory which presets the
``domain`` value of generated translation strings to ``form``, you'd
do something like this:
@@ -344,7 +344,8 @@ which reside in your :app:`Pyramid` application. You run a
$ mkdir -p myapplication/locale
$ python setup.py extract_messages
-The message catalog ``.pot`` template will end up in
+The message catalog ``.pot`` template will end up in:
+
``myapplication/locale/myapplication.pot``.
Translation Domains
@@ -432,7 +433,8 @@ init_catalog`` command:
$ cd /place/where/myapplication/setup.py/lives
$ python setup.py init_catalog -l es
-By default, the message catalog ``.po`` file will end up in
+By default, the message catalog ``.po`` file will end up in:
+
``myapplication/locale/es/LC_MESSAGES/myapplication.po``.
Once the file is there, it can be worked on by a human translator.
@@ -491,13 +493,12 @@ translations will be available to :app:`Pyramid`.
Using a Localizer
-----------------
-A :term:`localizer` is an object that allows you to perform
-translation or pluralization "by hand" in an application. You may use
-the :func:`pyramid.i18n.get_localizer` function to obtain a
-:term:`localizer`. :func:`pyramid.i18n.get_localizer`. This
-function will return either the localizer object implied by the active
-:term:`locale negotiator` or a default localizer object if no explicit
-locale negotiator is registered.
+A :term:`localizer` is an object that allows you to perform translation or
+pluralization "by hand" in an application. You may use the
+:func:`pyramid.i18n.get_localizer` function to obtain a :term:`localizer`.
+This function will return either the localizer object implied by the active
+:term:`locale negotiator` or a default localizer object if no explicit locale
+negotiator is registered.
.. code-block:: python
:linenos:
@@ -507,6 +508,9 @@ locale negotiator is registered.
def aview(request):
locale = get_localizer(request)
+.. note:: If you need to create a localizer for a locale use the
+ :func:`pyramid.i18n.make_localizer` function.
+
.. index::
single: translating (i18n)
@@ -534,7 +538,7 @@ translation in a view component of an application might look like so:
translated = localizer.translate(ts) # translation string
# ... use translated ...
-The :func:`pyramid.i18n.get_localizer` function will return a
+The :func:`~pyramid.i18n.get_localizer` function will return a
:class:`pyramid.i18n.Localizer` object bound to the locale name
represented by the request. The translation returned from its
:meth:`pyramid.i18n.Localizer.translate` method will depend on the
@@ -612,9 +616,9 @@ locale negotiator returns ``None``. You can change the default locale
name by changing the ``default_locale_name`` setting; see
:ref:`default_locale_name_setting`.
-Once :func:`pyramid.i18n.get_locale_name` is first run, the locale
+Once :func:`~pyramid.i18n.get_locale_name` is first run, the locale
name is stored on the request object. Subsequent calls to
-:func:`pyramid.i18n.get_locale_name` will return the stored locale
+:func:`~pyramid.i18n.get_locale_name` will return the stored locale
name without invoking the :term:`locale negotiator`. To avoid this
caching, you can use the :func:`pyramid.i18n.negotiate_locale_name`
function:
@@ -641,7 +645,7 @@ You can also obtain the locale name related to a request using the
Obtaining the locale name as an attribute of a localizer is equivalent
to obtaining a locale name by calling the
-:func:`pyramid.i18n.get_locale_name` function.
+:func:`~pyramid.i18n.get_locale_name` function.
.. index::
single: date and currency formatting (i18n)
@@ -735,6 +739,13 @@ this support out of the box and may need special code to do an
equivalent. For those, you can always use the more manual translation
facility described in :ref:`performing_a_translation`.
+Mako Pyramid I18N Support
+-------------------------
+
+There exists a recipe within the :term:`Pyramid Cookbook` named "Mako
+Internationalization" which explains how to add idiomatic I18N support to
+:term:`Mako` templates.
+
.. index::
single: localization deployment settings
single: default_locale_name
@@ -747,7 +758,7 @@ Localization-Related Deployment Settings
A :app:`Pyramid` application will have a ``default_locale_name``
setting. This value represents the :term:`default locale name` used
when the :term:`locale negotiator` returns ``None``. Pass it to the
-:mod:`pyramid.config.Configurator` constructor at startup
+:mod:`~pyramid.config.Configurator` constructor at startup
time:
.. code-block:: python
@@ -867,11 +878,11 @@ which itself includes an ``LC_MESSAGES`` directory. Each
Each ``.mo`` file represents a :term:`message catalog`, which is used
to provide translations to your application.
-Adding a :term:`translation directory` registers all of its
-constituent :term:`message catalog` files (all of the ``.mo`` files
-found within all ``LC_MESSAGES`` directories within each locale
-directory in the translation directory) within your :app:`Pyramid`
-application to be available to use for translation services.
+Adding a :term:`translation directory` registers all of its constituent
+:term:`message catalog` files within your :app:`Pyramid` application to
+be available to use for translation services. This includes all of the
+``.mo`` files found within all ``LC_MESSAGES`` directories within each
+locale directory in the translation directory.
You can add a translation directory imperatively by using the
:meth:`pyramid.config.Configurator.add_translation_dirs` during
@@ -881,21 +892,15 @@ application startup. For example:
:linenos:
from pyramid.config import Configurator
- config.begin()
config.add_translation_dirs('my.application:locale/',
'another.application:locale/')
- # ...
- config.end()
A message catalog in a translation directory added via
-:meth:`pyramid.config.Configurator.add_translation_dirs`
+:meth:`~pyramid.config.Configurator.add_translation_dirs`
will be merged into translations from a message catalog added earlier
if both translation directories contain translations for the same
locale and :term:`translation domain`.
-.. note:: You can also add a translation directory via ZCML. See
- :ref:`zcml_adding_a_translation_directory`
-
Setting the Locale
~~~~~~~~~~~~~~~~~~
@@ -937,8 +942,8 @@ a particular request. A locale negotiator is a bit of code which
accepts a request and which returns a :term:`locale name`. It is
consulted when :meth:`pyramid.i18n.Localizer.translate` or
:meth:`pyramid.i18n.Localizer.pluralize` is invoked. It is also
-consulted when :func:`pyramid.i18n.get_locale_name` or
-:func:`pyramid.i18n.negotiate_locale_name` is invoked.
+consulted when :func:`~pyramid.i18n.get_locale_name` or
+:func:`~pyramid.i18n.negotiate_locale_name` is invoked.
.. _default_locale_negotiator:
@@ -949,7 +954,7 @@ Most applications can make use of the default locale negotiator, which
requires no additional coding or configuration.
The default locale negotiator implementation named
-:class:`pyramid.i18n.default_locale_negotiator` uses the following
+:class:`~pyramid.i18n.default_locale_negotiator` uses the following
set of steps to dermine the locale name.
- First, the negotiator looks for the ``_LOCALE_`` attribute of the
@@ -1000,7 +1005,7 @@ You may add your newly created locale negotiator to your application's
configuration by passing an object which can act as the negotiator (or a
:term:`dotted Python name` referring to the object) as the
``locale_negotiator`` argument of the
-:class:`pyramid.config.Configurator` instance during application
+:class:`~pyramid.config.Configurator` instance during application
startup. For example:
.. code-block:: python
@@ -1020,9 +1025,5 @@ For example:
from pyramid.config import Configurator
config = Configurator()
- config.begin()
config.set_locale_negotiator(my_locale_negotiator)
- config.end()
-.. note:: You can also add a custom locale negotiator via ZCML. See
- :ref:`zcml_adding_a_locale_negotiator`