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

网站开发流程书籍百度浏览器极速版

网站开发流程书籍,百度浏览器极速版,常用的网站有哪些,手机网站设计宽度1. 简介 Spring国际化(Spring Internationalization,简称i18n)是Spring框架提供的一种机制,用于支持多语言的应用程序。它使得开发者能够轻松地在应用程序中实现不同语言的支持,从而满足全球化的需求。通过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() ;// 这里设置的是basename,message是文件的前缀(不是包)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.empty=name 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.tj-hxxt.cn/news/48671.html

相关文章:

  • 网站需要收集什么建站资源推广平台排名
  • 苏州seo推广优化seo怎么刷排名
  • 唐山建设集团网站如何进行品牌营销
  • 个人网站建设 免费微信朋友圈广告如何投放
  • 电脑系统做的好的网站好十大放黄不登录不收费
  • 北京医疗机构网站前置审批需要的材料有哪些互联网seo是什么
  • 做网站高手电商培训机构排名
  • 网站建设w亿码酷1流量订制软件推广方案经典范文
  • 学校网站怎么做的好处网络推广有哪些渠道
  • 国外创意包装设计欣赏郑州seo外包顾问热狗
  • 网站如何做线上推广灯塔seo
  • 真正学做网站要多久新站seo优化快速上排名
  • wordpress建视频网站可以吗苏州网站外包
  • 制作网页怎么插入图片上海专业的seo推广咨询电话
  • 合肥市有做网站的公司吗舆情报告范文
  • 长春电商网站建设公司排名seo排名赚钱
  • 天地做网站如何做好一个营销方案
  • 服务器被攻击怎么办滨州seo排名
  • 做网站绘制蓝图的步骤南昌seo建站
  • 做网站开发要学什么软件精品成品网站源码
  • 两个网站链接怎么做欧洲网站服务器
  • 网站维护更新费用深圳推广公司有哪些
  • 北仑网站建设培训学校nba最新消息交易情况
  • 饰品网站模版百度统计怎么用
  • 南开建设网站企业网站模板源码
  • html做网站的原则深圳sem竞价托管
  • 服装网站banner怎么做西安疫情最新通知
  • 可以做mc图片的网站2345网址导航下载桌面
  • u盘搭建网站开发环境方法做网站的软件
  • 油气集输毕业设计代做网站企业网络营销的模式有哪些