2012-08-23 19 views
6

xml/xsl ile farklı dillerde bir sayfa yapmaya çalışıyorum. Sadece bir xml ve bir xsl istiyorum. Url sayfamda İngilizce veya Felemenkçe seçtiğimi görmek için kullanabileceğimi düşündüğüm bir parametre pLanguage var. xsl ve xml ile I18N nasıl yapılır

Bu kod ile çalıştı ama ben bir araya getirdiler bilmiyorum:

<xsl:variable name="lang.pageTitle" select="'This is the title in English'"/> 

almak için:

Öncelikle böyle çevrildi sunduğu tüm kelimelerin değişkenleri yapmak Şimdi

<xsl:value-of select="$lang.pageTitle"/> 

kullanabilirsiniz şablonda pageTitle yukarıda benim Seçilen dil thi gibi TR veya NL olup olmadığını test etmek bir if-else deyimi kullanarak kodunun ilk satırı yerine düşünülen s:

<xsl:choose> 
     <xsl:when test="$choosenLanguage &#61; ‘NL’"> 
     <xsl:variable name="lang.pageTitle" select="Titel in het nederlands'"/> 
     </xsl:when> 
     <xsl:otherwise> 
     <xsl:variable name="lang.pageTitle" select="'This is the title in English'"/> 
     </xsl:otherwise> 
    </xsl:choose> 

Ama hatayı alıyorum: java.lang.IllegalArgumentException: Burada bağımsız değişken $ lang.opdracht

cevap

2

ayrıştırılamıyor bu jenerik yapılabilir nasıl tam bir örnektir yolu:

bu dönüşümün (başlık küresel/eksterna uyarınca oluşturulan herhangi bir XML belgesine (kullanılmıyor), istenilen doğru sonucu uygulanır
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
xmlns:my="my:my" exclude-result-prefixes="my"> 
<xsl:output omit-xml-declaration="yes" indent="yes"/> 
<xsl:strip-space elements="*"/> 

<xsl:param name="pLang" select="'nl'"/> 

<my:texts> 
    <pageTitle lang="en">This is the title in English</pageTitle> 
    <pageTitle lang="nl">Titel in het nederlands</pageTitle> 
</my:texts> 

<xsl:variable name="vTexts" select="document('')/*/my:texts"/> 

<xsl:template match="/"> 
    <html> 
     <title> 
     <xsl:value-of select="$vTexts/pageTitle[@lang = $pLang]"/> 
     </title> 
    </html> 
</xsl:template> 
</xsl:stylesheet> 

l parametresi $pLang) üretilir:

<html> 
    <title>Titel in het nederlands</title> 
</html> 

not Do:

Tüm dizeleri XSLT stil dosyası (ler) ayrı olan bir XML belgesine muhafaza edilmesi tavsiye edilir. Bu, dizelerin XSLT kodunu değiştirmeden değiştirilmesine/eklenmesine/silinmesine izin verir.

Başka bir XML belgesindeki dizelere erişmek için kod hemen hemen aynı kalır, tek fark şu anda document() işlevinin argümanı dizge XML belgesinin URI'sıdır.

+0

Neden 'xml: lang' özniteliğini ve' lang ($ pLang) 'işlevini kullanmayın? – DanMan

+0

@DanMan, Evet, bu mümkün. Aynı dilde farklı dizelerimiz varsa, ancak farklı odaklamalarla bu yaklaşımın hala kullanılabilir olup olmadığından emin değilim - ör. son kullanıcı ve ara kullanıcı için metin. Eğer bu sadece 'xml: lang' ve' lang() 'işlevini kullanarak yapılamazsa, bu cevaptaki teknik yine de geçerli olacaktır. –