• Spring MVC 中的国际化和本地化


    Spring MVC 中的国际化和本地化

    国际化(Internationalization,简称i18n)和本地化(Localization,简称l10n)是构建多语言应用程序的重要概念。Spring MVC提供了丰富的支持,使开发人员能够轻松地处理国际化和本地化需求。本文将介绍Spring MVC中如何处理国际化和本地化,并提供示例代码。

    在这里插入图片描述

    什么是国际化和本地化

    • 国际化(Internationalization - i18n): 国际化是指设计和开发应用程序,以便能够轻松地适应不同的语言和地区。这包括将文本、日期、时间、货币等内容本地化,以适应不同的文化习惯。

    • 本地化(Localization - l10n): 本地化是指将应用程序的界面和内容适应特定的语言和地区。这包括翻译文本、调整日期和时间格式、使用本地货币符号等,以提供更符合用户期望的用户体验。

    Spring MVC 中的国际化

    Spring MVC通过以下方式支持国际化:

    1. 资源文件: Spring MVC允许您创建包含不同语言版本的资源文件。这些资源文件包括消息源(message source)、日期时间格式、货币格式等。不同的语言和地区将有不同的资源文件。

    2. Locale 解析: Spring MVC通过LocaleResolver接口来解析客户端请求的语言和地区信息。默认情况下,它使用Accept-Language标头来确定客户端的首选语言,但您也可以自定义LocaleResolver以适应特定需求。

    3. 消息源: Spring MVC提供了MessageSource接口来加载和管理资源文件。您可以在代码中调用MessageSource来获取本地化的文本。

    4. 标签库: Spring MVC提供了JSTL标签库和Thymeleaf等视图技术,使您能够轻松地在视图中本地化文本。

    创建 Spring MVC 项目

    首先,确保您已经安装了Java开发环境和Maven。接下来,您可以使用Spring Initializer创建一个新的Spring MVC项目。在https://start.spring.io/上选择您的项目配置,然后生成项目并下载。

    添加 Spring Web 和 Thymeleaf 依赖

    在生成的项目中,您需要添加Spring Web和Thymeleaf的依赖。在pom.xml文件中,确保以下依赖项已经添加:

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

    这将包括Spring MVC和Thymeleaf所需的所有依赖。

    配置资源文件

    src/main/resources目录下,创建一个名为messages.properties的资源文件,用于存储默认的国际化消息:

    greeting.message=Hello, World!
    
    • 1

    src/main/resources目录下,再创建一个名为messages_fr.properties的资源文件,用于存储法语的国际化消息:

    greeting.message=Bonjour, le Monde!
    
    • 1

    配置国际化解析器

    在Spring MVC中配置国际化解析器非常简单。在src/main/java/com/example/demo包中创建一个名为WebConfig的配置类:

    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.web.servlet.LocaleResolver;
    import org.springframework.web.servlet.config.annotation.EnableWebMvc;
    import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
    import org.springframework.web.servlet.i18n.AcceptHeaderLocaleResolver;
    
    import java.util.Locale;
    
    @Configuration
    @EnableWebMvc
    public class WebConfig implements WebMvcConfigurer {
    
        @Bean
        public LocaleResolver localeResolver() {
            AcceptHeaderLocaleResolver resolver = new AcceptHeaderLocaleResolver();
            resolver.setDefaultLocale(Locale.US); // 设置默认语言
            return resolver;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    在上述代码中,我们创建了一个WebConfig配置类,用于配置国际化解析器。AcceptHeaderLocaleResolver解析了客户端请求的Accept-Language标头,以确定客户端的首选语言。您可以使用resolver.setDefaultLocale()来设置默认语言。

    创建控制器

    src/main/java/com/example/demo包中创建一个名为HelloController的控制器类:

    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.context.MessageSource;
    import org.springframework.context.i18n.LocaleContextHolder;
    import org.springframework.stereotype.Controller;
    import org.springframework.ui.Model;
    import org.springframework.web.bind.annotation.GetMapping;
    
    @Controller
    public class HelloController {
    
        private final MessageSource messageSource;
    
        @Autowired
        public HelloController(MessageSource messageSource) {
            this.messageSource = messageSource;
        }
    
        @GetMapping("/hello")
        public String hello(Model model) {
            String greeting = messageSource.getMessage("greeting.message", null, LocaleContextHolder.getLocale());
            model.addAttribute("greeting", greeting);
            return "hello";
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

    在上述代码中,我们创建了一个HelloController,它注入了MessageSource用于获取本地化的文本。在hello方法中,我们使用messageSource.getMessage()来获取消息,并将其添加到模型中。

    创建 Thymeleaf 模板

    src/main/resources/templates目录下,创建一个名为hello.html的Thymeleaf模板:

    DOCTYPE html>
    <html xmlns:th="http://www.thymeleaf.org">
    <head>
        <meta charset="UTF-8">
        <title>Hello Spring MVCtitle>
    head>
    <body>
        <h1 th:text="${greeting}">h1>
    body>
    html>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    在上述模板中,我们使用Thymeleaf的th:text属性来渲染文本。

    运行应用程序

    现在,您可以运行应用

    程序了。使用Maven命令:

    mvn spring-boot:run
    
    • 1

    您的Spring MVC应用程序将启动并运行在默认端口(通常是8080)上。

    访问国际化页面

    使用浏览器访问http://localhost:8080/hello,您将看到一个包含"Hello, World!"或"Bonjour, le Monde!"的页面,具体取决于您的浏览器设置的首选语言。

    总结

    本文介绍了如何在Spring MVC中处理国际化和本地化需求。Spring MVC提供了丰富的支持,包括资源文件、国际化解析器、消息源和标签库,使开发人员能够轻松地构建多语言应用程序。

    以上是一个简单的示例,演示了如何在Spring MVC中进行国际化和本地化处理。在实际应用中,您可以创建更多的资源文件,并根据需求调整配置和模板。希望这篇文章对您有所帮助,让您更好地理解Spring MVC中的国际化和本地化处理。

  • 相关阅读:
    现货伦敦金分析中如何应用支撑与压力位
    C++类和对象(四) (构造函数 && 析构函数)
    Go语言 rand(随机数)包
    uniapp html变量 直接输出html
    Web基础与http协议
    Spring与Dubbo的整合
    随笔-只是普通人
    SpringBoot+VUE3前后端分离-【支付宝支付】
    基于javaweb谣言平台系统
    码农跃迁三角色:程序员、技术主管与架构师
  • 原文地址:https://blog.csdn.net/2301_77835649/article/details/133440914