当语言是阿拉伯语时,JSF 渲染目录="rtl"

JSF render dir="rtl" when language is arabic

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

客户的 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'}">

它将应用于其所有 children 除非被不同的集合 dir 覆盖。这将使您避免在所有 child components/elements.

中重复相同的属性

另请注意,JSF 将只接受在 faces-config.xml<locale-config> 中明确注册的语言环境。所以如果你还没有 ar 在那里,那么不管 Accept-Language header.

<application>
    <locale-config>
        <default-locale>en</default-locale>
        <supported-locale>ar</supported-locale>
        ...
    </locale-config>
</application>

如有必要,将逻辑移动到托管 bean,这样您就可以像下面这样结束:

<h:inputText ... dir="#{localeManager.dir}" />

另请参阅: