Ben*_*end 13 python django internationalization
我正在寻找一种理智的方式来获取一个非翻译内容的ugettext_lazy字符串.我找到了两种方法,但我对其中任何一种都不满意:
the_string = ugettext_lazy('the content')
the_content = the_string._proxy____args[0] # ewww!
Run Code Online (Sandbox Code Playgroud)
要么
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)
Run Code Online (Sandbox Code Playgroud)
第一段代码访问一个已明确标记为私有的属性,因此无法确定此代码的工作时间.第二种解决方案过于冗长和缓慢.
当然,在实际代码中,ugettext_lazyied字符串的定义和访问它的代码是appart.
另外两个选择.不是很优雅,但不是私人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"
Run Code Online (Sandbox Code Playgroud)第二:重新设计你的代码.与您使用它们的位置分开定义未翻译的消息:
gettext = lambda s: s
some_text = gettext('Some text')
lazy_translated = ugettext_lazy(text)
untranslated = some_text
Run Code Online (Sandbox Code Playgroud)这是您的第二个解决方案的更好版本
from django.utils import translation
the_string = ugettext_lazy('the content')
with translation.override('en'):
content = unicode(the_string)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2527 次 |
| 最近记录: |