Re: [2.1] Non-trivial uses of i18n transformer
Francesco Chicchiriccò <[email protected]> Mon, 23 May 2016 15:41:43 +0200
| Newsgroups | gmane.text.xml.cocoon.user |
|---|---|
| Message-ID | <[email protected]> |
On 23/05/2016 15:39, Marc Salvetti wrote: > > Hi Chris, > > Try something like this <a title="some.catalogue:some.text" I18n-attr="title"/> > > That's by memory but should find the exact syntax in the doc Here it is: https://cocoon.apache.org/2.1/userdocs/i18nTransformer.html <para title="first" name="article" i18n:attr="title name"> <i18n:text>This text will be translated.</i18n:text> </para> HTH Regards. > Le 23 mai 2016 8:31 PM, "Christopher Schultz" <[email protected] <mailto:[email protected]>> a écrit : > > All, > > I'm finally getting around to internationalizing the XSLT-based parts > of my application, and I'm running into a problem with non-trivial > uses of <i18n:text> in a template. > > Here's an excellent example of the kind of thing I'm having trouble > with. I have a single XML document going through a pipeline with a few > transformations in it. There is one major transform where pretty much > everything interesting happens. I'd like to use <i18n> in there to > produce an HTML <a> element with a localized "title" attribute. > Something like this: > > <xsl:template match="p:foo"> > <a href="..." title="This is some English text">click me</a> > </xsl:template> > > Localizing the "click me" text is trivial. Doing the same with the > "title" attribute is not. > > <a title="<i18n:text key="some.text" />" [...] > > > That obviously won't work because the attribute won't be parsed and > evaluated by the XSLT parser. Use of {} around it doesn't work because > it's an element, not an expression. > > <xsl:element name="a"> > <xsl:attribute name="title"> > <i18n:text key="some.text" /> > </xsl:attribute> > [...] > </xsl:element> > > That doesn't work because <xsl:attribute> evidently can't contain > <i18n:text>. At first, this irritated me but then I realized that this > would never work, because the second case would basically degenerate > into the first case after the <map:transform> completed its work for > this template before I (later) ran the I18nTransformer. > > The only idea I've had is to flip the current i18n process on its head > and instead do this: > > <map:match pattern="/foo"> > <map:generate src="my.xml.document.xml" /> > > <map:transform src="cocoon://localized-transform.xsl" /> > > <map:serialize /> > </map:match> > > <map:match pattern="/localized-transform.xsl"> > <map:generate src="original.xsl" /> > > <map:transform type="i18n"> > <map:parameter name="locale" value="en_US" /> > </map:transform> > > <map:serialize /> > </map:match> > > So instead of transforming the input document with an > internationalized stylesheet, then transforming the result with the > i18n transformer, I first transform the transformer itself to get a > localized transformer, and transform the input document with *that*. > > Is that "recommended technique"? Alternatively, is that entirely stupid? > > If this is a good idea, how specifically can I accomplish what I have > above? I haven't yet tried it, but I'm concerned I'll have the same > problem with elements not being allowed in other elements. > > Any suggestions? > > Thanks, > -chris -- Francesco Chicchiriccò Tirasa - Open Source Excellence http://www.tirasa.net/ Involved at The Apache Software Foundation: member, Syncope PMC chair, Cocoon PMC, Olingo PMC, CXF Committer, OpenJPA Committer http://home.apache.org/~ilgrosso/