2013-07-21 3 views
2

В тесте, которое я делаю в приложении для пирамиды, я пытаюсь отправить переводный текст через JSON, но перевод не работает. В начале файла я ввожу функцию перевода строки:Pyramid TranslationString не работает на json renderer

from pyramid.i18n import TranslationString as _ 

Затем рассмотрим следующий код:

@view_config(route_name='transtest', renderer='json') 
def transtest_view(request): 
    return { 'myvar': _('temp-test', default='Temporary test', domain='myapp') } 

Но то, что я получаю:

{"myvar": "temp-test"} 

Обратите внимание, что если Я меняю рендеринг на тестовый шаблон, который я сделал следующим образом:

@view_config(route_name='transtest', renderer='../templates/transtest.pt') 
... 

то текст становится правильно переводится (обратите внимание, что я уже инициализирован каталоги, обновляется их, составленное их и т.д.)

Это заставило меня думать, что класс TranslationString не работает прямо в «JSon» визуализатора? Если да, как я могу сделать, чтобы отправить переводимую строку через JSON?

Заранее спасибо

+0

почему вы заключаете, что в '_()' вы имели в виду, чтобы сохранить значение в виде кортежа ?? – Stephan

+0

Я следовал примеру документации pyramid i18n, и я увидел, что в этом случае он возвращает кортеж. Как сделать, чтобы получить только переведенную строку? –

+0

Как FWIW Я бы предложил использовать 'TranslationStringFactory', чтобы избежать повторения домена всюду:' from translationstring import TranslationStringFactory', затем '_ = TranslationStringFactory (domain = 'myapp')'. –

ответ

3

Вам необходимо явно перевести строку сообщения, используя get_localizer() и Localizer.translate():

from pyramid.i18n import get_localizer 

@view_config(route_name='transtest', renderer='json') 
def transtest_view(request): 
    message = _('temp-test', default='Temporary test', domain='myapp') 
    return {'myvar': get_localizer(request).translate(message)} 

Обычно шаблоны заботиться об этих шагов для вас, но и для JSON вам нужно сделать это самостоятельно.

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

from pyramid.i18n import TranslationStringFactory 

myapp_domain = TranslationStringFactory(domain='myapp') 

затем использовать:

from my.project import myapp_domain as _ 

# .... 

message = _('temp-test', default='Temporary test') 
+0

Спасибо Martijn !!! Просто попробовал это и работает как шарм! Приветствия. –

Смежные вопросы