2009-04-28 60 views
0

我在XML上使用XSL轉換。變換的某些部分取決於current locale。有沒有辦法從XSL中查找當前的語言環境?如何在XSL中獲取當前的國家代碼/區域設置?

例如,浮點數的用戶可見序列化在不同的語言環境中可能有所不同(英語中的「1.0」是德語中的「1,0」),我的轉換需要考慮這些差異。

+2

也許我需要更多的咖啡來終於醒來,但是,在XSL中是什麼文化? – 2009-04-28 06:54:02

+0

我也在想...... – bortzmeyer 2009-04-28 07:08:24

+0

即使您確實傳遞了一個參數(如@Tomalak建議的),您如何計劃在XSL文件中加載文化敏感數據? – Cerebrus 2009-04-28 07:14:16

回答

2

XSLT 1.0並不支持本地支持的本地語言,但可以使用它們,但需要將它作爲參數傳遞給XSLT處理器或依賴擴展。 某些處理器將授予您對區域設置信息的訪問權限,但是沒有標準的方式來執行此操作,因此我們必須瞭解您的環境以瞭解其是否可行。但是,在XSLT 2.0中,某些日期,時間和數字格式化函數將具有(有時是有限的)區域設置支持,並且將由處理器處理,而不是由您處理(這就是爲什麼有這些功能:)

As在XSLT 1.0環境中使用某種形式的局部性,而不考慮XSLT版本,部分形式爲Good Thing(TM),我將爲您使用的數據類型設置一些基本模板,並傳遞本地參數在(如前所述)。例如,對於數字,請查找xsl:format-number

至於其他地方的事情,我會創建另一個XML文件,並讓參數作爲您後面的信息選擇器。 XML可能看起來像;

<locals> 
    <config id="de"> 
    <currency notation="&#8352;" format-number="###.###,##" /> 
    <text id="welcome">Wilcommen!</text> 
    </config> 
    <config id="en"> 
    <currency notation="&#163;" format-number="### ###.##" /> 
    <text id="welcome">Welcome!</text> 
    </config> 
    <config id="no"> 
    <currency notation="NOK" format-number="###.###,##" /> 
    <text id="welcome">Velkommen!</text> 
    </config> 
</locals> 

從此打開它爲;

<xsl:variable name="locale" select="document('locale.xml')/locals/config[@id=$parameter.for.locale]" /> 

你可以用它作爲歡迎文本;

<xsl:value-of select="$locale/text[@id='welcome']" /> 

爲數字格式,並因此它更復雜一點,但是確認這是正確的道路第一,我會擴大,但基本上你應該在區域XML文件中的幾個按鍵,並使用一鍵查找值。對於數字等(需要告訴我更多關於你想要支持的內容),我會寫幾個處理這個問題的模板,然後使用;

<xsl:call-template name="my-template"> 
    <xsl:with-param name="this" select="'some_number'" /> 
</xsl:call-template> 
2

將它作爲參數傳入。

<xsl:param name="CultureInfo" select="'default'" /> 

放置在您的樣式表的頂層的XSL PARAM,並從「外部」設置調用樣式表之前。

另一種(專有)方法是註冊擴展函數並從樣式表中查詢。

相關問題