2010-02-13 19 views
3

我試圖在我的JSP Web應用程序上本地化貨幣,問題是當我詢問語言環境時,我只獲取語言代碼(「en」)而不是全語言和國家代碼(「en_US」)。 問題在於,當setLocale的值不包含語言和國家代碼時,formatNumber不起作用。如何使fmt:setLocale在fmt:formatNumber上僅使用JSP中的語言代碼工作?

我可以通過在jsp頁面的開頭檢查語言環境語言並設置幾種語言的默認國家代碼然後設置setLocale的值來解決此問題,但此方法對我來說看起來相當難看。有沒有更好的方法來做到這一點?

這是我要做的事現在:

<c:choose> 
    <c:when test="${pageContext.response.locale == 'cs'}"> 
     <f:setLocale value="cs_CZ" /> 
    </c:when> 
    <c:otherwise> 
     <f:setLocale value="en_US" /> 
    </c:otherwise> 
</c:choose> 
<f:formatNumber type="currency" value="${product.price}" currencyCode="CZK"/> 
+0

您目前如何設置的語言環境。 – Bozho 2010-02-13 17:57:04

+1

他不必!條紋做到了! Yaay for Stripes !!! – Pointy 2010-02-13 23:38:12

回答

4

貨幣是依賴於國家,而不是語言。你真的需要設置它。更通用的方法是使用Filter,這樣就不需要在每個JSP中複製檢查。

更新:我現在看到您正在使用HttpServletResponse#getLocale(),它返回以編程方式設置的區域設置或其他容器的默認區域設置。通常的做法是使用HttpServletRequest#getLocale()獲取客戶端的語言環境,從而使:

${pageContext.request.locale} 

看看是否有幫助。然而,你仍然需要檢查國家是否真的存在。 A Filter是最好的地方。

+0

Firefox只發送語言代碼afaik。有一些解決方法嗎? – kovike 2010-02-13 20:54:27

+2

這是完全由客戶端控制的(瀏覽器設置等),您無法用它做很多事情。 – BalusC 2010-02-13 21:37:27

4

您使用的是條紋!條紋將處理區域適合你,你應該從ActionBeanContext得到它:

<c:set var='curLocale' value='${actionBean.context.locale}'/> 

別到處條紋回來了!這是通往痛苦和不安的路!條紋是你的朋友!

通常,您不應使用<fmt:setLocale>,因爲Stripes 已經在Stripes過濾器中設置了區域設置。再次,條紋是你的朋友!閱讀有關此內容的條紋維基:

http://www.stripesframework.org/display/stripes/Localization

+0

它也擔心當地的國家嗎?它是**強制**來顯示貨幣。如果是這樣,那將是一段路要走。如果不是,那麼您仍然需要一個自定義過濾器來檢查/設置區域設置國家。 – BalusC 2010-02-15 16:43:31

+0

條帶語言環境篩選器從HTTP標頭(即,從瀏覽器)中選取語言環境首選項,然後嘗試將其與配置的服務器端語言環境字符串列表進行匹配。是的,語言環境字符串包含國家代碼。如果瀏覽器只是說「en」,那麼Stripes將與服務器上的第一個「en」區域設置相匹配,但會使用服務器對「country」作爲默認設置的任何值。 – Pointy 2010-02-15 17:40:10

+0

那確實是要走的路。 +1。 – BalusC 2010-02-15 18:33:53

相關問題