我正在寻找一种通俗易懂的方法来获取ugettext_lazy ied字符串的未翻译内容。我发现了两种方法,但是我对其中任何一种都不满意:

the_string = ugettext_lazy('the content')
the_content = the_string._proxy____args[0] # ewww!

或者
from django.utils.translation import activate, get_language
from django.utils.encoding import force_unicode

the_string = ugettext_lazy('the content')
current_lang = get_language()
activate('en')
the_content = force_unicode(the_string)
activate(current_lang)

第一部分代码访问已被明确标记为私有(private)的属性,因此无法确定该代码将运行多长时间。第二种解决方案过于冗长和缓慢。

当然,在实际代码中,ugettext_lazy ied字符串的定义以及访问该字符串的代码都是很重要的事情。

最佳答案

另外两个选择。不是很优雅,但不是私有(private)api,而且运行速度也不慢。

  • 第一,定义自己的ugettext_lazy:
    from django.utils import translation
    
    def ugettext_lazy(str):
        t = translation.ugettext_lazy(str)
        t.message = str
        return t
    
    >>> text = ugettext_lazy('Yes')
    >>> text.message
    "Yes"
    >>> activate('lt')
    >>> unicode(text)
    u"Taip"
    >>> activate('en')
    >>>> unicode(text)
    u"Yes"
    
  • 第二个:重新设计您的代码。分别定义未翻译的消息和您使用它们的位置:
    gettext = lambda s: s
    some_text = gettext('Some text')
    
    lazy_translated = ugettext_lazy(text)
    untranslated = some_text
    
  • 10-08 05:41