Доступ к непереведенному контенту в django's ugettext_lazy - PullRequest
13 голосов
/ 28 февраля 2011

Я ищу разумный способ добраться до непереведенного содержимого строки ugettext_lazy.Я нашел два способа, но я не доволен ни одним:

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)

Первый фрагмент кода обращается к атрибуту, который был явно помечен как закрытый,поэтому невозможно сказать, как долго этот код будет работать.Второе решение является слишком многословным и медленным.

Конечно, в реальном коде определение строки ugettext_lazy и код, который обращается к ней, представляют собой мили.

Ответы [ 3 ]

6 голосов
/ 11 марта 2011

Еще два варианта. Не очень элегантный, но не приватный 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
    
5 голосов
/ 03 июля 2014

Это лучшая версия вашего второго решения

from django.utils import translation

the_string = ugettext_lazy('the content')
with translation.override('en'):
    content = unicode(the_string)
1 голос
/ 11 января 2017

Вы можете сделать это (но не должны):

the_string = ugettext_lazy('the content')
the_string._proxy____args[0]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...