• Spring Boot国际化&&AcceptHeaderLocaleResolver 解析器


    国际化是一个使应用程序适应不同语言和区域而无需对源代码进行工程更改的过程。 用它来说,国际化是对本地化的准备。

    在本章中,将详细了解如何在Spring Boot中实现国际化。

    依赖

    需要Spring Boot Starter Web和Spring Boot Starter Thymeleaf依赖来在Spring Boot中开发Web应用程序。

    Maven

    1. <dependency>
    2. <groupId>org.springframework.bootgroupId>
    3. <artifactId>spring-boot-starter-webartifactId>
    4. dependency>
    5. <dependency>
    6. <groupId>org.springframework.bootgroupId>
    7. <artifactId>spring-boot-starter-thymeleafartifactId>
    8. dependency>

    Gradle

    1. compile('org.springframework.boot:spring-boot-starter-web')
    2. compile group: 'org.springframework.boot', name: 'spring-boot-starter-thymeleaf'

    LocaleResolver

    需要确定应用程序的默认Locale。在Spring Boot应用程序中添加LocaleResolver bean。

    1. @Bean
    2. public LocaleResolver localeResolver() {
    3. SessionLocaleResolver sessionLocaleResolver = new SessionLocaleResolver();
    4. sessionLocaleResolver.setDefaultLocale(Locale.US);
    5. return sessionLocaleResolver;
    6. }

    LocaleChangeInterceptor

    LocaleChangeInterceptor用于根据添加到请求的语言参数的值更改新的Locale

    1. @Bean
    2. public LocaleChangeInterceptor localeChangeInterceptor() {
    3. LocaleChangeInterceptor localeChangeInterceptor = new LocaleChangeInterceptor();
    4. localeChangeInterceptor.setParamName("language");
    5. return localeChangeInterceptor;
    6. }

    为了起到这种作用,需要将LocaleChangeInterceptor添加到应用程序的注册表拦截器中。 配置类应扩展WebMvcConfigurerAdapter类并覆盖addInterceptors()方法。

    1. @Override
    2. public void addInterceptors(InterceptorRegistry registry) {
    3. registry.addInterceptor(localeChangeInterceptor());
    4. }

    消息源

    默认情况下,Spring Boot应用程序从类路径下的src/main/resources文件夹中获取消息源。 缺省语言环境消息文件名应为message.properties,每个语言环境的文件应命名为messages_XX.properties“XX”表示区域代码。

    应将所有消息属性设置为键值对。 如果在语言环境中找不到任何属性,则应用程序将使用messages.properties 文件中的默认属性。

    默认的messages.properties 如下所示 -

    1. welcome.text=Hi Welcome to Everyone

    中文对应的属性文件:message_zh.properties 如下所示 -

    welcome.text=大家好
    

    HTML文件

    在HTML文件中,使用语法#{welcome.text}显示属性文件中的消息。

    1. <h1 th:text = "#{welcome.text}">h1>

    HTML

    完整的代码如下

    Maven构建文件 - pom.xml -

    1. <project xmlns="http://maven.apache.org/POM/4.0.0"
    2. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    3. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
    4. http://maven.apache.org/xsd/maven-4.0.0.xsd">
    5. <modelVersion>4.0.0modelVersion>
    6. <groupId>com.yiibaigroupId>
    7. <artifactId>springboot_internationalartifactId>
    8. <version>0.0.1-SNAPSHOTversion>
    9. <packaging>jarpackaging>
    10. <name>demoname>
    11. <description>Demo project for Spring Bootdescription>
    12. <parent>
    13. <groupId>org.springframework.bootgroupId>
    14. <artifactId>spring-boot-starter-parentartifactId>
    15. <version>1.5.8.RELEASEversion>
    16. <relativePath />
    17. parent>
    18. <properties>
    19. <project.build.sourceEncoding>UTF-8project.build.sourceEncoding>
    20. <project.reporting.outputEncoding>UTF-8project.reporting.outputEncoding>
    21. <java.version>1.8java.version>
    22. properties>
    23. <dependencies>
    24. <dependency>
    25. <groupId>org.springframework.bootgroupId>
    26. <artifactId>spring-boot-starter-webartifactId>
    27. dependency>
    28. <dependency>
    29. <groupId>org.springframework.bootgroupId>
    30. <artifactId>spring-boot-starter-testartifactId>
    31. <scope>testscope>
    32. dependency>
    33. <dependency>
    34. <groupId>org.springframework.bootgroupId>
    35. <artifactId>spring-boot-starter-thymeleafartifactId>
    36. dependency>
    37. dependencies>
    38. <build>
    39. <plugins>
    40. <plugin>
    41. <groupId>org.springframework.bootgroupId>
    42. <artifactId>spring-boot-maven-pluginartifactId>
    43. plugin>
    44. <plugin>
    45. <groupId>org.apache.maven.pluginsgroupId>
    46. <artifactId>maven-compiler-pluginartifactId>
    47. <configuration>
    48. <source>1.8source>
    49. <target>1.8target>
    50. configuration>
    51. plugin>
    52. plugins>
    53. build>
    54. project>

    XML

    Gradle构建文件 – build.gradle -

    1. buildscript {
    2. ext {
    3. springBootVersion = '1.5.8.RELEASE'
    4. }
    5. repositories {
    6. mavenCentral()
    7. }
    8. dependencies {
    9. classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
    10. }
    11. }
    12. apply plugin: 'java'
    13. apply plugin: 'eclipse'
    14. apply plugin: 'org.springframework.boot'
    15. group = 'com.yiibai'
    16. version = '0.0.1-SNAPSHOT'
    17. sourceCompatibility = 1.8
    18. repositories {
    19. mavenCentral()
    20. }
    21. dependencies {
    22. compile('org.springframework.boot:spring-boot-starter-web')
    23. compile group: 'org.springframework.boot', name: 'spring-boot-starter-thymeleaf'
    24. testCompile('org.springframework.boot:spring-boot-starter-test')
    25. }

    Spring Boot应用程序主类文件如下 -

    1. package com.yiibai.demo;
    2. import org.springframework.boot.SpringApplication;
    3. import org.springframework.boot.autoconfigure.SpringBootApplication;
    4. @SpringBootApplication
    5. public class DemoApplication {
    6. public static void main(String[] args) {
    7. SpringApplication.run(DemoApplication.class, args);
    8. }
    9. }

    Java

    控制器- ViewController 类文件如下 -

    1. package com.yiibai.demo.controller;
    2. import org.springframework.stereotype.Controller;
    3. import org.springframework.web.bind.annotation.RequestMapping;
    4. @Controller
    5. public class ViewController {
    6. @RequestMapping("/locale")
    7. public String locale() {
    8. return "locale";
    9. }
    10. }

    Java

    配置类支持国际化

    1. package com.yiibai.demo;
    2. import java.util.Locale;
    3. import org.springframework.context.annotation.Bean;
    4. import org.springframework.context.annotation.Configuration;
    5. import org.springframework.web.servlet.LocaleResolver;
    6. import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
    7. import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
    8. import org.springframework.web.servlet.i18n.LocaleChangeInterceptor;
    9. import org.springframework.web.servlet.i18n.SessionLocaleResolver;
    10. @Configuration
    11. public class Internationalization extends WebMvcConfigurerAdapter {
    12. @Bean
    13. public LocaleResolver localeResolver() {
    14. SessionLocaleResolver sessionLocaleResolver = new SessionLocaleResolver();
    15. sessionLocaleResolver.setDefaultLocale(Locale.US);
    16. return sessionLocaleResolver;
    17. }
    18. @Bean
    19. public LocaleChangeInterceptor localeChangeInterceptor() {
    20. LocaleChangeInterceptor localeChangeInterceptor = new LocaleChangeInterceptor();
    21. localeChangeInterceptor.setParamName("language");
    22. return localeChangeInterceptor;
    23. }
    24. @Override
    25. public void addInterceptors(InterceptorRegistry registry) {
    26. registry.addInterceptor(localeChangeInterceptor());
    27. }
    28. }

    Java

    消息源 - messages.properties 如下所示 -

    welcome.text = Hi Welcome to Everyone
    

    消息源 - messages_cn.properties 如下所示 -

    welcome.text = 大家好
    

    HTML文件locale.html 放在类路径的 templates 目录下,如图所示 -

    1. html>
    2. <html>
    3. <head>
    4. <meta charset = "UTF-8"/>
    5. <title>SpringBoot国际化title>
    6. head>
    7. <body>
    8. <h1 th:text = "#{welcome.text}">h1>
    9. body>
    10. html>

    HTML

    创建可执行的JAR文件,并使用以下Maven或Gradle命令运行Spring Boot应用程序

    对于Maven,请使用以下命令 -

    mvn clean install
    

    Shell

    “BUILD SUCCESS” 之后,在target目录下找到JAR文件。

    对于Gradle,请使用以下命令 -

    1. gradle clean build

    Shell

    在“BUILD SUCCESSFUL”之后,在build/libs 目录下找到JAR文件。

    现在,使用如下所示的命令运行JAR文件 -

    1. java -jar target\springboot_international-0.0.1-SNAPSHOT.jar

    Java

    应用程序已在Tomcat端口8080上启动。

    现在在Web浏览器中访问URL => http://localhost:8080/locale ,可以看到以下输出 -

    访问URL => http://localhost:8080/locale?language=cn 将看到如下所示结果 -

  • 相关阅读:
    数据结构—归并排序-C语言实现
    电商通用型商品中心设计
    python 构建数组的方法
    基于人工势场法的二维平面内无人机的路径规划的matlab仿真,并通过对势场法改进避免了无人机陷入极值的问题
    解决方案中word中分节符的使用
    深入浅出理解分布式一致性Paxos算法
    【管理咨询宝藏88】556页!公司经营分析内部培训
    Matlab:线性代数
    拿捏大厂面试,2022最新版的Java面试突击班手册
    3D NAND 前沿
  • 原文地址:https://blog.csdn.net/You_are_hanson/article/details/126324665