当浏览器的Accept-Language在我的JSF应用程序中是阿拉伯语时,我想在inputText中呈现文本方向rtl(从右到左)。当Accept-Language是英语时,用户引入的文本将是dir =" ltr" (左到右)。我该怎么办?
答案 0 :(得分:6)
客户Accept-Language
可通过UIViewRoot#getLocale()
间接获取。 UIViewRoot
依次在EL #{view}
中可用。所以,这应该做:
<h:inputText ... dir="#{view.locale.language eq 'ar' ? 'rtl' : 'ltr'}" />
请注意,所有其他组件和HTML元素也支持dir
,例如<h:form>
甚至<html>
。
<html ... dir="#{view.locale.language eq 'ar' ? 'rtl' : 'ltr'}">
除非被不同的dir
覆盖,否则它将应用于其所有子项。这样可以避免在所有子组件/元素上重复相同的属性。
另请注意,JSF只接受在<locale-config>
faces-config.xml
中明确注册的区域设置。因此,如果您还没有ar
,那么无论Accept-Language
标头如何,上述内容都无法正常工作。
<application>
<locale-config>
<default-locale>en</default-locale>
<supported-locale>ar</supported-locale>
...
</locale-config>
</application>
如有必要,将逻辑移动到托管bean,以便最终可以如下所示:
<h:inputText ... dir="#{localeManager.dir}" />