Internationalization ==================== Nova uses the :oslo.i18n-doc:`oslo.i18n library <>` to support internationalization. The oslo.i18n library is built on top of `gettext `_ and provides functions that are used to enable user-facing strings such as log messages to appear in the appropriate language in different locales. Nova exposes the oslo.i18n library support via the ``nova/i18n.py`` integration module. This module provides the functions needed to wrap translatable strings. It provides the ``_()`` wrapper for general user-facing messages (such as ones that end up in command line responses, or responses over the network). One upon a time there was an effort to translate log messages in OpenStack projects. But starting with the Ocata release these are no longer being supported. Log messages **should not** be translated. Any use of ``_LI()``, ``_LW()``, ``_LE()``, ``_LC()`` are vestigial and will be removed over time. No new uses of these should be added. You should use the basic wrapper ``_()`` for strings which are not log messages that are expected to get to an end user:: raise nova.SomeException(_('Invalid service catalogue')) Do not use ``locals()`` for formatting messages because: 1. It is not as clear as using explicit dicts. 2. It could produce hidden errors during refactoring. 3. Changing the name of a variable causes a change in the message. 4. It creates a lot of otherwise unused variables. If you do not follow the project conventions, your code may cause hacking checks to fail. The ``_()`` function can be imported with :: from nova.i18n import _