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

网站教程君临天下游戏网站开发者

网站教程,君临天下游戏网站开发者,高端品牌的优势,视频网站开发源码1. 简介 Spring国际化#xff08;Spring Internationalization#xff0c;简称i18n#xff09;是Spring框架提供的一种机制#xff0c;用于支持多语言的应用程序。它使得开发者能够轻松地在应用程序中实现不同语言的支持#xff0c;从而满足全球化的需求。通过Spring国际…1. 简介 Spring国际化Spring Internationalization简称i18n是Spring框架提供的一种机制用于支持多语言的应用程序。它使得开发者能够轻松地在应用程序中实现不同语言的支持从而满足全球化的需求。通过Spring国际化开发者可以将应用程序的文本、标签、消息等资源抽取出来并使用合适的语言文件进行翻译使得应用程序能够根据用户的语言偏好自动切换语言。这种机制不仅简化了多语言支持的实现还使得应用程序更加易于维护和扩展。在Spring国际化的实现中主要涉及到了MessageSource、LocaleResolver等核心组件它们共同协作实现了语言切换的功能。通过使用Spring国际化的API开发者可以方便地定义语言区域、加载资源文件、处理消息等操作从而快速构建多语言的应用程序。 2. API介绍 ApplicationContext 接口扩展了一个名为 MessageSource 的接口因此提供了国际化i18n功能。Spring 还提供了 HierarchicalMessageSource 接口该接口可以分层解析消息。这些接口共同构成了 Spring 实现消息解析的基础。这些接口定义的方法包括 String getMessage(String code, Object[] args, String default, Locale loc) 用于从 MessageSource 获取消息的基本方法。如果在指定的本地没有找到消息则使用默认消息。通过标准库提供的 MessageFormat 功能传入的任何参数都会成为替换值。 String getMessage(String code, Object[] args, Locale loc) 与前一种方法基本相同但有一点不同不能指定默认信息。如果找不到信息就会抛出 NoSuchMessageException 异常。 String getMessage(MessageSourceResolvable resolvable, Locale locale) 前面方法中使用的所有属性也都封装在一个名为 MessageSourceResolvable 的类中你可以使用该方法。 3. 国际化初始化 Spring容器ApplicationContext初始化过程中会从容器中查找MessageSource类型的Bean。并且该Bean的名称必须是 messageSource。如果找到了这样一个 Bean对前面方法的所有调用都会委托给消息源。如果没有找到消息源ApplicationContext 会尝试查找包含同名Bean的父类。如果找到了它就会使用该 bean 作为消息源。如果 ApplicationContext 无法找到任何消息源则会实例化一个空的 DelegatingMessageSource以便能够接受对上述方法的调用。 public abstract class AbstractApplicationContext {public void refresh() {// 初始化消息源initMessageSource();}/*** 初始化消息源。* 如果当前上下文中没有定义消息源则使用父级消息源。*/ protected void initMessageSource() {ConfigurableListableBeanFactory beanFactory getBeanFactory();if (beanFactory.containsLocalBean(MESSAGE_SOURCE_BEAN_NAME)) {this.messageSource beanFactory.getBean(MESSAGE_SOURCE_BEAN_NAME, MessageSource.class);// 使消息源知道父级消息源。if (this.parent ! null this.messageSource instanceof HierarchicalMessageSource hms hms.getParentMessageSource() null) {// 只有当父级消息源尚未注册时才将父上下文设置为父级消息源。hms.setParentMessageSource(getInternalParentMessageSource());}if (logger.isTraceEnabled()) {logger.trace(使用的消息源为 [ this.messageSource ]);}}else {// 使用空消息源以能够接受getMessage调用。DelegatingMessageSource dms new DelegatingMessageSource();dms.setParentMessageSource(getInternalParentMessageSource());this.messageSource dms;beanFactory.registerSingleton(MESSAGE_SOURCE_BEAN_NAME, this.messageSource);if (logger.isTraceEnabled()) {logger.trace(没有 MESSAGE_SOURCE_BEAN_NAME bean使用 [ this.messageSource ]);}} } } 4. 国际化配置 基于Spring环境 Bean(AbstractApplicationContext.MESSAGE_SOURCE_BEAN_NAME) public MessageSource messageSource() {ReloadableResourceBundleMessageSource messageSource new ReloadableResourceBundleMessageSource() ;// 这里设置的是basenamemessage是文件的前缀不是包messageSource.addBasenames(classpath:com/pack/main/databinder/message) ;return messageSource ; } 在包com/pack/main/databinder下建2个文件分别message_zh_CN.properties和message_en_US.properties。文件内容如下 message_zh_CN.properties #姓名必须填写 user.name.empty\u59D3\u540D\u5FC5\u987B\u586B\u5199 message_en_US.properties user.name.emptyname is required 调用 try (AnnotationConfigApplicationContext context new AnnotationConfigApplicationContext(AppConfig.class)) {// Locale.CHINA或者Locale.USSystem.out.println(context.getMessage(user.name.empty, null, Locale.CHINA)) ; } 基于SpringBoot环境 spring:messages:basename: message 注意你需要提供一个默认的message.properties文件 RestController RequestMapping(/i18n) public class I18NController {Resourceprivate ApplicationContext context ;GetMapping(/index)public String index() {return context.getMessage(user.name.empty, null, 默认消息, LocaleContextHolder.getLocale()) ;}} Locale从当前线程上下文中获取。该Locale是在DispatcherServlet中初始化的。 在接口调用时我们只需要指定Access-Language header 5. 其它配置 Spring为我们提供了一个便捷的类可以更方便的访问消息源项目中只需要注册如下bean Bean public MessageSourceAccessor messageSourceAccessor(MessageSource messageSource) {MessageSourceAccessor accessor new MessageSourceAccessor(messageSource) ;return accessor ; } 访问 Resource private MessageSourceAccessor accessor ; GetMapping(/index) public String index() {return accessor.getMessage(user.name.empty) ; }带占位符的消息访问 在消息文件中定义如下 #年龄的取值范围从{0}~{1} user.age.range\u5E74\u9F84\u7684\u53D6\u503C\u8303\u56F4\u4ECE{0}~{1} 访问 GetMapping(/index) public String index() {return accessor.getMessage(user.age.range, new Object[] {1, 100}) ; } 注Spring 还提供了一个ReloadableResourceBundleMessageSource 类。该变体支持相同的捆绑文件格式但比基于 JDK 的标准 ResourceBundleMessageSource 实现更灵活。特别是它允许从任何 Spring 资源位置而不仅仅是从类路径读取文件并支持捆绑属性文件的热重载同时在两者之间有效地缓存它们。
http://www.hkea.cn/news/14434696/

相关文章:

  • 网页制作和网站建设的区别微小旅行社能否做网站
  • 南宁企业建站系统多语言外贸网站制作
  • 做旅游网站会遇到什么问题软件开发公司app
  • 网站页面布局图网页策划方案
  • 网站设计用什么软件网站如何做微信支付
  • 微信公众号商城网站开发陕西百威建设监理有限司网站
  • dw个人网站制作教程做图片的网站
  • 互联网招聘网站排行wordpress 电子杂志
  • 有没有专门做平铺素材的网站网站创建的基本流程
  • 浙江网站备案wordpress 页码显示
  • 电子商务网站建设收益网站备案信息注销
  • 做那个网站销售产品比较好好看的ui网站页面设计
  • 怎么自己做网站赚钱百度指数分析大数据
  • 安丘做网站嘉祥县建设局官方网站
  • 青岛网站制作工具有做自由行包车的网站
  • 精仿手表网站怎么在淘宝上做网站
  • 网站开发和设计建设工程合同管理多少分及格
  • 京东商城官方旗舰店电商网站如何做seo
  • 扬州建设工程招聘信息网站石家庄做外贸的网站
  • python可以做网站动漫制作专业就业
  • 网站个人备案 企业备案重庆开县网站建设公司推荐
  • 网站公司好做吗广告设计与制作就业率
  • 网站建设制作人员招聘要求阐述网络营销策略的内容
  • 建设公司网站的必要性番禺网站建设多少钱
  • 免费的自建视频网站网站和管理系统的区别
  • 怎么打开文件做的网站怎么做网页赚钱
  • 无锡网站建设价格低wordpress ssd hdd
  • 简单的网站更新 关键词优化 关键词互联德州seo排名
  • 济南手机网站建设专业定制校园网站建设培训的心得体会
  • 建设注册中心网站首页网站设计与网站建设书店