2249925846
It shadows the unicode function of the same name, and there's no way to entirely disambiguate the two based on the parameter passed in. This change deprecates Message.translate and makes it a wrapper around the new function, Message.translation. Note that we never documented calling Message.translate directly. The documented way to get the translated form of a Message is to call the _translate.translate function in this project, so chances are that this public API change will have little actual impact on users. Change-Id: I0c617937f5af7467d1454f72acd0474ae2ce0293 Closes-Bug: 1841796
74 lines
2.8 KiB
Python
74 lines
2.8 KiB
Python
# Copyright 2012 Red Hat, Inc.
|
|
# Copyright 2013 IBM Corp.
|
|
# All Rights Reserved.
|
|
#
|
|
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
|
# not use this file except in compliance with the License. You may obtain
|
|
# a copy of the License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
|
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
|
# License for the specific language governing permissions and limitations
|
|
# under the License.
|
|
|
|
import six
|
|
|
|
__all__ = [
|
|
'translate',
|
|
]
|
|
|
|
|
|
def translate(obj, desired_locale=None):
|
|
"""Gets the translated unicode representation of the given object.
|
|
|
|
If the object is not translatable it is returned as-is.
|
|
|
|
If the desired_locale argument is None the object is translated to
|
|
the system locale.
|
|
|
|
:param obj: the object to translate
|
|
:param desired_locale: the locale to translate the message to, if None the
|
|
default system locale will be used
|
|
:returns: the translated object in unicode, or the original object if
|
|
it could not be translated
|
|
|
|
"""
|
|
from oslo_i18n import _message # avoid circular dependency at module level
|
|
message = obj
|
|
if not isinstance(message, _message.Message):
|
|
# If the object to translate is not already translatable,
|
|
# let's first get its unicode representation
|
|
message = six.text_type(obj)
|
|
if isinstance(message, _message.Message):
|
|
# Even after unicoding() we still need to check if we are
|
|
# running with translatable unicode before translating
|
|
return message.translation(desired_locale)
|
|
return obj
|
|
|
|
|
|
def translate_args(args, desired_locale=None):
|
|
"""Translates all the translatable elements of the given arguments object.
|
|
|
|
This method is used for translating the translatable values in method
|
|
arguments which include values of tuples or dictionaries.
|
|
If the object is not a tuple or a dictionary the object itself is
|
|
translated if it is translatable.
|
|
|
|
If the locale is None the object is translated to the system locale.
|
|
|
|
:param args: the args to translate
|
|
:param desired_locale: the locale to translate the args to, if None the
|
|
default system locale will be used
|
|
:returns: a new args object with the translated contents of the original
|
|
"""
|
|
if isinstance(args, tuple):
|
|
return tuple(translate(v, desired_locale) for v in args)
|
|
if isinstance(args, dict):
|
|
translated_dict = dict((key, translate(value, desired_locale))
|
|
for key, value in args.items())
|
|
return translated_dict
|
|
return translate(args, desired_locale)
|