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>

但这不起作用(当然)。

有任何想法吗 ?

4

2 回答 2

1

调用的结果按tal:attributes字面意思传递给翻译机器。i18n:attributes将它的键与tal:attributes生成的内容进行匹配,如果匹配,则忽略元素上的原始属性(请参阅Zope 3 wiki 上的这篇 I18N 文章

这意味着将查找“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)
)

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

于 2012-06-23T13:43:20.307 回答
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

但是,这可能违反所有最佳实践。

于 2012-06-20T21:40:20.203 回答