我有这样的翻译:
<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 :(得分:0)
您始终可以在context.translate()
上强制翻译:
tal:attributes="foobar python:context.translate(string, domain='translationdomain')"
但是,这可能违反所有最佳做法。
答案 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,并将其翻译在那里,大概在您的视图中。你需要:
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)
)
请注意,您需要请求翻译功能才能选择正确的语言。