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;QP1P>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
|