gpt4 book ai didi

java - 根据 Spring Boot 中的 Accept-Language 检索语言环境

转载 作者:行者123 更新时间:2023-11-30 01:51:50 28 4
gpt4 key购买 nike

我有一个 Spring Boot (2.1.3.RELEASE) 应用程序,它使用 Jersey 来定义 (RESTful) 端点。我正在尝试根据用户代理发送的区域设置来读取和传播一些消息。

我已经配置了这些 bean:

@Bean
public LocaleResolver localeResolver() {
final AcceptHeaderLocaleResolver resolver = new AcceptHeaderLocaleResolver();
resolver.setSupportedLocales(Arrays.asList(Locale.GERMANY, Locale.US));
resolver.setDefaultLocale(Locale.ENGLISH);
return resolver;
}

@Bean
public MessageSource messageSource() { // Not sure if this is needed
final ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource();
messageSource.setDefaultEncoding(StandardCharsets.UTF_8.name());
messageSource.setBasenames("classpath:/messages");
messageSource.setUseCodeAsDefaultMessage(true);
messageSource.setCacheSeconds(5);
return messageSource;
}

...还有 bundle (在 ../src/main/resources/ 内),例如:messages.properties(后备)、messages_en_US。属性messages_de_DE.properties

现在,挑战是我不确定如何“读取”用户代理发送的区域设置,以便正确读取包中的消息。我正在注入(inject) MessageSource ms,并以编程方式读取消息,例如:

final Locale locale = ???
ms.getMessage("message.duplicate-token", null, locale);

有什么线索吗?

I've tried LocaleContextHolder.getLocale() but it's always en_US. If I hardcode the corresponding locale for the getMessage call, I'm able to retrieve the correct message(s). So I know the setup/configuration works for the most part.

<小时/>

客户端使用 Accept-Language header 发送区域设置 - 以及诸如:de-DEen-US 等值。

最佳答案

您需要添加一个 LocaleChangeInterceptor 并配置 bean,如下所示:请参阅Spring Boot internationalization了解更多

@Bean
public LocaleChangeInterceptor localeChangeInterceptor() {
    LocaleChangeInterceptor lci = new LocaleChangeInterceptor();
    lci.setParamName("lang");
    return lci;
}

如果您只想使用“Accept-Language” header ,那么您可以扩展 AcceptHeaderLocaleResolver 并可以自定义:

package com.deb.demo.config;

import java.util.Arrays;
import java.util.List;
import java.util.Locale;

import javax.servlet.http.HttpServletRequest;

import org.springframework.util.StringUtils;
import org.springframework.web.servlet.i18n.AcceptHeaderLocaleResolver;

public class CustomLocaleResolver extends AcceptHeaderLocaleResolver {


List<Locale> LOCALES = Arrays.asList(new Locale("en"),new Locale("es"),new Locale("fr"));


@Override
public Locale resolveLocale(HttpServletRequest request) {
if (StringUtils.isEmpty(request.getHeader("Accept-Language"))) {
return Locale.getDefault();
}
List<Locale.LanguageRange> list = Locale.LanguageRange.parse(request.getHeader("Accept-Language"));
Locale locale = Locale.lookup(list,LOCALES);
return locale;
}
}

关于java - 根据 Spring Boot 中的 Accept-Language 检索语言环境,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55736861/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com