2012-06-20 2 views
2

У меня есть такой перевод сделать:Как перевести динамический заголовок атрибута

<a tal:attributes="href troncon/url; 
        title string:Cette etape fait partie du troncon ${troncon/nom}" 
    tal:content="troncon/nom">Canal du centre</a> 

Вы видите, что у меня есть динамический атрибут заголовка, который я хочу быть переводимым.

Я пробовал так:

<a tal:attributes="href troncon/url; 
        title string:Cette etape fait partie du troncon ${troncon/nom}" 
    tal:content="troncon/nom" 
    i18n:attributes="title">Canal du centre</a> 

И как это:

<a tal:attributes="href troncon/url; 
        title string:Cette etape fait partie du troncon ${troncon/nom}" 
    tal:content="troncon/nom" 
    i18n:attributes="title" 
    title="Cette etape fait partie du troncon ${nom}">Canal du centre</a> 

Но это не работает (конечно).

Любые идеи?

+0

не пробовал это, но она могла бы работать: Ваше мнение может предоставить метод/свойство, которое возвращает название как MessageID (например view.mytitle) в шаблоне должно быть достаточно следующее: тал: атрибут = «title view/mytitle» i18n: attributes = «title» – fRiSi

ответ

0

Результат звонка tal:attributes передается буквально машинным переводам. i18n:attributes соответствует это ключи от того, что tal:attributes генерирует, и если есть совпадение, оригинальный атрибут элемента игнорируются (см это I18N article on the Zope 3 wiki.

Это означает, что результата из «Cette Etape свершившейся партии Специальных ей troncon $ { troncon/nom} "будет переведена на перевод, требуя от вас предоставить переводы для каждой вариации предложения, которые могут быть сделаны со всеми возможными значениями troncon/nom.

Чтобы получить поддержку правильных заполнителей в этой строке, вам лучше отключить создание идентификатора сообщения в коде, который генерирует структуру troncon и переводить его там, предположительно в вашем vi РЭБ. Вам нужно:

  • идентификатор сообщения с заполнителем
  • Установите значение nom для идентификатора сообщения
  • Перевести это сообщение на выбранный язык
  • Include результат в вашей troncon структуре

Я обычно делаю это один шаг:

from zope.i18n import translate 
from zope.i18nmessageid import MessageFactory 

_ = MessageFactory('yourdomain') 

troncon = dict(
    ... 
    nom=nom, 
    nomtitre=translate(
     _(u'troncon_nomtitre', default=u'Cette etape fait partie du troncon ${nom}', 
      mapping=dict(nom=nom)), 
     context=self.request) 
) 

Обратите внимание, что вам нужна просьба о переводе, чтобы выбрать правильный язык.

0

Вы всегда можете заставить перевод на context.translate():

tal:attributes="foobar python:context.translate(string, domain='translationdomain')" 

http://collective-docs.readthedocs.org/en/latest/i18n/internationalisation.html#manually-translated-message-ids

Однако, это может быть против всех лучших практик.

+2

Самым большим недостатком этого подхода является то, что строка не будет воспринята как идентификатор сообщения i18ndude и другие инструменты для поиска переводимых строк. Лучше использовать то, что fRiSi описано в комментарии к вопросу, я думаю. –

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