如何从Django shell调用ugettext?

时间:2017-06-28 11:24:30

标签: django localization gettext

我正在开发一个本地化的Django项目,并且可以在许多语言中正常工作。现在有一个原因我需要从它的shell调用ugettext

这是我做的:

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

正如您所看到的那样,“Schedule& Details”这个短语没有用波斯语打印。

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

1 个答案:

答案 0 :(得分:4)

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

如果您手动激活shell中的语言,您应该看到翻译的行为符合预期:

drop table a_y purge;

create table a_y as
select te.a, s.ids
from   table_expressions te 
       join
       (select   t2.pk, RTRIM(XMLAGG(XMLELEMENT(E,t1.b,',').EXTRACT('//text()') 
                     ORDER BY t1.b).GetClobVal(),',') as ids
        from     a_x t1 
         join table_expressions t2 
          on t1.a like '%' || t2.a || '%'
         group by t2.pk
       ) s
on te.pk = s.pk
;

select * from a_y;

A                          IDS
-------------------------  ---
atveroeosipsum             1,3
test                       2
stetclitakasd              2
noseatakimata              3
loremipsumdolor            1,4
consetetursadipscingelitr  5

当然,如果您愿意,可以从>>> from django.utils.translation import activate, ugettext as _ >>> >>> activate('fa-ir') >>> print _("Schedule & Details") 加载'fa-ir',而不是硬编码。