nova/doc/source/devref/il8n.rst
Lorin Hochstein 809a71822c Added RST docs on how to use gettext.
Added a page to the RST documentation about gettext usage
for internationalization.

Change-Id: I2b3b25ad3ab5f3d41b5298f6bad18b216644eeed
2011-11-16 20:19:26 -05:00

1.3 KiB

Internationalization

nova uses gettext so that user-facing strings such as log messages appear in the appropriate language in different locales.

To use gettext, make sure that the strings passed to the logger are wrapped in a _() function call. For example:

LOG.debug(_("block_device_mapping %s"), block_device_mapping)

If you have multiple arguments, the convention is to use named parameters. It's common to use the locals() dict (which contains the names and values of the local variables in the current scope) to do the string interpolation. For example:

label = ...
sr_ref = ...
LOG.debug(_('Introduced %(label)s as %(sr_ref)s.') % locals())

If you do not follow the project conventions, your code may cause the LocalizationTestCase.test_multiple_positional_format_placeholders test to fail in nova/tests/test_localization.py.

The _() function is brought into the global scope by doing:

import gettext
gettext.install("nova", unicode=1)

In general, you shouldn't need to add these to any nova files, since the lines are present in nova/__init__.py. However, if this code is missing, it may result in an error that looks like like:

NameError: name '_' is not defined