For internationalization guidelines, see the oslo.i18n documention. The information below can be used to get started.
Cinder 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 _Lx() function call. For example:
LOG.info(_LI("block_device_mapping %s"), block_device_mapping)
There are a few different _() translation markers, depending on the logging level of the text:
_LI() - Used for INFO level log messages
_LW() - Used for WARNING level log messages
_LE() - Used for ERROR level log messages (this includes LOG.exception)
logging and exceptions.
Do not use locals() for formatting messages because:
If you do not follow the project conventions, your code may cause pep8 hacking check failures.
For translation to work properly, the top level scripts for Cinder need to first do the following before any Cinder modules are imported:
from cinder import i18n
i18n.enable_lazy()
Note: this should _only_ be called from top level scripts - no library code or common modules should call this method.
Any files that use the _() for translation then must have the following lines:
from cinder.i18n import _
If the above code is missing, it may result in an error that looks like:
NameError: name '_' is not defined