我有一个网络应用程序。对于多语言目的,我使用带有MessageResources
的java struts 1.3。默认语言为italian
(MessageResources.properties
),第二语言为english
(MessageResources_en.properties
)。
struts-config.xml
中的:
<!--Message Resources -->
<message-resources parameter="MessageResources" />
在index.jsp
:
<% String language = request.getLocale().getLanguage(); %>
var lang = '<%=language%>';
<script type="text/javascript" src="js/language.js"></script>
js/language.js
中的:
$(document).ready(function() {
var browser = null;
var val = navigator.userAgent.toLowerCase();
if(val.indexOf("firefox") > -1) browser = 'FIREFOX';
else if(val.indexOf("msie") > -1) browser = 'IE';
else if(val.indexOf("chrome") > -1) browser = 'CHROME';
$.ajax({
url:"SetDefaultLanguage.do",
data: "isolingua="+lang+"&browser="+browser+"&val="+val,
success: function (response) {}
});
});
SetDefaultLanguage.java
中的:
//parametro del browser
if(request.getParameter("isolingua") != null)
{
isolingua = request.getParameter("isolingua");
switch (isolingua)
{
case "en":
request.getSession().setAttribute("lingua", 2);
Locale.setDefault(Locale.ENGLISH);
request.getSession().setAttribute(Globals.LOCALE_KEY, Locale.ENGLISH);
System.out.println("CASE EN: "+Locale.getDefault()+" - "+request.getSession().getAttribute(Globals.LOCALE_KEY));
break;
case "it":
request.getSession().setAttribute("lingua", 1);
Locale.setDefault(Locale.ITALIAN);
request.getSession().setAttribute(Globals.LOCALE_KEY, Locale.ITALIAN);
System.out.println("CASE IT: "+Locale.getDefault()+" - "+request.getSession().getAttribute(Globals.LOCALE_KEY));
break;
default:
request.getSession().setAttribute("lingua", 1);
Locale.setDefault(Locale.ITALIAN);
request.getSession().setAttribute(Globals.LOCALE_KEY, Locale.ITALIAN);
System.out.println("CASE DEFAULT: "+Locale.getDefault()+" - "+request.getSession().getAttribute(Globals.LOCALE_KEY));
break;
}
}
设置为浏览器语言“意大利语”它始终打印CASE IT:它 - 它 但这里是奇怪的行为:我的索引,注册或检索密码页面可以是
其他信息:
request.getSession().setAttribute("lingua", <int>)
在servlet中用于以正确的语言将信息检索到db中;这总是可以正常工作谢谢大家
答案 0 :(得分:2)
这是因为您使用Locale.setDefault()
文档说的内容:
设置此Java虚拟机实例的默认语言环境 ...
由于更改默认语言环境可能会影响许多不同的区域 功能,此方法只应在调用者使用 准备重新初始化运行的区域设置敏感代码 在同一个Java虚拟机中。
通常设置会话属性Globals.LOCALE_KEY
足以更改区域设置,您可以使用代码保存区域设置
// Extract attributes we will need
HttpSession session = request.getSession();
// Get locale from request, if any
Locale locale = request.getLocale();
// If supplied, set Locale based on request parameter
String language = request.getParameter("isolingua");
if (language != null && language.length() > 0) {
switch (language) {
case "en":
locale = Locale.ENGLISH;
session.setAttribute("lingua", 2);
break;
default:
locale = Locale.ITALIAN;
session.setAttribute("lingua", 1);
break;
}
}
//Save locale
session.setAttribute(Globals.LOCALE_KEY, locale);
答案 1 :(得分:0)
请注意,尝试使用以下逻辑实现它:
if (request.getParameter("isolingua") != null) { // check to avoid null pointer excptn.
if (request.getParameter("isolingua").equals("en")) {
// set english locale
}
else {
// set italian locale (our default)
}
}
我确信,它不会让你陷入异常/意外情况的困境中。