web国际化三种场景下的不同处理方式----JS,JSP,JAVA

        很多项目都会需要处理国际化的问题,所以整理了以下三种情况国际化的处理方式(这里列举的是没有前后端分离的情况,如果项vue等框架可以查看相关国际化处理方式)。

         第一种:js

                 目前主流的都是使用jQuery.i18n.properties,jQuery.i18n.properties是一款轻量级的jQuery国际化插件,能实现Web前端的国际化。

                 第一步:下载jQuery.i18n.properties.js,可以在github中下载:jQuery.i18n.properties.js 。

                 第二步:   创建国际化properties文件,文件地址创建在webapp下。

                 第三步:在web页面引入你的jQuery.i18n.properties.js文件,path即第二步创建的文件相对路径

                第四步:使用$.i18n.prop('i18N.KEY')。完成

       第二种:jsp

                  这种方式是使用springmvc的国际化,其他的如果有更好的处理方式可以探讨和指点下:

                  第一步:在spring.xml文件中    加上如下配置

    <mvc:interceptors>
        <bean id="localeChangeInterceptor"
            class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor">
            <property name="paramName" value="lang" />
        </bean>
    </mvc:interceptors>
	<!-- 存储区域设置信息 -->
    <bean id="localeResolver" class="org.springframework.web.servlet.i18n.SessionLocaleResolver" >
    <property name="defaultLocale" value="en_US"></property>
    </bean>
    
     <!-- 国际化资源文件 -->
    <bean id="messageSource"
        class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
        <property name="basenames" value="/WEB-INF/message/message" />  
    	<property name="defaultEncoding" value="UTF-8"/>
        <property name="useCodeAsDefaultMessage" value="true" />
    </bean>

                第二步:也是创建资源文件,资源文件可以放在src resource下,也可以放在web-inf下。

                第三步:页面使用 首先需在头部引入<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>,然后 用 <spring:message code="i18n.name" />替换文字就可以了

          第三种:JAVA后台处理

                         后台处理需要使用的是java.uitl.ResourceBundle类来获取资源文件,不多说直接上代码

      

/**
 * 
 * @className: ResourceBundleUtils
 * @classDescription:国际化资源文件获取
 * @author shiqiang.li
 * @create_date: 2019年6月17日 下午6:35:42
 * @update_date:
 */
public class ResourceBundleUtils {
	private static Logger logger = LoggerFactory.getLogger(ResourceBundleUtils.class);

	/**
	 * 根据key获取国际化文件对应的value,如果不存在对应的key,返回key值
	 * 
	 * @param key
	 * @return
	 */
	public static String getResourceBundleString(String key, Locale locale) {
		String retrunStr = null;
		if (StringUtils.isBlank(key)) {
			logger.warn("ResourceBundleUtils getResourceBundleDString key is null");
			return retrunStr;
		}

		key = ResourceKeyConstant.REOURCE_HEAD.concat(ResourceKeyConstant.REOURCE_DOT).concat(key);
		ResourceBundle resourceBundle = buildResourceBundle(locale);
		try {
			// 存在对应key就获取返回,没有则返回key
			if (resourceBundle.containsKey(key)) {
				retrunStr = resourceBundle.getString(key);
			}
		} catch (Exception e) {
			logger.error("ResourceBundleUtils getResourceBundleDString throw e:{}", e);
		}

		return retrunStr;
	}

	/**
	 * 根据key获取国际化文件对应的value,如果不存在对应的key
	 * 
	 * @param resourceBundle
	 * @param key
	 * @return
	 */
	public static String getResourceBundleString(ResourceBundle resourceBundle, String key) {
		String retrunStr = null;
		if (StringUtils.isBlank(key)) {
			logger.warn("ResourceBundleUtils getResourceBundleDString key is null");
			return retrunStr;
		}

		if (resourceBundle == null) {
			logger.warn("ResourceBundle is null");
			return retrunStr;
		}

		key = ResourceKeyConstant.REOURCE_HEAD.concat(ResourceKeyConstant.REOURCE_DOT).concat(key);
		try {
			// 存在对应key就获取返回,没有则返回key
			if (resourceBundle.containsKey(key)) {
				retrunStr = resourceBundle.getString(key);
				// retrunStr = new String(resourceBundle.getString(key).getBytes("ISO-8859-1"),
				// "UTF8");
			}
		} catch (Exception e) {
			logger.error("ResourceBundleUtils getResourceBundleDString throw e:{}", e);
		}

		return retrunStr;
	}

	/**
	 * 构建国际化对象
	 * 
	 * @return
	 */
	public static ResourceBundle buildResourceBundle(Locale locale) {
		// 根据语言类型,进行国际化处理
		ResourceBundle resourceBundle = null;
		try {
			if (locale != null) {
				resourceBundle = ResourceBundle.getBundle(ResourceKeyConstant.REOURCE_FILE_NAME, locale);
			} else {
				resourceBundle = ResourceBundle.getBundle(ResourceKeyConstant.REOURCE_FILE_NAME,
						new Locale("en", "US"));
			}
		} catch (MissingResourceException m) {
			logger.error("get resourceBundle is error-->{}", m.getMessage(), m);
		}

		return resourceBundle;
	}
}

             目前这种方式资源文件存在的位置只能是在resource下,目前还不清楚应该怎么处理不放在resource目录下ResourceBundle.getBundle(ResourceKeyConstant.REOURCE_FILE_NAME, locale)方法可以获取到资源文件,其他是没有问题的。

             整理到这了,希望对大家有帮助!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值