2012-08-23 29 views
6

Tôi đang cố gắng làm một trang bằng các ngôn ngữ khác nhau với xml/xsl. Tôi muốn chỉ có một xml và một xsl. Trên trang của tôi Url Tôi có một tham số pLanguage mà tôi nghĩ rằng tôi có thể sử dụng để xem nếu tôi đã chọn tiếng Anh hoặc tiếng Hà Lan.Cách thực hiện I18N với xsl và xml

Tôi đã thử với mã này, nhưng tôi không biết làm thế nào tôi đặt nó với nhau:

Trước tiên tôi làm cho các biến của tất cả những lời người đã được dịch như thế này:

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

Để có được pageTitle trong mẫu bây giờ tôi có thể sử dụng

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

Tôi nghĩ để thay thế dòng đầu tiên của mã ở trên bằng cách sử dụng câu lệnh if-else để kiểm tra nếu ngôn ngữ được chọn của tôi là EN hoặc NL thích 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> 

Nhưng tôi nhận được lỗi: java.lang.IllegalArgumentException: không thể phân tích lý luận số $ lang.opdracht

Trả lời

2

Đây là một ví dụ hoàn chỉnh thế nào điều này có thể được thực hiện trong một generic cách:

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

Khi chuyển đổi này được áp dụng trên bất kỳ tài liệu XML (không sử dụng), các truy nã, kết quả chính xác (tiêu đề được tạo ra phù hợp với toàn cầu/chiếu sáng l tham số $pLang) được sản xuất:

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

Do lưu ý:

Đó là khuyến cáo rằng tất cả các chuỗi được duy trì trong một tài liệu XML đó là tách biệt với các tập tin XSLT stylesheet (s). Điều này cho phép các chuỗi được sửa đổi/thêm/xóa mà không thay đổi mã XSLT.

Để truy cập các chuỗi từ tài liệu XML khác, mã vẫn gần giống nhau, khác biệt duy nhất là đối số cho hàm document() bây giờ là URI đối với tài liệu XML chuỗi.

+0

Tại sao không sử dụng thuộc tính 'xml: lang' và hàm' lang ($ pLang) '? – DanMan

+0

@DanMan, Vâng, điều này là hoàn toàn có thể. Tôi không chắc liệu cách tiếp cận này vẫn có thể được sử dụng nếu chúng ta có các chuỗi khác nhau trong cùng một ngôn ngữ nhưng với trọng tâm khác nhau-- ví dụ: văn bản cho người dùng cuối và cho người dùng trung gian. Nếu điều này không thể được thực hiện chỉ bằng cách sử dụng 'xml: lang' và' lang() ', thì kỹ thuật trong câu trả lời này vẫn có thể áp dụng được. –