MessageSourceUtil读取资源文件

        在处理返回值提示的时候,需要根据local返回中文或者英文,因此要使用到国际化内容

操作

1,新建资源文件

在src/main/resources源文件夹下创建一个i18n的子目录, 然后创建中文和英文对应properties文件,然后输入自己的提示信息

        输入内容:

result.success=执行成功
result.failure=执行失败
flow.toDo=有“{0}”待办“{1}”正等待您的审批!

flow.toDo=有“{0}”待办“{1}”正等待您的审批! 如果有其它参数用{0} 这种进行标记。

如果中文里面显示的值是乱码,打开setting 搜索 encoding

选择右下角的 Transparent native-to-ascii conversion 

然后点击OK

2,MessageSourceUtils

import org.springframework.context.MessageSource;
import org.springframework.context.MessageSourceResolvable;
import org.springframework.context.i18n.LocaleContextHolder;

import java.util.Locale;


public class MessageSourceUtils {

    public static MessageSource getMessageSource() {
        try {
            return (MessageSource) SpringUtils.getBean("messageSource");
        } catch (Exception e) {
            return SpringUtil.getBean(MessageSource.class);
        }
    }

    public static String getMessage(String code) {
        Locale locale = LocaleContextHolder.getLocale();
        return getMessageSource().getMessage(code, null, locale);
    }

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

    public static String getMessage(String code, String module) {
        Locale locale = LocaleContextHolder.getLocale();
        Locale myLocale = new Locale(module + "_" + locale.getLanguage(), locale.getCountry());
        return getMessageSource().getMessage(code, null, myLocale);
    }

    public static String getMessage(String code, Object[] args, String module) {
        Locale locale = LocaleContextHolder.getLocale();
        Locale myLocale = new Locale(module + "_" + locale.getLanguage(), locale.getCountry());
        return getMessageSource().getMessage(code, args, myLocale);
    }

    public static String getMessage(String code, Object[] args, Locale locale, String module) {
        Locale myLocale = new Locale(module + "_" + locale.getLanguage(), locale.getCountry());
        return getMessageSource().getMessage(code, args, myLocale);
    }

    public static String getMessage(String code, Locale locale, String module) {
        Locale myLocale = new Locale(module + "_" + locale.getLanguage(), locale.getCountry());
        return getMessageSource().getMessage(code, null, myLocale);
    }

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

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

    public static String getMessage(MessageSourceResolvable resolvable, Locale locale) {
        return getMessageSource().getMessage(resolvable, locale);
    }

}

3,本地化读取

import org.springframework.context.MessageSource;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.support.ReloadableResourceBundleMessageSource;
import org.springframework.web.servlet.LocaleResolver;
import org.springframework.web.servlet.i18n.CookieLocaleResolver;

import java.util.Locale;

@Configuration
public class LocaleConfiguration {

    @Bean(name = "messageSource")
    public MessageSource initMessageSource() {
        ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource();
        messageSource.setBasename("classpath:i18n/messages");
        return messageSource;
    }

    @Bean
    public LocaleResolver localeResolver() {
        CookieLocaleResolver localeResolver = new CookieLocaleResolver();
        localeResolver.setCookieName("LOCALE");
        localeResolver.setDefaultLocale(Locale.SIMPLIFIED_CHINESE);
        localeResolver.setLanguageTagCompliant(true);
        localeResolver.setCookieMaxAge(360 * 24 * 60 * 60);
        return localeResolver;
    }
}

4,判断中英文

public class LocaleUtils {

    public static String getLocale() {
        Locale locale = LocaleContextHolder.getLocale();
        String lang = locale.getLanguage();
        if (!StringUtil.isEmpty(locale.getCountry())) {
            lang = locale.getLanguage() + "_" + locale.getCountry();
        }
        return lang;
    }

    public static String getLanguage() {
        Locale locale = LocaleContextHolder.getLocale();
        return locale.getLanguage();
    }

    public static String getCountry() {
        Locale locale = LocaleContextHolder.getLocale();
        return locale.getCountry();
    }

    public static boolean isChinese() {
        String lang = getLanguage();
        return lang.toLowerCase().contains("cn") || lang.toLowerCase().contains("zh");
    }

    public static boolean isEnglish() {
        String lang = getLanguage();
        return lang.toLowerCase().contains("en") || lang.toLowerCase().contains("us");
    }

}

5,使用:

批量插入的时候,返回插入成功数和失败数:

Integer total = (Integer) result.get("total");
List<Long> fails = (List<Long>) result.get("fails");
String message = fails.isEmpty()
    ? MessageSourceUtil.getMessage("RESULT.BATCH_APPROVE_SUCCESS", new Object[]{total})
    : MessageSourceUtil.getMessage("RESULT.BATCH_APPROVE_ERROR",
    new Object[]{total - fails.size(), fails.size()});

6,注意:

        因为本地化读取使用了 @Configuration (相当于把该类作为spring的xml配置文件中的<beans>,作用为:配置spring容器(应用上下文))这个,因此在打包的时候,要注意其是否唯一。本地化包或者引用包,打包的时候,要进行移除:

    task archivesJar(type: Jar) {
        archiveName = "${project.name}-${project.version}.jar"
        from('build/classes/java/main', 'build/resources/main')
        exclude('**/**Application.class', '**/application**','**/bootstrap**',
                '**/SwaggerConfig**.class', '**/WebMvcConfiguration**.class',
                '**/LocaleConfiguration**.class')
    }

总结

        使用MessageSourceUtil读取资源文件就比较方便,判断是中英文,返回对应的内容。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/157087.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Hive Lateral View explode列为空时导致数据异常丢失

一、问题描述 日常工作中我们经常会遇到一些非结构化数据&#xff0c;因此常常会将Lateral View 结合explode使用&#xff0c;达到将非结构化数据转化成结构化数据的目的&#xff0c;但是该方法对应explode的内容是有非null限制的&#xff0c;否则就有可能造成数据缺失。 SE…

【机器学习10】循环神经网络

1循环神经网络 RNN通过将神经元串行起来处理序列化的数据。 由于每个神经元能用它的内部变量保存之前输入的序列信息&#xff0c;因此整个序列被浓缩成抽象的表示&#xff0c; 并可以据此进行分类或生成新的序列。 2 循环神经网络的梯度消失或梯度爆炸问题 传统的循环神经网…

websocket学习

写在前面 新公司用到了websocket技术&#xff0c;所以这里学习下。 1&#xff1a;Java原生 1.1&#xff1a;maven <dependency><groupId>org.java-websocket</groupId><artifactId>Java-WebSocket</artifactId><version>1.5.3</ver…

代码随想录算法训练营第五十七天丨 动态规划part17

647. 回文子串 思路 动态规划 动规五部曲&#xff1a; 确定dp数组&#xff08;dp table&#xff09;以及下标的含义 如果大家做了很多这种子序列相关的题目&#xff0c;在定义dp数组的时候 很自然就会想题目求什么&#xff0c;我们就如何定义dp数组。 绝大多数题目确实是…

【java学习—十五】经典例题:生产者/消费者问题(7)

文章目录 1. 题目2. 答案 1. 题目 生产者 (Productor) 将产品交给店员 (Clerk) &#xff0c;而消费者 (Customer)从店员处取走产品&#xff0c;店员一次只能持有固定数量的产品 ( 比如 4 &#xff09;&#xff0c;如果生产者试图生产更多的产品&#xff0c;店员会叫生产者停一下…

特隆美储能PVS ASEAN 2023展览会完美落幕

2023年11月14-16日&#xff0c;特隆美储能参加在印尼雅加达举办的“2023东盟光伏与储能展览会”&#xff08;简称PVS ASEAN 2023&#xff09;。该展会展览面积达20000平米&#xff0c;有超过300家企业参展。 展会旨在推动印度尼西亚以及东南亚地区朝着绿色可持续发展和高能效的…

鉴源论坛 · 观模丨软件单元测试真的有必要吗?(下)

作者 | 包丹珠 上海控安产品总监 版块 | 鉴源论坛 观模 社群 | 添加微信号“TICPShanghai”加入“上海控安51fusa安全社区” “软件单元测试真的有必要吗&#xff1f;&#xff08;上&#xff09;”一文中&#xff0c;着重探讨了单元测试的重要性及其正面临的困境&#xff0c…

【LeetCode:2736. 最大和查询 | 贪心 + 二分 + 单调栈】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…

一文带你了解ADC测试参数有哪些?

模数转换器&#xff08;ADC&#xff09;是数字电子系统中重要组成部分&#xff0c;用于捕获外部世界的模拟信号&#xff0c;如声音、图像、温度、压力等&#xff0c;并将它们转化为数字信号0\1, 以供计算机进行处理分析。ADC芯片在出厂交付之前&#xff0c;需要对产品的性能做各…

超详细的Monkey测试介绍

前言 Monkey 是Android SDK提供的一个命令行工具&#xff0c; 可以简单&#xff0c;方便地运行在任何版本的Android模拟器和实体设备上。 Monkey会发送伪随机的用户事件流&#xff0c;适合对app做压力测试 。 环境搭建 安装Android SDK 并配置环境变量 什么是Monkey 顾名…

PyTorch - 高效快速配置 Conda + PyTorch 环境 (解决 segment fault )

欢迎关注我的CSDN&#xff1a;https://spike.blog.csdn.net/ 本文地址&#xff1a;https://spike.blog.csdn.net/article/details/134463035 在配置算法项目时&#xff0c;因网络下载速度的原因&#xff0c;导致默认的 conda 与 pytorch 包安装缓慢&#xff0c;需要配置新的 co…

医美三季报内卷,华熙生物、爱美客、昊海生科混战双11

双十一落幕&#xff0c;据天猫大美妆数据统计&#xff0c;被称为“医美三剑客”的华熙生物(688363.SH&#xff09;、爱美客(300896.SZ)、昊海生科(688366.SH)的医美产品均未进入天猫双11美容护肤类目TOP10榜单。 与此同时&#xff0c;其业绩承压困局也写在最新的三季报里。 「…

【教学类-36】八等分格子-A4竖版-4条(制作皇冠、戒指)

背景需求&#xff1a; 最近在大四班孩子中间普及铅画纸制作“方盒”的活动&#xff0c;目前进展到使用三条8等分的长条纸&#xff0c;制作一个“坚硬的、不漏底”的方盒。 实验后&#xff0c;我想试试如果缩小纸条长宽&#xff0c;是不是可以做“迷你”纸盒。 目的&#xff…

工业镜头中的远心镜头与普通镜头的光路

普通镜头&#xff1a; 主光线与镜头光轴有角度&#xff0c;工件上下移动时&#xff0c;像的大小有变化。 FOV&#xff1e;镜头前端直径。 物方远心镜头&#xff1a; 物方主光线平行于光轴&#xff0c;物距发生改变时&#xff0c;像高不会发生改变&#xff0c;测得的物体尺寸大…

使用Docker部署Python Flask应用的完整教程

一、引言 Docker是一种开源的容器化平台&#xff0c;可以将应用程序及其依赖项打包成一个独立的容器&#xff0c;实现快速部署和跨平台运行。本文将详细介绍如何使用Docker来部署Python Flask应用程序&#xff0c;帮助开发者更高效地构建和部署应用。 二、准备工作 在开始之前…

Unexpected WSL error错误处理备忘

运行docker时提示下图错误&#xff0c;看了下WSL好像没啥问题&#xff0c;看网上有人说需要重置下网络&#xff0c;命令是netsh winsock reset&#xff0c;重置完后果然好了

前端uniapp列表下拉到底部加载下一页列表【下拉加载页面/带源码/实战】

目录 一. 图片1.2. 二.list.vue三.uni-load-more.vue最后 一. 图片 1. 2. 二.list.vue <template><view><!--列表--><scroll-view scroll-y"true" class"scroll-Y" :style"height: scrollviewHigh px;" lower-threshol…

js 将多张图片合并成一张图片

其实就是将两张图片地址根据canvas组合在一起&#xff0c;我放到项目中因为会存在跨域问题&#xff0c;所以将图片转化成base64&#xff0c;后面还会带随机值&#xff0c;这样可避免图片跨域错误&#xff0c;正常情况下可以直接将图片放到canvas里面。 灵感来源&#xff1a;js…

SpringBoot-配置文件properties/yml分析+tomcat最大连接数及最大并发数

SpringBoot配置文件 yaml 中的数据是有序的&#xff0c;properties 中的数据是无序的&#xff0c;在一些需要路径匹配的配置中&#xff0c;顺序就显得尤为重要&#xff08;例如在 Spring Cloud Zuul 中的配置&#xff09;&#xff0c;此时一般采用 yaml。 Properties ①、位…

@各大高校|亚洲诚信TrustAsia接入CARSI,四大福利活动重磅来袭!

亚洲诚信TrustAsia EduPKI在CARSI平台正式上线&#xff0c;为广大CARSI成员校师生提供SSL证书和专业的技术服务支持&#xff0c;守卫高校安全&#xff01; 伴随着人工智能、大数据、物联网等新一代数字化技术的迅猛发展&#xff0c;教育信息化2.0和智慧校园建设得到快速推进。但…