乐闻世界logo
搜索文章和话题

How does Spring Boot handle internationalization ( i18n ) and localization ( l10n )?

1 个月前提问
1 个月前修改
浏览次数14

1个答案

1

在Spring Boot中处理国际化(i18n)和本地化(l10n)主要涉及到使用资源文件(Resource Bundles)来存储针对不同语言的文本消息。下面我将详细介绍整个过程及其实现方式。

1. 创建资源文件

首先,你需要为应用中支持的每种语言创建属性文件(.properties)。这些文件通常放置在src/main/resources目录下。例如,如果你的应用需要支持英语和中文,你可以创建以下文件:

  • messages.properties (默认英语)
  • messages_zh_CN.properties (简体中文)

这些文件中将包含相应的键值对,用于不同语言的文本。例如:

messages.properties

shell
welcome.message=Welcome

messages_zh_CN.properties

shell
welcome.message=欢迎

2. 配置Spring Boot

在Spring Boot应用中,你需要配置MessageSource Bean,它用于解析消息的国际化。这可以通过在一个配置类中添加以下代码来完成:

java
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.support.ResourceBundleMessageSource; @Configuration public class InternationalizationConfig { @Bean public ResourceBundleMessageSource messageSource() { ResourceBundleMessageSource source = new ResourceBundleMessageSource(); source.setBasenames("messages"); source.setDefaultEncoding("UTF-8"); return source; } }

这段代码设置了基本名称为messages的消息源,这意味着Spring会查找以messages开头的所有属性文件。

3. 使用MessageSource

在你的控制器或服务中,你可以使用MessageSource来获取适当的国际化消息。例如:

java
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.MessageSource; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.servlet.LocaleResolver; import javax.servlet.http.HttpServletRequest; import java.util.Locale; @Controller public class WelcomeController { @Autowired private MessageSource messageSource; @Autowired private LocaleResolver localeResolver; @GetMapping("/welcome") @ResponseBody public String welcome(HttpServletRequest request) { Locale locale = localeResolver.resolveLocale(request); return messageSource.getMessage("welcome.message", null, locale); } }

这里LocaleResolver用于从请求中解析出当前的Locale,然后getMessage方法用于根据这个Locale获取相应的消息。

4. 设置Locale

Spring Boot允许通过LocaleResolver接口来设置和解析Locale。通常使用AcceptHeaderLocaleResolver,它根据HTTP头Accept-Language自动解析Locale。你可以在配置类中定制这个行为,例如:

java
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.i18n.AcceptHeaderLocaleResolver; import java.util.Locale; @Configuration public class LocaleConfig { @Bean public AcceptHeaderLocaleResolver localeResolver() { AcceptHeaderLocaleResolver resolver = new AcceptHeaderLocaleResolver(); resolver.setDefaultLocale(Locale.ENGLISH); return resolver; } }

通过这些设置和配置,Spring Boot应用能够根据用户的地区设置自动显示相应语言的内容,从而实现国际化和本地化。

2024年8月7日 22:10 回复

你的答案