当语言是阿拉伯语时,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}" />
另请参阅:
当浏览器的 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}" />