Spring Boot – 国际化

在了解Spring Boot-国际化之前,我们必须知道国际化一般意味着什么。国际化是使某种事物国际化的行动或过程,这意味着使事物在任何地方都适用或可用。在本文中,我们将讨论Spring Boot 中的国际化。
什么是 Spring Boot 国际化?

Spring Boot-Internationalization 只不过是一个旨在构建 Spring 应用程序并使它们可供世界各地的用户使用的框架。每个用户都可能精通他们的语言。因此,这个框架使您的 Spring 应用程序可供所有人使用。 Spring Boot-Internationalization 有许多功能可以帮助所有程序员国际化他们的应用程序。
使用国际化概念的网站示例:

  • 法语亚马逊
  • 英文亚马逊

本主题的先决条件:

  • 对 Java 编程语言有很好的理解,如 Spring Boot 也使用 Java 库。
  • 扎实的 Spring Boot 框架知识。
  • 对术语的基本了解,例如国际化资源文件本地化区域设置将是一个优点。

Spring Boot的几个特点——国际化

  • 资源文件由本地化文本数据和其他数据组成,这在 Spring Boot 中使用。
  • 资源文件根据其包含的语言的本地代码命名。示例 - messages_en.properties 用于英语,messages_fr.properties 用于法语。
  • 要从资源文件中检索本地化文本数据,有一个名为 MessageSource 的接口。
  • LocaleResolver 是一个有助于识别用户当前语言的界面。

每当网络上出现 HTTP 请求时,LocaleChangeInterceptor 就会充当拦截器,根据请求参数更改用户的区域设置。
注意:区域设置只不过是用户的信息,例如他们的语言、地理区域等。

为什么使用 Spring Boot 国际化?

  • 方便使用
  • 全球范围
  • 更广阔的市场
  • 不同的用户(来自语言、文化等)可以在一处使用该应用程序。

Spring Boot 应用程序国际化的综合方法:

  1. 创建资源文件:正如我们所知,用户可能来自不同的地理区域并拥有不同的语言。因此,为每种语言创建单独的文件。这些文件包含键值格式数据,其中包含本地化数据。
  2. 消息源配置:现在配置消息源 Bean,以便正确加载确切的资源文件。
  3. 区域设置解析器的配置:Spring Boot 有许多区域设置解析器,例如 AcceptLanguageHeaderLocaleResolver 和 SessionLocalResolver。因此,请确保配置区域设置解析程序以轻松获取用户的区域设置。
  4. 检索本地化文本:使用消息从资源文件检索数据。最好的部分是我们可以从代码的任何部分检索数据。源接口
  5. 测试:最后也是最重要的事情是严格的测试。大多数时候,错误是不可避免的。因此,请确保测试代码的每个部分。特别是在用于选择语言的配置文件中。开发人员经常忘记检查预期输出与语言特定数据的匹配情况。

Spring Boot 国际化示例:
在实现代码之前,让我们看看 Spring Boot 国际化所需的所有依赖项:

<dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-test</artifactId>
         <scope>test</scope>
</dependency>


主程序:

@SpringBootApplication
public class InternationalizationApplication { 
  
    public static void main(String[] args) { 
        SpringApplication.run(InternationalizationApplication.class, args); 
    } 
  

创建资源文件
确保为应用程序支持的每种语言创建文件。

  • 对于英语 – messages_en.properties 文件。
  • 对于法语 – messages_fr.properties 文件。

您的文件可以包含以下属性:
对于英语:

Welcome_message=Welcome to the application
login_label=Login
username_label=username
password_label=password
login_button =Login

For French:

Welcome_message=Bienvenue dans 1 'application
login_label=Connexion
username_label=Nom d'utilisateur
password_label=Mot de passe
login_button =Connexion


在应用程序上下文文件中配置消息源和LocaleChangeInterceptor


<bean id="messageSource" 
      class="org.springframework.context.support.ResourceBundleMessageSource"> 
<property name="basenames" value="messages" /> 
</bean> 
<bean id="localeChangeInterceptor" 
      class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor"> 
<property name="paramName" value="locale" /> 
</bean>

配置消息源
现在配置消息源 bean 以加载资源文件。请注意,此步骤非常重要,因为此 bean 会加载基于用户区域设置的资源文件。您可以在您的配置类中实现所有这些。请参阅以下代码了解如何加载资源文件。

@Configuration
public class msgConfig 

@Bean
public MessageSource msgSource() 

    ResourceBundleMessageSource msgSource = new ResourceBundleMessageSource(); 
    msgSource.setBasenames("messages"); 
    return msgSource; 


上面的配置代码将加载声明为 messages_en.properties、messages_fr.properties 的资源文件以及您创建的任何语言的属性文件。

配置区域设置解析器
配置区域设置解析器以轻松获取用户的区域设置。这也可以在您的配置类中实现。正如我们所见,Spring Boot 有许多区域设置解析器。在这里,我们将实现 AcceptLanguageHeaderLocaleResolver。这有助于基于接受语言 HTTP 标头的区域设置。

@Configuration
public class LocaleConfiguration { 
@Bean
public LocaleResolver localeRes(){ 
    AcceptLanguageHeaderLocaleResolver localeResolver =new AcceptLanguageHeaderLocaleResolver(); 
    localeResolver.setDefaultLocale(Locale.English); 
    return localeResolver; 
    } 
    

如果接受语言标头找不到用户区域设置,上述配置设置将确保默认区域设置为英语。

检索本地化数据/文本
现在我们将实现 Message Source 接口,用于从资源文件中检索本地化数据。我们将从控制器类中检索数据。请注意,我们可以从代码的任何部分检索本地化文本。

@Controller
@RequestMapping("/SpringInternationalization") 
public class ControllerClass { 
@Autowired
private MessageSource msgSource; 
    
@GetMapping("/english") 
public String index() 

    Locale locale=LocaleContextHolder.getLocale(); 
    Stirng msg=msgSource.getMessage("Message",null,locale); 
    return "english"; 

}

上述控制器确保根据用户的区域设置从适当的资源文件中检索数据。这里 LocaleContextHolder 用于获取当前语言环境, getMessage() 方法用于获取键“Message”的本地化文本/数据。它基本上处理 Http 请求并生成所需的响应。

输出:
输出取决于用户的区域设置,无论用户是英语还是法语。

  •  如果用户的区域设置是英语,则输出将为英语
  • 如果用户的区域设置是法语,则输出将为法语
注意: 消息资源 Bean 确保根据用户的区域设置从资源文件中加载适当的文件。 AcceptLanguageHeaderLocaleResolver bean 是为了根据接受语言 HTTP 标头查找用户区域设置而实现的。因此,如果未找到此标头,将考虑默认语言。在这里,我们将英语作为默认语言。

结论
Spring Boot 国际化是一个工具,它可以影响您的应用程序在更广泛的受众和更广泛的市场中的应用。它所提供的全球影响力是开发者可以自豪的。重要的是它简化了创建多语言应用程序的过程。通常,对于开发应用程序的开发人员来说,为每种语言创建单独的或单独的应用程序将是一项乏味的工作。不同语言/文化/地理区域的用户现在可以以非常用户友好的方式访问他们的应用程序。