Spring i18n和l10n error-NoSuchMessageException:在代码' lable'下找不到任何消息对于语言环境' hi,en-in; q = 0.5'

时间:2017-03-14 03:33:22

标签: spring localization internationalization inversion-of-control

我正在尝试使用Spring实现i18n和l10n。我收到错误:

NoSuchMessageException: No message found under code 'lable' for locale 'hi,en-in;q=0.5'

以下是代码段: index.jsp文件:

<%-- String lang=request.getHeader("accept-language"); This line will give browser language --%>
<%@page import="org.springframework.context.support.ResourceBundleMessageSource"%>
<%@page import="org.springframework.context.support.ClassPathXmlApplicationContext"%>
<%@page import="org.springframework.context.ApplicationContext"%>
<%@page import="java.util.Locale"%>
<%

String lang=request.getHeader("accept-language");
Locale locale =new Locale(lang);
ApplicationContext ap =new ClassPathXmlApplicationContext("resources/spring.xml");
String value=ap.getMessage("lable",null,locale);
%>


<form action="./hello">
<%=value%>:<input type="text" name="name"/>
            <input type="submit" value="submit">
</form>

2个属性文件和1个spring.xml文件:

用于印地语的

Data_hi.properties:

拉​​布勒=नाम्

用于泰卢固语的

Data_te.properties:

拉​​布勒=సిదర్త్

spring.xml文件:

<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN"
"http://www.springframework.org/dtd/spring-beans-2.0.dtd">

<beans>
    <bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
        <property name ="basename" value="Data"/>
    </bean>

</beans>

当我尝试通过Tomcat Server运行应用程序时,我收到以下错误:

HTTP Status 500 -

输入例外报告

消息

description服务器遇到内部错误(),导致无法完成此请求。

例外

org.apache.jasper.JasperException: An exception occurred processing JSP page /index.jsp at line 11

8: String lang=request.getHeader("accept-language");
9: Locale locale =new Locale(lang);
10: ApplicationContext ap =new ClassPathXmlApplicationContext("resources/spring.xml");
11: String value=ap.getMessage("lable",null,locale);
12: %>
13: 
14: 

堆栈跟踪:

org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:568)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:470)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:722)

根本原因

org.springframework.context.NoSuchMessageException: No message found under code 'lable' for locale 'hi,en-in;q=0.5'.
    org.springframework.context.support.AbstractMessageSource.getMessage(AbstractMessageSource.java:159)
    org.springframework.context.support.AbstractApplicationContext.getMessage(AbstractApplicationContext.java:1259)
    org.apache.jsp.index_jsp._jspService(index_jsp.java:76)
    org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:432)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:722)

注意Apache Tomcat / 7.0.23日志中提供了根本原因的完整堆栈跟踪。

Apache Tomcat / 7.0.23

请建议我需要更正代码的人。我也试过google但是还没找到?

PS:正确导入所有必需的罐子和库。

提前致谢!!!

2 个答案:

答案 0 :(得分:0)

同意M. Deinum关于记忆问题的评论,但要解决下面描述的问题,方法应该有效:

  1. 将浏览器的语言设置为hindi或telgu,因为这些是您在资源中添加的prop文件,并运行代码来获取它。

  2. 或添加一个属性文件Data_en.properties,因为在执行jsp代码期间浏览器的语言将是英语,并且没有与英语消息相关的prop文件并抛出错误“ NoSuchMessageException:未找到任何消息代码'lable'代表'hi,en-in; q = 0.5'“这显然非常明显;”

答案 1 :(得分:0)

我一直在努力实现同样的目标。我的解释是这样的:执行行

之后
String lang=request.getHeader("accept-language");

变量lang包含字符串 - hi,en-in; q = 0.5 。因此,语言环境值也将是 - hi,en-in; q = 0.5 。在解析spring.xml文件时,IOC在注册的区域设置名称中搜索区域设置 hi,en-in; q = 0.5 。由于具有给定名称的区域设置不可用,因此它会提示错误消息:

org.springframework.context.NoSuchMessageException: No message found under code 'lable' for locale 'hi,en-in;q=0.5'.

可能的解决方案:

  1. 分配&#34; lang&#34;变量与&#34; te&#34;或&#34;嗨&#34;。
  2. 设置浏览器的值为  &#34; request.getHeader(&#34;接受语言&#34)&#34;将是&#34; te&#34;或&#34;嗨&#34;。