当前位置: 首页 > news >正文

北京代建网站微信网站定制

北京代建网站,微信网站定制,wordpress修改媒体库的路径为相对路径,公众号开发培训前言 最新第一次在做SpringBoot的国际化#xff0c;网上搜了很多相关的资料#xff0c;都是一些简单的使用例子#xff0c;达不到在实际项目中使用的要求#xff0c;因此本次将结合查询的资料以及自己的实践整理出SpringBoot配置国际化的流程。 SpringBoot国际化 i…前言 最新第一次在做SpringBoot的国际化网上搜了很多相关的资料都是一些简单的使用例子达不到在实际项目中使用的要求因此本次将结合查询的资料以及自己的实践整理出SpringBoot配置国际化的流程。 SpringBoot国际化 i18n是国际化internationalization的缩写数字18代表了国际化这个单词中间的字母数量。类似这样的缩写还有k8skubernetes等 Spring Boot国际化是指在Spring Boot应用中实现多语言支持的功能。通过国际化应用可以根据用户的语言偏好自动切换显示的语言版本从而提供贴近用户的界面和文本信息。 SpringBoot官方国际化支持文档7.5. Internationalization请点击我 由于SpringBoot默认集成国际化因此本次实践也是基于SpringBoot的自动配置来进行。 准备环境 本次实践我使用的环境或工具版本如下 SpringBoot 3.0.6、IDEA社区版2023.1、OpenJDK 17 引入依赖 !-- web中提供国际化支持 -- dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactIdversion3.0.6/version /dependency !-- 参数校验 -- dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-validation/artifactIdversion3.0.6/version /dependency自定义配置 AutoConfigureBefore(WebMvcAutoConfiguration.class) public class LocaleConfig {/*** 国际化消息源*/Resourceprivate MessageSource messageSource;/*** 区域解析器供消息源MessageSource根据不同的区域java.util.Locale读取不同的properties文件** return {code LocaleResolver}*/Beanpublic LocaleResolver localeResolver() {AcceptHeaderLocaleResolver localeResolver new AcceptHeaderLocaleResolver();// 设置默认区域简体中文localeResolver.setDefaultLocale(Locale.SIMPLIFIED_CHINESE);return localeResolver;}/*** 使用自定义LocalValidatorFactoryBean* 设置Spring国际化消息源用户jsr303验证信息实现自定义国际化**/Beanpublic Validator getValidator() {LocalValidatorFactoryBean bean new LocalValidatorFactoryBean();bean.setValidationMessageSource(messageSource);return bean;} } java.util.Locale Locale对象表示特定的地理、政治或文化区域用以区分区域。 org.springframework.web.servlet.i18n.AcceptHeaderLocaleResolver通过请求头Accept-Language的值zh-CN、en-US等来改变当前的区域设置 org.springframework.context.MessageSource用于解析消息的策略接口支持此类消息的参数化和国际化。根据Locale区域读取不同的properties国际化文件 AutoConfigureBefore(WebMvcAutoConfiguration.class)由于WebMvcAutoConfiguration会注入一个默认的LocaleResolver因此自定义的LocaleConfig要在WebMvcAutoConfiguration之前先执行且beanName是localeResolver目的就是用我们配置的LocaleConfig替换掉WebMvcAutoConfiguration自动注入的LocaleConfig。 以下代码片段是WebMvcAutoConfiguration自动注入LocaleResolver 的方法 /** * DispatcherServlet.LOCALE_RESOLVER_BEAN_NAME的值就是localeResolver */ Override Bean ConditionalOnMissingBean(name DispatcherServlet.LOCALE_RESOLVER_BEAN_NAME) public LocaleResolver localeResolver() {if (this.webProperties.getLocaleResolver() WebProperties.LocaleResolver.FIXED) {return new FixedLocaleResolver(this.webProperties.getLocale());}AcceptHeaderLocaleResolver localeResolver new AcceptHeaderLocaleResolver();localeResolver.setDefaultLocale(this.webProperties.getLocale());return localeResolver; }国际化文件 在工程resources目录下新建目录i18n在i18n目录下新建三个国际化文件 messages.properties、 messages_en_US.properties、 messages_zh_CN.properties zh-CN简体中文 en-US英语 在不配置默认的区域情况下当没有找到匹配的语言文件时会读取默认的messages.properties。 如何快速编辑资源包.properties文件 配置application.yml spring:## note: ---------------- 国际化配置 ----------------messages:basename: i18n/messagesfallback-to-system-locale: falsebasename基名多个基名以逗号分隔实质上是完全限定的类路径位置每个基名都遵循 ResourceBundle 约定对基于斜杠的位置提供了宽松的支持。如果它不包含包限定符例如“org.mypackage”则将从类路径根目录解析它。 基名可以理解为前缀默认是从classpath根路径下找配置的路径可以用斜杠/也可以用.即i18n/messages或i18n.messages然后messages就是国际化文件的前缀messages.properties就是默认国际化文件。 fallback-to-system-locale如果未找到特定区域设置的文件是否回退到系统区域设置。如果关闭此功能则唯一的回退将是默认文件。就是我想要的区域语言文件没有的时候就从系统中解析系统的区域以系统的区域再找一次文件找到就返回系统区域文件如果找不到就返回默认的文件。 国际化消息工具类 Slf4j Component public class LocaleUtil implements ApplicationContextAware {private static MessageSource messageSource;Overridepublic void setApplicationContext(ApplicationContext applicationContext) throws BeansException {LocaleUtil.messageSource applicationContext.getBean(MessageSource.class);}/*** 获取国际化message** param code code* param args 占位参数* param defaultMessage 默认值* return 国际化文本*/public static String getMessage(String code, Nullable Object[] args, Nullable String defaultMessage) {return messageSource.getMessage(code, args, defaultMessage, LocaleContextHolder.getLocale());}/*** 获取国际化message** param code code* param args 占位参数* param defaultMessage 默认值* param locale 地区* return 国际化文本*/public static String getMessage(String code, Nullable Object[] args, Nullable String defaultMessage, Locale locale) {return messageSource.getMessage(code, args, defaultMessage, locale);}/*** 获取国际化message** param code code* param defaultMessage 默认值* return 国际化文本*/public static String getMessage(String code, Nullable String defaultMessage) {return messageSource.getMessage(code, null, defaultMessage, LocaleContextHolder.getLocale());}封装国际化文本的读取接口主要方便在代码中使用不需要每次Autowired注入MessageSource来使用。 国际化使用 异常提示国际化 在业务代码中业务异常我们通常是抛出异常由统一异常处理来根据异常code和message封装成统一的返回对象国际化这里我们也是一样code不变message改成国际化消息的key。 定义业务异常对象 public class BussinessException extends RuntimeException {private String code;public BussinessException (String code, String message) {super(message);this.code code;} }定义异常类型枚举 public enum ErrorCodeEnum {DEMO_ERROR(99999, i18n.user.check.username.err);/*** 提示*/private final String message;/*** 状态吗*/private final String code;ErrorCodeEnum (String code, String message) {this.code code;this.message message;}/*** 获取国际化错误提示** return 错误提示文本*/public String getMessage() {return LocaleUtil.getMessage(message, message);}/*** 获取国际化错误提示** param args 错误提示参数* return 错误提示文本*/public String getMessage(Object[] args) {return LocaleUtil.getMessage(message, args, message);}/*** 获取错误code** return 错误code*/public Integer getCode() {return code;} }国际化文件配置 在国际化文件都配置上i18n.user.check.username.err不同语言的翻译 ## messages.properties i18n.user.check.username.err用户名校验不通过## messages_en_US.properties i18n.user.check.username.errThe username does not comply with regulations## messages_zh_CN.properties i18n.user.check.username.err用户名不符合规范 业务逻辑校验使用场景之一 /*** 校验用户名是否符合规范** param userName 用户名* return {code String}*/public String checkUserName(String userName) {if (StringUtils.isBlank(userName)) {throw new BussinessException(ErrorCodeEnum.DEMO_ERROR.getCode(), ErrorCodeEnum.DEMO_ERROR.getMessage());}// check logic code ...return userName;}参数校验国际化 SpringBoot项目我们在做参数校验通常会使用JSR303、jakarta.validation参数校验快速失败。 import jakarta.validation.constraints.NotEmpty; import lombok.Data;Data public class TestReq {NotEmptyprivate String userName; }我这里是导入开头的spring-boot-starter-validation依赖就可以使用hibernate-validator给我们提供的常用校验注解的国际化。 查看NotEmpty注解源码message默认就读国际化文件里jakarta.validation.constraints.NotEmpty.message Documented Constraint(validatedBy { }) Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER, TYPE_USE }) Retention(RUNTIME) Repeatable(List.class) public interface NotEmpty {String message() default {jakarta.validation.constraints.NotEmpty.message};Class?[] groups() default { };Class? extends Payload[] payload() default { };/*** Defines several {code NotEmpty} constraints on the same element.** see NotEmpty*/Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER, TYPE_USE })Retention(RUNTIME)Documentedpublic interface List {NotEmpty[] value();} }这里就贴ValidationMessages.properties的jakarta.validation.constraints.NotEmpty.message其他文件大家自行查看。 jakarta.validation.constraints.NotEmpty.message must not be empty自定义校验错误提示信息 当我们不想使用hibernate-validator给我们提供的默认提示信息时我们可以自定义自己的错误提示信息。这里就复用前面配置的i18n.user.check.username.err Data public class TestReq {NotEmpty(message {i18n.user.check.username.err})private String userName; }如此在Accept-Languageen-US即我想返回的信息是英文参数校验不通过时提示的不是must not be empty而是我们自定义的The username does not comply with regulations。 结语 时间有限国际化的实践流程截图没提供大家根据文中的操作步骤也可以完成国际化的demo后续有时间再完善大家也期待下一篇的源码解读吧。 文中如有描述不清楚、读者不理解意思的地方大家评论区打出我来完善哈。
http://www.zqtcl.cn/news/138983/

相关文章:

  • 电商网站制作价格和硕网站建设
  • 深圳市门户网站建设哪家好微信小程序案例源码
  • 信息产业部icp备案中心网站asp网站制作教程
  • 品牌网站建设的意义建站公司联系电话
  • 网站建设 备案什么意思哪里有做效果图的网站
  • 教你免费申请个人网站html网站建设方案
  • 网站运营方案怎么写?在线制作手机网站
  • 微信html5模板网站哪个网站有手机
  • 网站知名度网站广东省备案系统
  • 柯桥区网站建设湖南人文科技学院
  • 建设一个网站需要哪些福田企业网站推广哪个好
  • 网站外链建设的15个小技巧中国农业建设中心网站
  • 交易平台网站怎么做wordpress 置顶 函数
  • 义乌市场官方网站jsp做就业网站
  • 推荐网站在线看兄弟们企业概况简介
  • 软装设计方案网站网站制作排名优化
  • 网站前端模板专业建站报价
  • 站长工具星空传媒怎么做游戏网站编辑
  • 大兴手机网站建设深圳小程序开发公司
  • c 大型网站开发案例电销系统线路
  • 鸿扬家装网站建设谈谈对seo的理解
  • 七米网站建设做网站也分内存大小的吗
  • 丝足网站的建设南宁关键词排名公司
  • 上饶商城网站建设亚马逊海外购官方网
  • 做网站代理商好赚吗高端品牌男鞋有哪些
  • 农产品网站建设及优化项目商务网站建设 视频
  • 北京兼职做网站建设百度app平台
  • 网站建设头部代码网站怎么做咨询
  • 网站运营 网站建设北京公司网站制作要多少钱
  • 郑州看妇科最好的医院是哪里南宁百度seo软件