Localization 如何转换动态标题属性

Localization 如何转换动态标题属性,localization,internationalization,plone,Localization,Internationalization,Plone,我要做这样的翻译: 您可以看到,我有一个动态标题属性,我希望它是可翻译的 我试过这样做: 就像这样: 但这(当然)不起作用 有什么想法吗?你可以在上下文中强制翻译。translate(): 但是,这可能与所有最佳实践背道而驰。调用tal:attributes的结果会直接传递给翻译机器i18n:attributes将其键与tal:attributes生成的内容相匹配,如果存在匹配项,则忽略元素上的原始属性(参见此) 这意味着将查找“Cette etape fat partie du

我要做这样的翻译:


您可以看到,我有一个动态标题属性,我希望它是可翻译的

我试过这样做:


就像这样:


但这(当然)不起作用


有什么想法吗?

你可以在
上下文中强制翻译。translate()


但是,这可能与所有最佳实践背道而驰。

调用
tal:attributes
的结果会直接传递给翻译机器
i18n:attributes
将其键与
tal:attributes
生成的内容相匹配,如果存在匹配项,则忽略元素上的原始属性(参见此)

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

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

没有尝试此操作,但它可以工作:您的视图可以提供一个方法/属性,在模板中以messageid(例如view.mytitle)的形式返回标题。以下内容应足够:tal:attribute=“title view/mytitle”i18n:attributes=“title”这种方法最大的缺点是i18ndude和其他查找可翻译字符串的工具不会将字符串作为消息id提取。我认为最好使用fRiSi在问题评论中描述的内容。
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)
)