首页 > 解决方案 > 如何为我的 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();       
    }
}

不知何故,我设法写了一个冲突或在上下文中重新加载更改消失了:-?

标签: cookiesxpagesxpages-ssjs

解决方案


也许答案是您在 cookie 中设置了sven,但是针对可能不是 sv 的上下文 locallang 进行测试,因为您正在测试sv_SV


推荐阅读