Package org.svnadmin.util

Source Code of org.svnadmin.util.I18N

/**
*
*/
package org.svnadmin.util;

import java.text.MessageFormat;
import java.util.HashMap;
import java.util.Locale;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;

import org.svnadmin.Constants;
import org.svnadmin.entity.I18n;
import org.svnadmin.service.I18nService;

/**
* 多语言工具类
*
* @author <a href="mailto:yuanhuiwu@gmail.com">Huiwu Yuan</a>
* @since 3.0.2
*/
public class I18N {
 
  /**
   * 缓存
   */
  private static Map<String,String> cache = new HashMap<String,String>();
  /**
   * 多语言服务层
   */
  private static I18nService i18nService = SpringUtils.getBean(I18nService.BEAN_NAME);
 
  /**
   * 获取默认的语言
   * @param request 请求
   * @return 获取默认的语言
   */
  public static final String getDefaultLang(HttpServletRequest request){
    //from session
    String result = (String) request.getSession().getAttribute(Constants.SESSION_KEY_LANG);
    if(result != null){
      return result;
    }
    //from request local
    Locale locale = request.getLocale();
    String country = locale.getCountry();
    String language = locale.getLanguage();
   
    if(country.length() != 0 && i18nService.existsLang(language+"_"+country)){//数据库是否存在这个语言?
      result = language+"_"+country;
    }
    if(result == null && i18nService.existsLang(language)){//数据库是否存在这个语言?
      result = language;
    }
    if(result == null){
      result = Locale.SIMPLIFIED_CHINESE.toString();//default zh_CN
      getLbl(result, result, Locale.SIMPLIFIED_CHINESE.getDisplayLanguage());//增加当前语言到数据库i18n
    }
   
   
    request.getSession().setAttribute(Constants.SESSION_KEY_LANG, result);//set to session
    return result;
  }
 
  /**
   * @param request 请求
   * @param id 语言id
   * @param defValue 默认值
   * @return 格式化后的多语言
   */
  public static final String getLbl(HttpServletRequest request,String id,String defValue){
    return getLbl(getDefaultLang(request), id, defValue, null);
  }
  /**
   * @param request 请求
   * @param id 语言id
   * @param defValue 默认值
   * @param args 参数
   * @return 格式化后的多语言
   */
  public static final String getLbl(HttpServletRequest request,String id,String defValue,Object[] args){
    return getLbl(getDefaultLang(request), id, defValue, args);
  }
  /**
   * @param lang 语言
   * @param id 语言id
   * @param defValue 默认值
   * @return 格式化后的多语言
   */
  public static final String getLbl(String lang,String id,String defValue){
    return getLbl(lang, id, defValue, null);
  }
  /**
   * @param lang 语言
   * @param id key
   * @param defValue 默认值
   * @param args 参数
   * @return 格式化后的多语言
   */
  public static final String getLbl(String lang,String id,String defValue,Object[] args){
    String key = lang+"$"+id;
    //from cache
    if(cache.containsKey(key)){
      return format(cache.get(key), args);
    }
    //from database
    I18n i18n = i18nService.getI18n(lang,id);
    if(i18n == null){//数据库里不存在
      i18n = new I18n();
      i18n.setLang(lang);
      i18n.setId(id);
      i18n.setLbl(defValue);
      i18nService.insert(i18n);
    }
   
    cache.put(key, i18n.getLbl());//put into cache
   
    return format(i18n.getLbl(), args);
  }
 
  /**
   * 格式化消息
   * @param pattern the pattern for this message format
   * @param arguments 参数
   * @return 格式化后的消息
   */
  private static String format(String pattern,Object[] arguments){
//    format = new MessageFormat(pattern);
//      format.setLocale(locale);
//      format.applyPattern(pattern);
//    str = format.format(args)
    if(pattern == null){
      return "";
    }
    return MessageFormat.format(pattern, arguments);
  }
 
  /**
   * 清空缓存
   */
  public static synchronized void clearCache(){
    cache.clear();
  }

  /**
   * 提供Service层或DAO使用,会从当前的线程中获取语言
   * @param id 语言id
   * @param defValue 默认值
   * @return 格式化后的多语言
   *
   * @see LangProvider
   */
  public static final String getLbl(String id,String defValue){
    return getLbl(LangProvider.getCurrentLang(), id, defValue, null);
  }
  /**
   * 提供Service层或DAO使用,会从当前的线程中获取语言
   * @param id key
   * @param defValue 默认值
   * @param args 参数
   * @return 格式化后的多语言
   *
   * @see LangProvider
   */
  public static final String getLbl(String id,String defValue,Object[] args){
    return getLbl(LangProvider.getCurrentLang(), id, defValue, args);
  }

}
TOP

Related Classes of org.svnadmin.util.I18N

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.