如何从Django Shell调用ugettext?

mah*_*ard 3 django localization gettext

我正在开发一个Django项目,该项目已本地化并且可以在多种语言中正常工作。现在出于一个原因,我需要ugettext从它的外壳中调用。

这是我所做的:

>>> from django.conf import settings
>>> settings.LANGUAGE_CODE
u'fa-ir'
>>> from django.utils.translation import ugettext as _
>>> print _("Schedule & Details")
Schedule & Details
Run Code Online (Sandbox Code Playgroud)

如您所见,短语“时间表和详细信息”不是用波斯语打印的。

是否可以翻译一个短语然后在Django shell中打印它?

Chr*_*ris 5

Django的常规翻译功能取决于django.middleware.locale.LocaleMiddleware,但中间件作为请求/响应周期的一部分运行。由于您处于交互式外壳中,并且没有请求对象,因此中间件无法完成其工作。

如果您在外壳程序中手动激活该语言,则应该可以看到预期的翻译行为:

>>> from django.utils.translation import activate, ugettext as _
>>>
>>> activate('fa-ir')
>>> print _("Schedule & Details")
Run Code Online (Sandbox Code Playgroud)

当然,如果需要的'fa-ir'话,可以从中加载而不是硬编码settings.LANGUAGE_CODE