JSF2.0中的印地语本地化
我正在使用英语到印地语的Unicode转换器。生成的代码放在JSF2.0中的印地语本地化,jsf,jsf-2,localization,hindi,Jsf,Jsf 2,Localization,Hindi,我正在使用英语到印地语的Unicode转换器。生成的代码放在MessageBundle\u hi\u in.properties文件中 违反约束(如强制文本字段)时。应从此文件中提取相应的错误消息,并以印地语显示,但其显示的Unicode与文件中相同,没有任何转换,如 खालि नहि रख श&a
MessageBundle\u hi\u 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>
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>
?JSF不支持这种语言吗
खालि नहि रख शकते.
是印地语的HTML转义形式。作为的一部分,任何输出文本都隐式地进行HTML转义。因此,实际上,这个HTML转义印地语最终在生成的HTML中双重转义,如下所示(右键单击,查看源代码以查看自己):
这使得它在webbrowser解释后以原始HTML转义形式出现
毕竟,使用HTML转义表单XXX.properties
文件中的code>不是正确的方法。您应该改用Unicode转义形式\uxxx
。另见。当您在Java风格的项目中编辑扩展名为.properties
的文件时,像Eclipse这样有点像样的IDE已经自动完成了这项工作。你可以用通常的方式在那里输入印地语,Eclipse会自动地避开它。但是,如果您使用的是不同的编辑器,或者无法正确配置编辑器,则需要使用JDK提供的native2ascii
工具。同样,有关详细信息,请参阅前面链接的Javadoc
最终,印地语的正确Unicode转义形式如下所示(我在Eclipse转义后复制粘贴):
将此未经修改的内容放入.properties
文件中
它在遗留JSP中工作只是因为它是一种相当遗留和低劣的视图技术,没有任何形式的隐式XSS攻击预防,因此HTML不会逃逸任何模板文本
与具体问题无关,对于您不知道的情况,您也可以直接在Facelets文件的源代码中编写印地语。只需确保编辑器配置为使用UTF-8保存文本文件。您发现的转换器对于现代JSF开发来说是绝对无用的
<fmt:setLocale value="hi_IN"/>
<fmt:setBundle basename="bundles.resourceBundle_hi_IN" var="resourceBundle"/>
<fmt:message key="someKey" bundle="${resourceBundle}"/>
खालि नहि रख शकते.
&#2326;&#2366;&#2354;&#2367; &#2344;&#2361;&#2367; &#2352;&#2326; &#2358;&#2325;&#2340;&#2375;&#46;
\u0916\u093E\u0932\u093F \u0928\u0939\u093F \u0930\u0916 \u0936\u0915\u0924\u0947.