2014-03-22 5 views
0

Я пытаюсь получить строковые переводы, работающие в Pyramid с шаблонами ZPT. Я следовал руководству «Пирамиды» по интернационализации и локализации, т. Е. http://docs.pylonsproject.org/projects/pyramid/en/latest/narr/i18n.html#chameleon-template-support-for-translation-strings.Локализация в пирамиде ZPT Шаблон Chameleon

Однако, когда я добавить строку

<span>${some_translation_string}</span> 

к моему .pt файлу шаблона я просто получаю сообщение об утверждении от официантки:

NameError: some_translation_string 

Когда я перевожу строку some_translation_string вне шаблонов ЗПТА (т. е. в коде Python представления) это правильно переводит. Таким образом, я считаю, что есть допустимый сборный каталог сообщений на месте (хотя он создан вручную из-за отсутствия поддержки Python3 babel/lingua).

Я предполагаю, что я неправильно понял способ вставки локализованных строк в шаблоны ZPT в целом. Возможно, он не может быть таким же, как для ссылок на переменные?

+0

вы искажение документации Pyramid здесь: что предполагает some_translation_string является существующей переменной Python с Translat ionstring. –

ответ

1

Как я теперь понимаю, переводы внутри шаблона ZPT должен выглядеть следующим образом:

<span i18n:translate="">some_translation_string</h1> 

Если опустить идентификатор строки в i18n:translate сама строка используется для этого.

Кроме того, вы должны добавить добавить имя домена в заголовке шаблона, например .:

<html lang="en" 
    xmlns:tal="http://xml.zope.org/namespaces/tal" 
    xmlns:metal="http://xml.zope.org/namespaces/metal" 
    xmlns:i18n="http://xml.zope.org/namespaces/i18n" 
    i18n:domain="my_domain"> 

Эта информация, кажется, отсутствует в пирамиде документации ссылка.

+0

Документация Pyramid не пытается покрыть синтаксис Хамелеона. Документация Chameleon сама документирует это подробно: https://chameleon.readthedocs.org/en/latest/reference.html#id50 –

0

Для справки, делать переводы для сообщений в вашем коде JavaScript, я нашел этот путь под рукой:

На ваш взгляд, добавить TranslationStringFactory экземпляр параметров шаблона:

from translationstring import TranslationStringFactory 

@view_config(route_name='site', renderer='templates/site.pt') 
def form(request): 
    ... 
    return {'_': TranslationStringFactory('yourapp')} 

Тогда в шаблон вы можете написать:

<script type="text/javascript"> 
... 
yourapp.i18n['error'] = '${_('Error')}'; 
yourapp.i18n['warning'] = '${_('Warning')}'; 

</script>