我正在尝试使用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:正确导入所有必需的罐子和库。
提前致谢!!!
答案 0 :(得分:0)
同意M. Deinum关于记忆问题的评论,但要解决下面描述的问题,方法应该有效:
将浏览器的语言设置为hindi或telgu,因为这些是您在资源中添加的prop文件,并运行代码来获取它。
或添加一个属性文件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'.
可能的解决方案: