JAVA实现多语言
国际化是产品、应用程序或文档内容的设计和开发,它可以为不同文化、地区或语言的目标受众轻松实现本地化。国际化(Internationalization)通常用英文写成 i18n,其中 18 是英文单词中 i 和 n 之间的字母数。
任何一个面向全世界的软件都会面临多语言国际化的问题,尤其是跨境电商行业,在做自研系统必不可少的要实现多语言功能,就是在数据展示给用户之前,替换成用户可识别的语言,这里以spring i18n 国际化来介绍一下。 SpringBoot下application.yml
basename :以逗号分隔的基名列表(本质上是一个完全限定的类路径位置),每个基名都遵循 ResourceBundle 约定,对基于斜杠的位置提供宽松的支持,它将从类路径根目录解析。
cache-duration :加载的资源包文件缓存的持续时间。如果没有设置,捆绑包将被永久缓存。如果没有指定持续时间后缀,将使用秒。 spring: # 资源信息 messages: encoding: utf-8 # 国际化资源文件路径(配置文件路径),多模块也可以用逗号分隔 basename: i18n/messages将异常信息写入i18n资源文件
messages.properties exception.name.can.not.null=exception name can not null,the name is {0} exception.insert=exception insert
messages_zh_CN.properties exception.name.can.not.null=用户名不能为空,用户名为:{0} exception.insert=新增异常工具类 I18nUtils@Component @Slf4j public class I18nUtils { // 如果当前bean不加@Component注解,则messageSource无法注入,始终为null private static MessageSource messageSource; @Autowired public void setMessageSource(MessageSource messageSource) { I18nUtils.messageSource = messageSource; } /** * 解析code对应的信息进行返回,如果对应的code不能被解析则抛出异常NoSuchMessageException * * @param code 需要进行解析的code,对应资源文件中的一个属性名 * @param args 当对应code对应的信息不存在时需要返回的默认值 * @return 国际化翻译值 */ public static String i18n(String code, Object... args) { return messageSource.getMessage(code, args, LocaleContextHolder.getLocale()); } /** * 解析code对应的信息进行返回,如果对应的code不能被解析则返回默认信息defaultMessage。 * * @param code 需要进行解析的code,对应资源文件中的一个属性名 * @param defaultMessage 当对应code对应的信息不存在时需要返回的默认值 * @param args 需要用来替换code对应的信息中包含参数的内容,如:{0},{1,date},{2,time} * @return 对应的Locale */ public static String i18nOrDefault(String code, String defaultMessage, Object... args) { return messageSource.getMessage(code, args, defaultMessage, LocaleContextHolder.getLocale()); } /** * 因为i18n方法如果获取不到对应的键值,会抛异常NoSuchMessageException * 本方法是对i18n方法的封装。当报错时并不抛出异常,而是返回source * * @param source 模板 * @param args 参数 * @return 返回I18n(正常结束)或者source(抛出异常) * @see #i18n(String, Object...) */ @NonNull public static String tryI18n(@NonNull String source, @NonNull Object... args) { String res; try { res = i18n(source, args); } catch (Exception ignored) { res = source; } return res; } } 自定义异常@RestControllerAdvice @Slf4j public class GlobalExceptionHandler { @ExceptionHandler(CommonException.class) public ApiResponse
唐朝为什么被划分为初盛中晚四个阶段?唐朝(618年907年),中国历史上继隋朝之后的大一统中原王朝,共历二十一帝,享国二百八十九年。唐朝是当时世界上最强盛的国家之一,疆域空前辽阔,接纳各国学习交流,经济社会文化艺术等
毛主席曾3次参观故宫城墙,却不肯踏进故宫半步,有什么深意?1919年,毛主席为革命东奔西走时,他曾首次到达过北平。当时的北平城虽然没有被日本人占领,但是城墙内外非常萧条,人们的精神面貌也都比较憔悴。早在大清灭亡以后,整个故宫因为年久失修而
援朝战争中美国有15个国家支持,只有一个国家支持中国,他是谁?抗美援朝战争中,15个国家跟随美国组成联合国军,政治势力可谓是一边倒。在这种情况下,却有一个国家顶住国际舆论的鬼魅风向,选择和新中国站在了一个阵营。这是哪个国家呢?1950年朝鲜内
全面认识和理解国家推出的保交楼贷款近日,保交楼贷款成为房地产救市中一条比较敏感的利好政策,如何正确看待保交楼贷款,也是对当下楼市的实情做出正确的判断。解释一下,为什么要出台保交楼贷款政策?当购房者和开发商签订商品房
以中国式现代化全面推进中华民族伟大复兴10月16日,中国共产党第二十次全国代表大会在北京人民大会堂开幕。这是习近平李克强栗战书汪洋王沪宁赵乐际韩正胡锦涛在主席台上。新华社发新华社电凝心聚力擘画复兴新蓝图,团结奋进创造历
赵心童资格赛出局!中国德比战12赢梁文博10月16日,2022年世界斯诺克巡回赛排名赛北爱尔兰公开赛展开正赛阶段的角逐。首日陆续进行延期至正赛期间进行的世界排名前16的种子选手的资格赛,中国军团两大名将赵心童和颜丙涛先后
中国队大爆发!连得3金,2人成双冠王,9人晋升为世锦赛冠军北京时间10月16日,2022开罗射击世锦赛结束了男子女子10米气手枪与男子女子10米气步枪4个团体赛事,结果中国队表现出色,拿下了3金1银的优异成绩。在成年组,中国队已经拿下了5
一个穴位7大功效,心疾患乳房病等问题,灸灸拍拍都有效果我们身上有着遍布全身的经络,和穴位,这些经络穴位能够帮助我们治愈疾病,使得身体健康也能起到养生的作用,那么在经络养生中艾灸膻中的作用有什么?之前有朋友问过说为什么她艾灸膻中穴很舒服
中医经方临床小记肾着汤合真武汤用于腰脊痛患者是做养生按摩的平时也较劳累,久有腰疼,断续治疗,汤剂丸剂,针灸,艾灸,都能缓解一时,近来腰疼复发较前加重,之前的治疗方法不明显,经介绍网诊腰困疼无力,重时不能直起,其疼如折,平
补充维生素服用保健品做中医理疗这届年轻人加入养生大军便利店货架上的一整根人参水年轻人的养生茶兰州晚报讯10月13日是世界保健日。在很多人眼里,养生保健一度是中老年人的专利。但今时已不同往日,越来越多的年轻人也开始重视身体健康,无论是
科普午睡的三个误区正确的午睡方式具有消除困乏增强记忆力预防冠心病调节心情保护心脏提高免疫力等好处,但错误的午睡方法会危害我们的健康。午睡有三个误区第一就是想睡多久就睡多久,很多人夜里睡不着,中午睡不