지대한
8 months ago
2 changed files with 87 additions and 0 deletions
@ -0,0 +1,19 @@ |
|||||||
|
package kr.co.palnet.kac.app.config; |
||||||
|
|
||||||
|
import kr.co.palnet.kac.app.core.web.BaseAcceptHeaderLocaleResolver; |
||||||
|
import org.springframework.context.annotation.Bean; |
||||||
|
import org.springframework.context.annotation.Configuration; |
||||||
|
import org.springframework.web.servlet.LocaleResolver; |
||||||
|
import org.springframework.web.servlet.i18n.AcceptHeaderLocaleResolver; |
||||||
|
|
||||||
|
import java.util.Locale; |
||||||
|
|
||||||
|
@Configuration |
||||||
|
public class WebConfig { |
||||||
|
@Bean |
||||||
|
public LocaleResolver localeResolver() { |
||||||
|
AcceptHeaderLocaleResolver localeResolver = new BaseAcceptHeaderLocaleResolver(); |
||||||
|
localeResolver.setDefaultLocale(Locale.KOREA); |
||||||
|
return localeResolver; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,68 @@ |
|||||||
|
package kr.co.palnet.kac.app.core.web; |
||||||
|
|
||||||
|
import jakarta.servlet.http.HttpServletRequest; |
||||||
|
import lombok.extern.slf4j.Slf4j; |
||||||
|
import org.springframework.util.StringUtils; |
||||||
|
import org.springframework.web.servlet.i18n.AcceptHeaderLocaleResolver; |
||||||
|
|
||||||
|
import java.util.Arrays; |
||||||
|
import java.util.List; |
||||||
|
import java.util.Locale; |
||||||
|
|
||||||
|
@Slf4j |
||||||
|
public class BaseAcceptHeaderLocaleResolver extends AcceptHeaderLocaleResolver { |
||||||
|
private final List<Locale> LOCALES = Arrays.asList( |
||||||
|
new Locale("ko"), |
||||||
|
new Locale("ko", "KR"), |
||||||
|
new Locale("en"), |
||||||
|
new Locale("en", "US") |
||||||
|
); |
||||||
|
private final String LOCALE_HEADER_KEY = "Accept-Language"; |
||||||
|
|
||||||
|
/** |
||||||
|
* resolve locale 구성 |
||||||
|
* |
||||||
|
* @param request the request to resolve the locale for |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
@Override |
||||||
|
public Locale resolveLocale(HttpServletRequest request) { |
||||||
|
if (!StringUtils.hasText(request.getHeader(LOCALE_HEADER_KEY))) { |
||||||
|
return this.getDefaultLocale(); |
||||||
|
} |
||||||
|
try { |
||||||
|
|
||||||
|
Locale locale = LOCALES.stream().filter(_locale -> { |
||||||
|
String defaultLocale = _locale.toString() |
||||||
|
.replaceAll("-", "") |
||||||
|
.replaceAll("_", "") |
||||||
|
.toLowerCase(); |
||||||
|
String headerLocale = request.getHeader(LOCALE_HEADER_KEY).toString() |
||||||
|
.replaceAll("-", "") |
||||||
|
.replaceAll("_", "") |
||||||
|
.toLowerCase(); |
||||||
|
return defaultLocale.equals(headerLocale); |
||||||
|
}).findFirst().orElse(null); |
||||||
|
|
||||||
|
if (locale == null) { |
||||||
|
locale = LOCALES.stream() |
||||||
|
.filter(_locale -> { |
||||||
|
String language = _locale.getLanguage(); |
||||||
|
return request.getHeader(LOCALE_HEADER_KEY).contains(language); |
||||||
|
}) |
||||||
|
.map(_locale -> { |
||||||
|
String language = _locale.getLanguage(); |
||||||
|
return new Locale(language); |
||||||
|
}) |
||||||
|
.distinct() |
||||||
|
.findFirst().orElse(Locale.KOREAN); |
||||||
|
} |
||||||
|
|
||||||
|
log.info("{}, {}", request.getHeader(LOCALE_HEADER_KEY), locale); |
||||||
|
return locale; |
||||||
|
} catch (IllegalArgumentException e) { |
||||||
|
log.warn("{}", e.getMessage()); |
||||||
|
return this.getDefaultLocale(); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
Loading…
Reference in new issue