Springboot thymeleaf i18n国际化多语言选择->2.业务流程内部返回 对应的语言

本文是在 https://blog.csdn.net/fenglailea/article/details/89636925 基础上进行功能扩展更新的。

增加扩展功能

  1. 增加多模块语言目录支持
  2. 增加配置文件编码
  3. 增加业务流程内部返回 对应的语言案例

fox.风

源码案例

https://github.com/foxiswho/java-sping-boot-thymeleaf-i18n-demo

原作者 https://github.com/zzzzbw/Spring-Boot-I18n-Pro 已PUSH 到原作者库中

修改MessageResourceExtension类中的init方法

1.主要判断basename中是否含有,号,如果含有,那么把basename拆分成数组后调用parent.setBasenames方法
2.调用父方法设置文件编码parent.setDefaultEncoding("UTF-8");,让配置文件支持UTF-8编码,不需要中文再转换成Unicode编码了

com.zbw.i18n.compoment.MessageResourceExtension

	@PostConstruct
    public void init() {
        logger.info("init MessageResourceExtension...");
        if (!StringUtils.isEmpty(baseFolder)) {
            try {
                this.setBasenames(getAllBaseNames(baseFolder));
            } catch (IOException e) {
                logger.error(e.getMessage());
            }
        }
        //设置父MessageSource
        ResourceBundleMessageSource parent = new ResourceBundleMessageSource();
        //是否是多个目录
        if (basename.indexOf(",") > 0) {
            parent.setBasenames(basename.split(","));
        } else {
            parent.setBasename(basename);
        }
        //设置文件编码
        parent.setDefaultEncoding("UTF-8");
        this.setParentMessageSource(parent);
    }

增加工具类 LocaleMessage

主要作用就是 指定的键 key根据本地语言或自定义语言,获取对应键 key的语言的值

package com.zbw.i18n.util;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.MessageSource;
import org.springframework.context.i18n.LocaleContextHolder;
import org.springframework.stereotype.Component;

import java.util.Locale;

@Component
public class LocaleMessage {

    @Autowired
    private MessageSource messageSource;

    /**
     * @param code:对应文本配置的key.
     * @return 对应地区的语言消息字符串
     */
    public String getMessage(String code) {
        return this.getMessage(code, new Object[]{});
    }

    public String getMessage(String code, String defaultMessage) {
        return this.getMessage(code, null, defaultMessage);
    }

    public String getMessage(String code, String defaultMessage, Locale locale) {
        return this.getMessage(code, null, defaultMessage, locale);
    }

    public String getMessage(String code, Locale locale) {
        return this.getMessage(code, null, "", locale);
    }

    public String getMessage(String code, Object[] args) {
        return this.getMessage(code, args, "");
    }

    public String getMessage(String code, Object[] args, Locale locale) {
        return this.getMessage(code, args, "", locale);
    }

    public String getMessage(String code, Object[] args, String defaultMessage) {
        Locale locale = LocaleContextHolder.getLocale();
        return this.getMessage(code, args, defaultMessage, locale);
    }

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

    public Locale getLocale() {
        return LocaleContextHolder.getLocale();
    }
}

增加业务模块 案例

看控制器 ModuleController 案例
因为根据语言,获取指定语言的键值是最简单的,没有什么复杂度,
所以这里直接在控制器中写的,主要调用了工具类中的 localeMessage.getMessage("module.title"); 方法

package com.zbw.i18n.controller;

import com.zbw.i18n.util.LocaleMessage;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;


/**
 * @author fox
 */
@RestController
public class ModuleController {

    @Resource
    private LocaleMessage localeMessage;

    @GetMapping("/module")
    public String hello() {
        System.out.println("1");
        String msg3 = localeMessage.getMessage("module.title");
        System.out.println("module.title:"+msg3);
        msg3 = localeMessage.getMessage("title");
        System.out.println("title:"+localeMessage.getMessage("title"));

        System.out.println("title:"+msg3);
        System.out.println(localeMessage.getLocale());
        return msg3;
    }
}

发布了377 篇原创文章 · 获赞 143 · 访问量 164万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览