struts1中的参数化国际化字符串

本文介绍了一种在JS和Java中实现国际化的方法,通过配置文件动态获取不同语言的消息提示,支持参数替换,并展示了如何根据不同文化代码设置用户的语言环境。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

JS

login.myprofile.emailacct=Email Account
login.myprofile.emailpwd=Email Password

errors.optinvalid=[0] or [1] is invalid.

 

function concatMsg(jsMsg, inParam){
 for(idx_i=0;idx_i<inParam.length;idx_i++){
        var idx = jsMsg.indexOf('['+idx_i+']');
        if (idx!=-1)
            jsMsg = jsMsg.substring(0,idx) + inParam[idx_i] + jsMsg.substring(idx+3);
 }
 return jsMsg;
}

 

    var temp = new Array('<bean:message key="login.myprofile.emailacct" />','<bean:message key="login.myprofile.emailpwd" />');
    var jsMsg2=concatMsg("<bean:message key='errors.optinvalid'/>",temp);

Java

 

label.msg.maxFileSizeLimit=Maximum attachment file size is {0} KB

 

String [] arg={"2000"};
String errMsg = MessageUtil.getMessage(request,"label.msg.maxFileSizeLimit",arg);

 

package com.eastpro.common.util.language;

import java.util.Locale;

import javax.servlet.http.HttpServletRequest;

import org.apache.log4j.Logger;
import org.apache.struts.Globals;

import com.eastpro.util.Constants;
import com.eastpro.util.LoginUserMgr;

public class LanguageUtil {

 protected final static Logger log = Logger.getLogger(new LanguageUtil()
   .getClass());


 /**
  * Set the user's currently selected Locale.
  *
  * @param request
  *            The request we are processing
  * @param cultureCode
  *            login user current culture langugage or langCode 0:ENGLISH /1:TW_CHINESE/2:CN_CHINESE.
  * @param locale
  *            The user's selected Locale to be set, or null to select the
  *            server's default Locale
  */
 public static void setLocaleInSession(HttpServletRequest request, String cultureCode) {
  String v_cultureCode=null;
  v_cultureCode = getCultureCode(cultureCode);  
  Locale locale = getLocale(v_cultureCode);
  log.debug("v_cultureCode ---------->" +v_cultureCode);
  log.debug("setLocale ---------->" + locale.toString());
  LoginUserMgr.setCurrentLocale(request, locale);
  LoginUserMgr.setCurrentVersion(request, v_cultureCode);
  request.getSession().setAttribute(Globals.LOCALE_KEY, locale);//struts locale
 }


 /**
  * Get Locale by cultureCode/langCode
  * @param cultureCode  login user current culture langugage or langCode 0:ENGLISH /1:TW_CHINESE/2:CN_CHINESE.
  * @return Locale
  */
 public static Locale getLocale(String cultureCode) {
  Locale locale = Locale.ENGLISH;
  String v_cultureCode = null;

  v_cultureCode = getCultureCode(cultureCode);
  
  if (Constants.ENGLISH_VERSION.equalsIgnoreCase(v_cultureCode)) {
   locale = Locale.ENGLISH;
  } else if (Constants.TW_CHINESE_VERSION.equalsIgnoreCase(v_cultureCode)) {
   locale = Locale.TRADITIONAL_CHINESE;
  } else if (Constants.CN_CHINESE_VERSION.equalsIgnoreCase(v_cultureCode)) {
   locale = Locale.SIMPLIFIED_CHINESE;
  }
  return locale;
 }
 /**
  * Get the user's currently selected Locale.
  * @param cultureCode   login user current culture langugage or login user current culture langugage
  *      0:ENGLISH /1:TW_CHINESE/2:CN_CHINESE
  * @return cultureCode
  *            The user's selected culture in report page to be set, or null to select the
  *            server's default Locale
  */
 public static String getCultureCode(String cultureCode) {
  String v_cultureCode = Constants.DEFAULT_VERSION;
  if (cultureCode == null
    ||cultureCode.equals("")
    ||cultureCode.equals("null")) {
   v_cultureCode = Constants.DEFAULT_VERSION;
  }else if ("0".equalsIgnoreCase(cultureCode )
    ||Constants.ENGLISH_VERSION.equalsIgnoreCase(cultureCode)){
   v_cultureCode = Constants.ENGLISH_VERSION;
  }else if ("1".equalsIgnoreCase(cultureCode )
    ||Constants.TW_CHINESE_VERSION.equalsIgnoreCase(cultureCode)){
   v_cultureCode = Constants.TW_CHINESE_VERSION;
  }else if ("2".equalsIgnoreCase(cultureCode )
    ||Constants.CN_CHINESE_VERSION.equalsIgnoreCase(cultureCode)){
   v_cultureCode = Constants.CN_CHINESE_VERSION;
  }
  return v_cultureCode;
 }
 
 /**
  * Get the user's currently selected langCode.
  * @param cultureCode  The user's selected culture in report page to be set, or null to select the
  *            server's default Locale
  * @return langCode login user current culture langugage
  *      0:ENGLISH /1:TW_CHINESE/2:CN_CHINESE
  */
 public static String getLangCode(String cultureCode) {
  String langCode="0";
  if ( Constants.ENGLISH_VERSION.equalsIgnoreCase(cultureCode)
    ||"0".equalsIgnoreCase(cultureCode))
   langCode = "0";
  else if ( Constants.TW_CHINESE_VERSION.equalsIgnoreCase(cultureCode)
    ||"1".equalsIgnoreCase(cultureCode))
   langCode = "1";
  else if ( Constants.CN_CHINESE_VERSION.equalsIgnoreCase(cultureCode)
    ||"2".equalsIgnoreCase(cultureCode))
   langCode = "2";
  return langCode;
 }
 
 public static void main(String[] args) throws Exception {
  log.debug(LanguageUtil.getLangCode("EN"));
  log.debug(LanguageUtil.getLangCode("ZH_TW"));
  log.debug(LanguageUtil.getLangCode("ZH_cn"));
  
  log.debug(LanguageUtil.getCultureCode("0"));
  log.debug(LanguageUtil.getCultureCode("1"));
  log.debug(LanguageUtil.getCultureCode("2"));
 }
 
 /**
  * get DbFiledName By LangCode
  * @author: xiaoming.yu
  * @param langCode : EN_US"0" , ZN_TW"1" , ZN_CN"2"
  * @return
  * if Constants.LANGCODE_EN_US(0) ,then return ""
  * else if Constants.LANGCODE_ZN_TW(1),then return "_OTH"
  * else if Constants.LANGCODE_ZN_CN(2),then return "_OTH2"
  */
 public static String getDbFiledNameByLangCode(String langCode) {
  String result=null;
  if(Constants.LANGCODE_EN_US.equals(langCode) ){ 
   result="";
  }else if (Constants.LANGCODE_ZN_TW.equals(langCode)){
   result="_OTH";
  }else if (Constants.LANGCODE_ZN_CN.equals(langCode)){
   result="_OTH2";
  }
  return result;
 }
 
}

 

package com.eastpro.common.util.message;

import org.apache.struts.Globals;
import org.apache.struts.action.Action;
import org.apache.struts.util.MessageResources;

import com.eastpro.common.util.language.LanguageUtil;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import javax.servlet.ServletContext;
import java.util.Locale;

public class MessageUtil extends org.apache.struts.util.RequestUtils {

    /**
     * For java to get propertie file message.
     * @param request
     * @param key
     * @param args
     * @return
     */
    public static String getMessage(HttpServletRequest request,String key , Object args[] ){
     return message(request,null,null, key, args);
 }
    public static String getMessage(HttpServletRequest request,String key ){
     return message(request,null,null, key, null);
 }
   
   
    /**
     * For java to get propertie file message by culture code
     * @param request
     * @param key
     * @param args
     * @param cultureCode
     * @return
     */
    public static String getMessageByCultureCode(HttpServletRequest request, String key ,String cultureCode, Object args[] ){
     return message(request,null,cultureCode, key, args ,"Y");
 }
   
    /**
     * For java to get propertie file message by culture code
     * @param request
     * @param key
     * @param cultureCode
     * @return
     */
    public static String getMessageByCultureCode(HttpServletRequest request, String key, String cultureCode){
     return getMessageByCultureCode( request, key ,   cultureCode ,null);
 }
   
   
 /**
  * For java to get propertie file message by culture code by MessageResources
  * @param resources MessageResources Action.getResources(request)
  * @param cultureCode   report cultureCode
  * @param key  message key 
  * @param args message param.
  * @return message String
  */
 public static String getMessage(MessageResources resources, String cultureCode, String key, Object args[]){
  
       
        if (resources == null) {
            return null;
        }
        // Look up the requested Locale   
        if (cultureCode == null)
         cultureCode = Action.LOCALE_KEY;  
       
        Locale userLocale = getLocale(cultureCode);

        // Return the requested message
       
        if (args == null){
         return (resources.getMessage(userLocale, key));
        }else{
            return (resources.getMessage(userLocale, key, args));
        }
    }
 
 /**
  * @param request
  * @param bundle
  * @param locale
  * @param key
  * @param args
  * @param flag
  * @deprecated
  * @return
  */
 public static String message(HttpServletRequest request, String bundle, String locale, String key, Object args[],String flag){
  
  HttpSession session = request.getSession();
        ServletContext servletContext = session.getServletContext();
        Locale userLocale = null; 
        // Look up the requested MessageResources
        if (bundle == null)
            bundle = Action.MESSAGES_KEY;
        MessageResources resources = (MessageResources)
            servletContext.getAttribute(bundle);
       
        if (resources == null) {
            return null;
        }
        // Look up the requested Locale
       
        if (locale == null)
            locale = Globals.LOCALE_KEY;
         
        if("Y".equalsIgnoreCase(flag)){
          userLocale = getLocale(locale);   
        }else{
            userLocale = (Locale)
            session.getAttribute(locale);
         if (userLocale == null)
             userLocale = Locale.getDefault();
     }

        // Return the requested message
       
        if (args == null){
         return (resources.getMessage(userLocale, key));
        }else{
            return (resources.getMessage(userLocale, key, args));
        }
    }
    /**
     * @param request
     * @param bundle
     * @param locale
     * @param key
     * @param args
     * @deprecated
     * @return
     */
    public static String message(HttpServletRequest request, String bundle, String locale, String key, Object args[]){
     return message(request, bundle,locale, key, args,null);
    }
   
    /**
     * @param request
     * @param bundle
     * @param locale
     * @param key
     * @param args
     * @deprecated
     * @return
     */
    public static String message(HttpServletRequest request, Locale locale, String key, Object args[]){
 
  HttpSession session = request.getSession();
  ServletContext servletContext = session.getServletContext();
  
  // Look up the requested MessageResources
  
  MessageResources resources = (MessageResources)
  servletContext.getAttribute(Action.MESSAGES_KEY);
  
  if (resources == null) {
   return null;
  }
  
  if (locale == null)
   locale = Locale.getDefault();
  
  // Return the requested message
  if (args == null)
  return (resources.getMessage(locale, key));
  else
  return (resources.getMessage(locale, key, args));
 
 }
 /**
  * Get Locale by cultureCode/langCode
  * @param cultureCode  login user current culture langugage or langCode 0:ENGLISH /1:TW_CHINESE/2:CN_CHINESE.
  * @return Locale
  */
    private static Locale getLocale(String cultureCode){
     
  return LanguageUtil.getLocale(cultureCode);
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值