如何在加载页面时自动从DB中设置i18n到strtus 2

时间:2017-07-10 06:08:35

标签: internationalization

我创建了一个带有语言环境类型的下拉列表,如英语,franch等和保存按钮。当我保存下拉值时保存在数据库中..我还有从数据库获取数据并存储在变量中的creatd方法..

我的要求是我在登录后打开任何页面,然后根据用户区域设置自动设置区域设置..

JSP:

<s:select label="Select Default Language"
                                headerKey="-1" headerValue="Select Default Language"    
                                list="#{'en':'English', 'fr':'France'}"
                                name="user.requestLocale"
                                value="%{user.requestLocale}" />
                                </div>

//保存按钮... getter setter正常工作..

//我在js中获得区域设置值

var userLocalte = "<s:property value="%{requestLocale}"/>"; //en or fr

//如何更改区域设置.. //我正在使用这个无限循环

// window.location.href='<c:url value="?request_locale=fr"/>'; 

// strtus.xml

/*<interceptor-ref name="defaultStack">
                <param name="i18n.parameterName">user.requestLocale</param>
            </interceptor-ref> */

//单击链接可以正常工作..但我想让它自动更新

 <s:url id="url" action="reloadupdate">
    <s:param name="request_locale">%{locale.requestLocale}</s:param>
    </s:url>
    <s:a href="%{url}">Default Locale</s:a> 

//我厌倦了另一种方法,但仅在该页面中有效

ActionContext.getContext().setLocale(Locale.FRANCE);

//下面的代码也不适用于所有页面

 sessionMap.put(I18nInterceptor.DEFAULT_SESSION_ATTRIBUTE, "fr");
 sessionMap.put("WW_TRANS_I18N_LOCALE", "fr");

1 个答案:

答案 0 :(得分:1)

得到解决方案。

//en= ISO-639 Language Codes
//US=ISO-3166 Country Codes

 String userLocale="en_US"; // this data is get from db , for french fr_FR
                String userLanguage = userLocale.substring(0, 2);
                String userCountry = userLocale.substring(3, 5);
                Locale locale = new Locale(userLanguage,userCountry);
                ActionContext.getContext().setLocale(locale);
                sessionMap.put(I18nInterceptor.DEFAULT_SESSION_ATTRIBUTE, locale);