我正在使用这个英语到印地语 Unicode 转换器。生成的代码放在MessageBundle_hi_IN.properties
文件中。
当违反约束时,例如强制文本字段。应从此文件中提取相应的错误消息并以印地语显示,但它显示与文件中相同的 Unicode,无需任何转换,例如,
खालि नहि रख शकते.
预计会以印地语形式显示。
खालि नहि रख शकते。
它的意思是“不能留空。 ”
XHTML 页面。
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html lang="#{localeBean.language}"
xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:p="http://primefaces.org/ui"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:f="http://java.sun.com/jsf/core">
<f:view locale="#{localeBean.locale}">
<h:head>
<title>Title</title>
</h:head>
<h:body>
<h:form>
<h:selectOneMenu id="languages" value="#{localeBean.language}" onchange="submit();" style="position: absolute; right: 0; top: 50px;">
<f:selectItem itemValue="en" itemLabel="English" />
<f:selectItem itemValue="hi" itemLabel="Hindi" />
</h:selectOneMenu>
</h:form>
</h:body>
</f:view>
</html>
对应的托管 bean。
package admin.mangedbean;
import java.io.Serializable;
import java.util.Locale;
import javax.annotation.PostConstruct;
import javax.faces.context.FacesContext;
@ManagedBean
@SessionScoped
public final class LocaleBean implements Serializable
{
private Locale locale;
private static final long serialVersionUID = 1L;
public LocaleBean() {}
@PostConstruct
private void init()
{
locale = FacesContext.getCurrentInstance().getViewRoot().getLocale();
}
public Locale getLocale()
{
return locale;
}
public String getLanguage()
{
return locale.getLanguage();
}
public void setLanguage(String language)
{
if(language.equals("hi"))
{
locale = new Locale(language, "IN");
}
else
{
locale = new Locale(language);
}
FacesContext.getCurrentInstance().getViewRoot().setLocale(locale);
}
}
faces-config.xml 文件。
<application>
<message-bundle>
messages.MessageBundle
</message-bundle>
<locale-config>
<default-locale>en</default-locale>
<supported-locale>hi_IN</supported-locale>
</locale-config>
<resource-bundle>
<base-name>messages.ResourceBundle</base-name>
<var>messages</var>
</resource-bundle>
</application>
这在 JSP 中有效,例如,
<fmt:setLocale value="hi_IN"/>
<fmt:setBundle basename="bundles.resourceBundle_hi_IN" var="resourceBundle"/>
<fmt:message key="someKey" bundle="${resourceBundle}"/>
这里出了什么问题?我使用了错误的转换器吗?JSF 不支持这种语言吗?