gpt4 book ai didi

java - Spring Boot 本地化问题 - Accept-Language header

转载 作者:IT老高 更新时间:2023-10-28 13:46:10 26 4
gpt4 key购买 nike

我们正在为应用程序使用 Spring Boot。在 ApplicationConfig.java 我有以下代码

 @Bean
public LocaleResolver localeResolver() {
return new SmartLocaleResolver();
}

SmartLocaleResolver.java 在下面

public class SmartLocaleResolver extends SessionLocaleResolver {

@Override
public Locale resolveLocale(HttpServletRequest request) {
final String acceptLanguage = request.getHeader("Accept-Language");
if (acceptLanguage.contains(",")) {
String[] aheader = acceptLanguage.split(",[ ]*");
for (String locale : aheader) {
if (ApplicationConstants.LOCALE.contains(locale)) {
locale.trim();
return Locale.forLanguageTag(locale);
}
}
} else if (!acceptLanguage.contains(",") && !acceptLanguage.isEmpty()) {
if (ApplicationConstants.LOCALE.contains(acceptLanguage)) {
return Locale.forLanguageTag(acceptLanguage);
}
}
return request.getLocale();
}
}

我在我的常量类中有下面来比较来自 header Accept-Language 的值。

public static final List LOCALE = Collections .unmodifiableList(Arrays.asList("en", "es"));

我知道在实际情况下标题会像Accept-Language : fr,es;q=0.8,en-us;q=0.6 但出于测试目的,我将其传递如下。

接受语言 : fr,es,en

代码还没有完成,但我只是从 postman 那里测试,看看代码是否选择“es”作为语言环境并给我本地化结果。

我没有messages_fr.properties 文件,但我有messages_es.properties,所以我希望如果应用程序从下面的代码中设置区域设置,它会选择区域设置为“es”并给出我想要的西类牙语值。我需要在此处进行哪些更改才能使代码正常工作?

最佳答案

解决办法是:

public class SmartLocaleResolver extends AcceptHeaderLocaleResolver 

而不是

public class SmartLocaleResolver extends SessionLocaleResolver

以下是更新后的代码:

import javax.servlet.http.HttpServletRequest;
import java.util.List;
import java.util.Locale;

import com.bbtransact.tss.api.commons.http.HttpConstants;
import org.apache.commons.lang.StringUtils;
import org.springframework.web.servlet.i18n.AcceptHeaderLocaleResolver;

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

在我的常量类中,我有:

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

关于java - Spring Boot 本地化问题 - Accept-Language header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36655104/

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