如何翻译动态标题属性

时间:2012-06-20 08:11:55

标签: localization internationalization plone

我有这样的翻译:

<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>

但这不起作用(当然)。

有什么想法吗?

2 个答案:

答案 0 :(得分: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

但是,这可能违反所有最佳做法。

答案 1 :(得分:0)

tal:attributes调用的结果字面上传递给翻译机构。 i18n:attributes匹配tal:attributes生成的密钥,如果匹配,则忽略该元素的原始属性(请参阅此I18N article on the Zope 3 wiki

这意味着将查找“Cette etape fait partie du troncon $ {troncon / nom}”的结果进行翻译,要求您提供句子的每个变体的翻译使用troncon/nom

的所有可能值

要获得对此字符串中正确占位符的支持,最好在生成troncon结构的代码中创建消息ID,并将其翻译在那里,大概在您的视图中。你需要:

  • 包含占位符的消息ID
  • nom值附加到邮件ID
  • 将此邮件翻译为当前选定的语言
  • 将结果包含在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)
)

请注意,您需要请求翻译功能才能选择正确的语言。