当前位置: 代码迷 >> java >> 如何在 Spring 中获取当前的语言环境?
  详细解决方案

如何在 Spring 中获取当前的语言环境?

热度:8   发布时间:2023-07-27 09:25:06.0

我用这个方法

LocaleContextHolder.getLocale()

切换语言环境(日语),但它返回英语(默认)。 如何检索 jp_JP 语言环境?

//Return the Locale associated with the current thread,
// if any, or the   system default Locale else(English)   
LocaleContextHolder.getLocale();

所以首先你检查你当前的线程。在当前线程使用中设置你的语言环境:

setLocale(Locale locale); 

方法然后 LocaleContextHolder.getLocale() 将返回 jp_JP 语言环境

请求上下文实用程序

这应该允许您获取请求的当前语言环境:

RequestContextUtils.getLocaleResolver(request).resolveLocale(request);

返回已由DispatcherServlet绑定到请求的LocaleResolver
@param request当前的 HTTP 请求
@return 当前的LocaleResolver ,或者{@code null}如果没有找到:

public static LocaleResolver getLocaleResolver(HttpServletRequest request) {
    return (LocaleResolver) request.getAttribute(DispatcherServlet.LOCALE_RESOLVER_ATTRIBUTE);
}

这将返回一个 LocaleResolver,您可以从中加载语言环境。

LocaleContextHolder

或正如所提到的:Mohammad tanvirul islam:

LocaleContextHolder.getLocale();

您可以在此处查看文档:

  1. RequestContextUtils : :

  2. LocaleResolver : : //docs.spring.io/spring/docs/current/javadoc-api/org/springframework/web/servlet/LocaleResolver.html

  3. LocaleContextHolder :

有多种方法可以创建 Locale 对象。获取当前的 Locale 对象。

Locale locale = LocaleContextHolder.getLocale();

或者

Locale locale;

获取当前语言

Locale locale;
locale.getLanguage()

Locale locales = LocaleContextHolder.getLocale();
locales.getLanguage();

举一个简单的例子。假设你有资源:选择任何一个代码

 @Autowired
    private MessageSource messageSource;

@GetMapping(path = "/hello-world-I18N")
    public String helloWorldInternationalize() {
        return messageSource.getMessage("good.morning.message", null, 
            LocaleContextHolder.getLocale());
    }


@GetMapping(path = "/hello-world-I18N")
public String helloWorldInternationalize(@RequestHeader(name = "Accept-Header", required = false) Locale locale) {
    return messageSource.getMessage("good.morning.message", null, locale);
}

现在请求 POSTMAN 发送标题为:Accept-Language:US/FN 等任何你想要的。

为其配置一个 LocaleResolver:

        @Bean
        public LocaleResolver localeResolver() {
            AcceptHeaderLocaleResolver localeResolver = new AcceptHeaderLocaleResolver();
            localeResolver.setDefaultLocale(Locale.US); // set default to US
            return localeResolver;
        } 
    

现在在 application.properties 文件中添加 spring.messages.basename=message // message 是属性文件的基本名称。

在资源文件夹中添加更多文件,名称为:message_fr.properties, message.properties 并在此处添加内容。 喜欢 (good.morning.message = Bonjour)

代码将正常工作。

  相关解决方案