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 3wikiのこのI18Nの記事を参照してください) 。

これは、「Cette etape fait partie du troncon $ {troncon / nom}」の結果が翻訳のために検索されることを意味し、のすべての可能な値で作成できる文のバリエーションごとに翻訳を提供する必要がありますtroncon/nom

この文字列で適切なプレースホルダーのサポートを取得するには、troncon構造を生成するコードでメッセージIDを作成し、おそらくビューでそれを変換することをお勧めします。必要なもの:

  • プレースホルダー付きのメッセージID
  • nomメッセージIDに値を添付します
  • このメッセージを現在選択されている言語に翻訳する
  • troncon結果を構造に含める

私は通常、これは1つのステップです。

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 に答える