Re: [xsl] Need help with using lookup table and string translation

Subject: Re: [xsl] Need help with using lookup table and string translation
From: Sebastian Prehn <sebastian.prehn@xxxxxxxxxxxxxxxxxxx>
Date: Mon, 11 May 2009 15:39:05 +0200
Hi!

some short thoughts:
You need a template that matches all <trs> elements
In that template select the text node and store the text value in a variable. lets call it $key
then select /trans/tr_string[@str=$key]/ru/text()
if it isnot empty return it otherwise select the en version.
this can be done with a if then else expression

regards 
Sebastian



On Mon, 11 May 2009 09:18:58 -0400, Dmitri Snytkine <d.snytkine@xxxxxxxxx> wrote:
> Hello! I just started working with xslt a couple of days ago.
> It's still very new to me, even though I have over 5 years experience
> with php and javascript, which at least makes it relative easy to
> learn xslt, but I still can use good advice.
> 
> This is what I want to acheive:
> 
> I am developing a milti-lingual site, and want the transformations
> dont by the browser. For that I am including an xml of translations in
> a form of a lookup table inside the xsl template file, like this:
>  <trans:tr page_id="global">
>         <tr_string str="recent_albums">
>             <en>
>                 Recent Albums
>             </en>
>             <ru>
>                 PP>P2QP5 P0P;QP1P>P<Q
>             </ru>
>         </tr_string>
> 
>                 <tr_string str="welcome">
>             <en>
>                 Welcome to our site
>             </en>
>             <ru>
>                 PP>P1QP> P?P>P6P0P;P>P2P0QQ
>             </ru>
>         </tr_string>
> 
>         <tr_string str="recent_videos">
>             <en>
>                 Recent Videos
>             </en>
>         </tr_string>
> 
> 
>         <tr_string str="recent_images">
>             <en>
>                 Recent Images
>             </en>
>             <ru>
>                 PP>P2QP5 QP>QP:P8
>             </ru>
>         </tr_string>
>     </trans:tr>
> 
> 
> Then inside the xml file I may have strings like this:
> 
> <root>
>     <gv d="en" c="ru" lm="dynamic" sd="member"/>
>     <title>
>         My title
>     </title>
> 
>     <main>
>         <trs>
>             welcome
>         </trs>
>         <recent_images>
>             <div class="recent">
>                 <trs>
>                     recent_images
>                 </trs>
>             </div>
>             <img title="ocean">/img1.jpg</img>
>             <img title="people">/img2.jpg</img>
>             <img title="my dog">/img3.gif</img>
>         </recent_images>
> 
>     </main>
> 
> </root>
> 
> Now how do I make it so that every instance if <trs> tag is replaced
> by value of:
> if tag <tr_string> with value of "str" = <trs> does not exist, then
> return value of <trs> itself
> otherwise:
> find element <tr_string> with value of 'str' = value of <trs>
> and them: if it has child tag named  <ru>, return its value, otherwise
> return the value of <en>
> 
> In other words: if translaion lookup table has this string, then get
> the value or <ru> if it exists and not empty, otherwise fallback to
> value of <en>
> 
> If translation lookup table does not even have this string, then
> return untranslated value.
> 
> Anyway, maybe someone has already done something similar for a
> multilingual site and maybe there is a better way to store the lookup
> table?
> 
> I appreciate if anyone can help me with this.
> 
> Thank you.
--
PLANETS-Webdesign - Web Applications
Sebastian Prehn
Adlerstr. 56, 70199 Stuttgart
www.planetswebdesign.de
PGP keyID: 0x3507AF63

Current Thread