[openstack-dev] [Nova] FFE Request: Oslo: i18n Message improvements

Matt Riedemann mriedem at linux.vnet.ibm.com
Fri Mar 7 15:33:43 UTC 2014

On 3/7/2014 3:23 AM, Daniel P. Berrange wrote:
> On Thu, Mar 06, 2014 at 03:46:24PM -0600, James Carey wrote:
>>      Please consider a FFE for i18n Message improvements:
>> BP: https://blueprints.launchpad.net/nova/+spec/i18n-messages
>>      The base enablement for lazy translation has already been sync'd from
>> oslo.   This patch was to enable lazy translation support in Nova.  It is
>> titled re-enable lazy translation because this was enabled during Havana
>> but was pulled due to issues that have since been resolved.
>>      In order to enable lazy translation it is necessary to do the
>> following things:
>>    (1) Fix a bug in oslo with respect to how keywords are extracted from
>> the format strings when saving replacement text for use when the message
>> translation is done.   This is
>> https://bugs.launchpad.net/nova/+bug/1288049, which I'm actively working
>> on a fix for in oslo.  Once that is complete it will need to be sync'd
>> into nova.
>>    (2) Remove concatenation (+) of translatable messages.  The current
>> class that is used to hold the translatable message (gettextutils.Message)
>> does not support concatenation.  There were a few cases in Nova where this
>> was done and they are coverted to other means of combining the strings in:
>> https://review.openstack.org/#/c/78095 Remove use of concatenation on
>> messages
>>    (3) Remove the use of str() on exceptions.  The intent of this is to
>> return the message contained in the exception, but these messages may
>> contain unicode, so str cannot be used on them and gettextutils.Message
>> enforces this.  Thus these need
>> to either be removed and allow python formatting to do the right thing, or
>> changed to unicode().  Since unicode() will change to str() in Py3, the
>> forward compatible six.text_type() is used instead.  This is done in:
>> https://review.openstack.org/#/c/78096 Remove use of str() on exceptions
> Since we're not supporting Py3 anytime soon, this patch does not seem
> important enough to justify for FFE. Anytime we do Py3 portability fixes
> I'd also expect there to be some hacking check testing that validate
> we won't regress in that in the future too.
>>    (4) The addition of the call that enables the use of lazy messages. This
>> is in:
>> https://review.openstack.org/#/c/73706 Re-enable lazy translation.
>>      Lazy translation has been enabled in the other projects so it would be
>> beneficial to be consistent with the other projects with respect to
>> message translation.  I have tested that the changes in (2) and (3) work
>> when lazy translation is not enabled.  Thus if a problem is found, the two
>> line change in (4) could be removed to get to the previous behavior.
>>      I've been talking to Matt Riedemann and Dan Berrange about this.  Matt
>> has agreed to be a sponsor.
> I'll be a sponsor once there is a clear solution proposed to the bug
> in point 1.
> Regards,
> Daniel

As far as I understand this is not a py3 issue, six.text_type was being 
used because the alternative was converting usage of str() to unicode() 
and that doesn't work with py3, so six.text_type is used.

I agree that if all instances of str() in Nova need to be changed to 
six.text_type for this to work we need a hacking check for it.



Matt Riedemann

More information about the OpenStack-dev mailing list