为什么JSTL的fmt:setLocale标记仅在将作用域设置为会话的情况下起作用?

时间:2019-06-19 09:09:00

标签: jsp localization jstl

我的Web应用程序具有默认语言环境,该语言环境是基于服务器所在的国家/地区的。但是,在系统上创建的作业可以基于另一个国家/地区,因此很容易拥有其他语言环境。在某个页面上,我暂时(在页面范围内)尝试使用JSTL的fmt:setLocale标签将语言环境设置为显示的作业的语言环境,但无法正常工作。

我正在这样使用它,其中 currentLocale 是作业的语言环境代码(例如en_GB或en_HK)。

<fmt:setLocale value="${currentLocale}"/>

我甚至专门将其设置为上述语言环境代码之一:

<fmt:setLocale value="en_HK"/>

但是在使用fmt:formatNumber函数时,货币设置不正确:

<fmt:formatNumber value="${dailyRate}" type="currency"/>

这使用默认的en_US语言环境,因此货币符号是美元,而不是上面示例中的 HKD

但是,当我将语言环境的范围更改为“会话”时,它将起作用并使用正确的货币代码:

<fmt:setLocale value="en_HK" scope="session"/>

但是出于明显的原因,我不想覆盖会话的语言环境。有谁知道为什么会这样,或者是否有针对此问题的解决方法?我在Stack Overflow上看到了其他问题的评论,其中奇怪的人说setLocale标签仅在将作用域设置为会话时才起作用,但是没有人解释为什么会这样。

仅供参考,这是我发现的一个相关问题,人们在这里遇到过类似的问题:JSTL formatDate ignoring locale

谢谢!

0 个答案:

没有答案