Джанго: проблема локализации - PullRequest
1 голос
/ 17 января 2011

В моем приложении у меня есть словарь фраз, которые используются во всем приложении.Этот же словарь используется для создания PDF-файлов и электронных таблиц Excel.

Словарь выглядит так:

GLOBAL_MRD_VOCAB = {
    'fiscal_year': _('Fiscal Year'),
    'region': _('Region / Focal Area'),
    'prepared_by': _('Preparer Name'),
    'review_cycle':_('Review Period'),
    ... snip ...
}

В коде для создания PDF у меня есть:

fy = dashboard_v.fiscal_year
fy_label = GLOBAL_MRD_VOCAB['fiscal_year']

rg = dashboard_v.dashboard.region
rg_label = GLOBAL_MRD_VOCAB['region']

rc = dashboard_v.review_cycle
rc_label = GLOBAL_MRD_VOCAB['review_cycle']

pb = dashboard_v.prepared_by
pb_label = GLOBAL_MRD_VOCAB['prepared_by']

Теперь, когда создается PDF, в PDF я не вижу эти ярлыки, а вижу:

<django.utils.functional.__proxy__ object at 0x10106fdd0>

Может ли кто-нибудь помочь мне с этим?Как получить правильно переведенные ярлыки?

Спасибо, Эрик

1 Ответ

2 голосов
/ 17 января 2011

«Ленивый перевод»

Результат вызова ugettext_lazy() может использоваться везде, где вы будете использовать строку Unicode (объект с типом unicode) вPython.Если вы попытаетесь использовать его там, где ожидается строка байтов (объект str), все будет работать не так, как ожидалось, поскольку объект ugettext_lazy() не знает, как преобразовать себя в строку байтов.Вы также не можете использовать строку юникода внутри строки байтов, так что это согласуется с обычным поведением Python.

...

Если вы когда-нибудь увидите вывод,выглядит как "hello <django.utils.functional...>", вы пытались вставить результат ugettext_lazy() в строку байтов.Это ошибка в вашем коде.

Либо передайте его unicode(), чтобы получить unicode, либо не используйте ленивый перевод.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...