cookies - 如何为我的 Xpages 应用程序设置/切换语言
问题描述
我想以多种语言支持我的应用程序。
我希望应用程序通过 cookie 记住用户的选择,这样用户就不需要在每次访问时设置语言。
我在设置语言和更改语言时遇到问题。某处更改未正确设置。
到目前为止,我是这样来的。我有两个按钮来选择语言:
<xp:button value="English">
<xp:this.disabled><![CDATA[#{javascript:return context.getLocaleString().equals("en")}]]></xp:this.disabled>
<xp:eventHandler event="onclick" submit="true"
refreshMode="complete">
<xp:this.action><![CDATA[#{javascript:setLanguage('en')
context.reloadPage()}]]></xp:this.action>
</xp:eventHandler>
</xp:button>
|
<xp:button value="Svenska">
<xp:this.disabled><![CDATA[#{javascript:return context.getLocaleString().equals("sv")}]]></xp:this.disabled>
<xp:eventHandler event="onclick" submit="true"
refreshMode="complete">
<xp:this.action><![CDATA[#{javascript:setLanguage('sv')
context.reloadPage()}]]></xp:this.action>
</xp:eventHandler>
</xp:button>
在 setLanguage 中,我创建了一个 cookie 并为上下文设置了语言:
function setLanguage(lang){
//create/overwrite cookie first
var response = facesContext.getExternalContext().getResponse();
var userCookie = new javax.servlet.http.Cookie("userLanguage", lang);
userCookie.setMaxAge(60*60*24*365*10); // set age in seconds...
userCookie.setPath("/"); // cookie will be valid under this path
response.addCookie(userCookie);
//set language for context
context.setLocaleString(lang);
}
我有一个读取cookie的功能:
function getCookie(cookieName){
var c = facesContext.getExternalContext().getRequestCookieMap().get(cookieName)
return (c!=null)?c.getValue():""
}
我最初在这里找到的代码: https ://oliverbusse.notesx.net/Privat/osnippets.nsf/snippet.xsp?documentId=00697A5B1012D029C1257B320005775D
对于每个页面,我都会将 cookie 中的值与上下文进行比较,如果存在差异(例如,用户切换选择或在上下文中有不同的语言环境,我也会设置语言并初始化用于多种语言关键字的默认值:
function initLanguage(){
var reset = false;
var userLanguage = getCookie("userLanguage")
var localLanguage = context.getLocaleString();
if(userLanguage != ""){
if (userLanguage != localLanguage){
setLanguage(userLanguage);
reset = true;
}
} else{
if (localLanguage.equals("sv_SV")){
setLanguage('sv');
reset = true;
}else if (localLanguage.equals("en_EN")){
setLanguage('en');
reset = true;
}else if (localLanguage.equals("en_US")){
setLanguage('en');
reset = true;
}
}
if (reset){
init();
context.reloadPage();
}
}
不知何故,我设法写了一个冲突或在上下文中重新加载更改消失了:-?
解决方案
也许答案是您在 cookie 中设置了sv和en,但是针对可能不是 sv 的上下文 locallang 进行测试,因为您正在测试sv_SV
推荐阅读
- javascript - 移动动画后按钮悬停不再起作用
- go - 动态类型断言 Golang
- excel - 我正在尝试使用 VBA 宏将信息从 excel 电子表格写入 Powerpoint
- r - databricks 上的 sql sparklyr sparkr 数据帧转换
- orientdb - 使用 SQL 语言创建 onBeforeCreate 动态钩子
- java - Java实例方法不同的调用方式
- java - 与补充表中的外键单向一对一映射?
- knative-serving - 如何在我自己的本地 k8s 集群上安装 knative 服务?
- spring - 单元测试 Spring ApplicationEventPublisher
- android - 如何在 Ionic 构建过程中保留原生 IOS 和 Android 代码更改