JSF渲染dir =" rtl"当语言是阿拉伯语时

时间:2015-06-03 20:15:46

标签: jsf localization dir conditional-rendering

当浏览器的Accept-Language在我的JSF应用程序中是阿拉伯语时,我想在inputText中呈现文本方向rtl(从右到左)。当Accept-Language是英语时,用户引入的文本将是dir =" ltr" (左到右)。我该怎么办?

1 个答案:

答案 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}" />

另见: