2012-08-23 18 views
6

Próbuję zrobić stronę w różnych językach z xml/xsl. Chcę mieć tylko jeden xml i jeden xsl. Na mojej stronie Url mam parametr pLanguage, który myślę, że mogę użyć, aby sprawdzić, czy wybrałem język angielski lub holenderski.Jak zrobić I18N z xsl i xml

Próbowałem z tego kodu, ale nie wiem, jak mogę umieścić go razem:

Najpierw robię zmiennych wszystkich słów, kto ma zostały przetłumaczone tak:

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

Aby dostać pageTitle w szablonie I teraz można używać

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

Myślałem zastąpić pierwszą linię kodu powyżej za pomocą if-else, aby sprawdzić, czy mój język WYBRANEGO jest EN lub NL jak jes 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> 

Ale pojawia się błąd: java.lang.IllegalArgumentException: nie można analizować numer argumentu $ lang.opdracht

Odpowiedz

2

Powyżej znajduje się pełna przykładów, jak można to zrobić w ogólnym sposób:

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

Kiedy transformacja ta jest stosowana na dowolnym dokumencie XML (nie używany), poszukiwanych, poprawny wynik (tytuł jest generowany zgodnie z globalnym/oświetlenia l parametr $pLang) jest produkowany:

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

Należy pamiętać:

Zaleca się, aby wszystkie ciągi być utrzymane w dokumencie XML, który jest oddzielony od pliku (ów) XSLT arkusza stylów. Pozwala to na modyfikowanie/dodawanie/usuwanie łańcuchów bez zmiany kodu XSLT.

Aby uzyskać dostęp do ciągów z innego dokumentu XML, kod pozostaje prawie taki sam, jedyną różnicą jest to, że argumentem funkcji document() jest teraz identyfikator URI dokumentu XML ciągi.

+0

Dlaczego nie używać atrybutu 'xml: lang' i funkcji' lang ($ pLang) '? – DanMan

+0

@DanMan, tak, jest to całkowicie możliwe. Nie jestem pewien, czy to podejście może być nadal stosowane, jeśli mamy różne ciągi w tym samym języku, ale z innym nastawieniem - np. tekst dla użytkownika końcowego i dla użytkownika pośredniego. Jeśli nie można tego zrobić używając tylko 'xml: lang' i funkcji' lang() ', technika w tej odpowiedzi będzie nadal obowiązywać. –

Powiązane problemy