java实现多语言配置i18n

1、创建资源包和资源文件

一个资源包中的每个资源文件都必须拥有共同的基名。除了基名,每个资源文件的名称中还必须有标识其本地信息的附加部分。例如:一个资源包的基名是“inspectionJsonMsg”,则与中文、英文环境相对应的资源文件名则为: "inspectionJsonMsg_zh_CN.properties"  "inspectionJsonMsg_en_US.properties"


2、资源文件的书写格式

资源文件的内容通常采用"关键字=值"的形式,软件根据关键字检索值显示在页面上。一个资源包中的所有资源文件的关键字必须相同,值则为相应国家的文字。并且资源文件中采用的是properties格式文件,所以文件中的所有字符都必须是ASCII字码,属性(properties)文件是不能保存中文的,对于像中文这样的非ACSII字符,须先进行编码

例如:

国际化的中文环境的properties文件


国际化的英文环境的properties文件


3、在Spring配置文件中增加多语言配置,applicationContext.xml

<!--多语言的配置 开始-->
	<bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
		<property name="basenames">
			<list>
				<value>language/inspectionJsonMsg</value>
			</list>
		</property>

		<property name="defaultEncoding" value="UTF-8" />
	</bean>


	<bean id="localeResolver" class="org.springframework.web.servlet.i18n.CookieLocaleResolver">
		<property name="cookieName" value="spmsLanguage"/>
		<property name="cookieMaxAge" value="94608000"/>
		<property name="defaultLocale" value="zh_CN" />
	</bean>
	<!--多语言的配置 结束-->
4、如何使用

(1)编写常量类

public class InspectionConst {

	//设备查询成功
	public static final String INSPECTION_DEVICE_QUERY_SUCCESS = "ny.spms.java.inspection.device.query.success";
	//设备查询失败
	public static final String INSPECTION_DEVICE_QUERY_ERROR = "ny.spms.java.inspection.device.query.error";
}
(2)编写I18n工具类,I18nUtil.java

package com.hikvision.energy.util.i18n;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.MessageSource;
import org.springframework.context.MessageSourceResolvable;
import org.springframework.context.i18n.LocaleContextHolder;

import com.hikvision.energy.core.util.AppContext;

import java.util.Locale;

/**
 * 多语言查询value工具类
 * 
 * @author wanjiadong
 * @date 2017-11-6
 *
 */
public class I18nUtil {

    private static MessageSource messageSource;

    private final static Logger log = LoggerFactory.getLogger(I18nUtil.class);

    static {
        messageSource = AppContext.getBean("messageSource");
    }
    /**
     * 根据CODE查询,默认无通配参数,Local跟随当前cookie
     * @Author: wanjiadong
     * @Description:
     * @Date: 2017-11-6
     * @param: code
     */
    public static String getMessage(String code){
        return getMessage(code,null,getLocal());
    }

    public static String getMessage(String code,Locale locale){
        return getMessage(code,null,locale);
    }

    /**
     * 根据CODE查询,自定义默认值,默认无通配参数,Local跟随当前cookie
     * @Author: wanjiadong
     * @Description:
     * @Date: 2017-11-6
     * @param: code
     */
    public static String getMessage(String code,String defaultMessage){
        return getMessage(code,null,defaultMessage,getLocal());
    }
    /**
     * 根据CODE和args查询,Local跟随当前cookie
     * @Author: wanjiadong
     * @Description:
     * @Date: 2017-11-6
     * @param: code
     * @param: args 通配符的参数
     */
    public static String getMessage(String code,Object[] args){
        return getMessage(code,args,getLocal());
    }

    public static String getMessage(String code,Object[] args,String defaultMessage,Locale locale){
        return messageSource.getMessage(code,args,defaultMessage,locale);
    }

    public static String getMessage(String code, Object[] args, Locale locale){
        try{
            return messageSource.getMessage(code,args,locale);
        }catch (Exception e){
            log.error("Query message value by key[{}] error. The reason is:"+e.getMessage(),code);
            return null;
        }

    }

    public static String getMessage(MessageSourceResolvable resolvable, Locale locale){
        try{
            return messageSource.getMessage(resolvable,locale);
        }catch (Exception e){
            log.error("Query message value error. The reason is:"+e.getMessage());
            return null;
        }

    }

    //解析用户区域
    public static Locale getLocal() {
        return LocaleContextHolder.getLocale();
    }
}
(3)具体使用:

I18nUtil.getMessage(InspectionConst.TEMPORARY_JOB_OVER_BEGIN_TIME, new Object[]{InspectionConst.TEMPORARA_TIME})

I18nUtil.getMessage(InspectionConst.INSPECTION_TEMPORARY_JOB_ADD_SUCCESS)


  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
Spring Boot提供了简单易用的国际化(i18n)支持。以下是使用Spring Boot进行国际化的步骤: 1. 在src/main/resources目录下创建一个新的文件夹,命名为"i18n"。在该文件夹下创建多个属性文件,分别对应不同的语言。例如,可以创建messages.properties(默认语言)和messages_zh.properties(中文)。 2. 在属性文件中添加键值对,以便将文本翻译成不同的语言。例如,在messages.properties中可以添加"welcome.message=Welcome!",在messages_zh.properties中可以添加"welcome.message=欢迎!"。 3. 在Spring Boot的配置文件(application.properties或application.yml)中添加以下配置: ``` spring.messages.basename=i18n/messages spring.messages.fallback-to-system-locale=false ``` 这样配置后,Spring Boot将会自动加载位于i18n文件夹下的属性文件。 4. 在需要进行国际化的地方使用`@Autowired`注解注入`org.springframework.context.MessageSource`对象,并使用`getMessage`方法获取对应的文本。例如: ```java @Autowired private MessageSource messageSource; public String getWelcomeMessage() { return messageSource.getMessage("welcome.message", null, LocaleContextHolder.getLocale()); } ``` `LocaleContextHolder.getLocale()`方法可用于获取当前请求的语言环境。 5. 运行应用程序并访问相应的接口或页面,Spring Boot将会根据请求的语言环境自动加载对应的属性文件,实现国际化效果。 这些是使用Spring Boot进行国际化的基本步骤,你可以根据需要进行进一步的定制和扩展。希望对你有所帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

41摄氏度男

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值