ํ๋ก์ ํธ๋ฅผ ํ๋ฉด์ ์์ธ์ฒ๋ฆฌ๋ฅผ ํ ๋ ๊ตญ์ ํ ์ ์ฉ์ ํด๋ณด์๋ค.
๐ฑ i18n ๊ฐ๋
i18n์ด๋ internationalization(i์ n์ฌ์ด 18๊ธ์)์ ์ค์ธ ๊ฒ์ผ๋ก ํ๊ตญ์ด๋ก ๋ฒ์ญํ๋ฉด '๊ตญ์ ํ'๋ผ๋ ๋ป์ด๋ค.
๊ตญ์ ํ๋ ๋ฌธํ, ์ง์ญ, ์ธ์ด๊ฐ ๋ค์ํ ๋์ ๊ณ ๊ฐ์ ์ํด ์ฝ๊ฒ ํ์งํ๋ ์ ์๋ ์ ํ, ์ ํ๋ฆฌ์ผ์ด์ ๋๋ ๋ฌธ์ ์ฝํ ์ธ ๋ฅผ ์ค๊ณํ๊ณ ๊ฐ๋ฐํ๋ ๊ฒ์ด๋ค!
โ๏ธ build.gradle ์ ์์กด์ฑ ์ถ๊ฐ
๋๋ ymlํ์ผ์ ํตํด ๋ฉ์์ง๋ฅผ ๊ด๋ฆฌํ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ์์กด์ฑ์ ์ถ๊ฐํด์คฌ๋ค! properties๋ก ํ ๊ฑฐ๋ฉด ์ถ๊ฐ ์ ํด๋ ๋ ๊ฒ ๊ฐ๋ค!
implementation 'net.rakugakibox.util:yaml-resource-bundle:1.1'
โ๏ธ application.yml์ ๋ฉ์์ง ๊ฒฝ๋ก ์ค์ ๋ฐ ์ค์ ํ์ผ
spring:
messages:
basename: i18n/messages
encoding: UTF-8
ํด๋น ์์ธ ๋ฉ์์ง ๊ฒฝ๋ก๋ ์ด๋ ๊ฒ ์ง์ ํ๋ค! ํ์ฌ๋ ํ๊ตญ์ด์ ์์ด๋ง ๊ด๋ฆฌํ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ messages_ko.yml , messages_en.yml ๋ ๊ฐ๋ง ์ ์ํ๋ค!
์์ ๋ด๋ถ๋ ์๋์ ๊ฐ์ ํ์์ผ๋ก ์ ์ํ๋ค.
successResult:
code: "200"
msg: "Success."
successResult:
code: "200"
msg: "์ฑ๊ณตํ์์ต๋๋ค."
โ๏ธ MessageConfiguration ์ค์
@Configuration
public class MessageConfiguration implements WebMvcConfigurer {
@Bean //์ธ์
์ ์ง์ญ ์ค์ . default๋ KOREAN = 'ko'
public SessionLocaleResolver localResolver() {
SessionLocaleResolver slr = new SessionLocaleResolver();
slr.setDefaultLocale(Locale.KOREAN);
return slr;
}
@Bean //์ง์ญ ์ค์ ์ ๋ณ๊ฒฝํ๋ ์ธํฐ์
ํฐ. ์์ฒญ์ ํ๋ผ๋ฏธํฐ Lang ์ ๋ณด๋ฅผ ์ ์ฅํ๋ฉด ์ธ์ด๊ฐ ๋ณ๊ฒฝ๋จ
public LocaleChangeInterceptor localeChangeInterceptor() {
LocaleChangeInterceptor lci = new LocaleChangeInterceptor();
lci.setParamName("lang");
return lci;
}
@Override //์ธํฐ์
ํฐ๋ฅผ ์์คํ
๋ ์ง์คํธ๋ฆฌ์ ๋ฑ๋ก
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(localeChangeInterceptor());
}
@Bean // yml ํ์ผ์ ์ฐธ์กฐํ๋ MessageSource ์ ์ธ
public MessageSource messageSource(
@Value("${spring.messages.basename}") String basename,
@Value("${spring.messages.encoding}") String encoding
) {
YamlMessageSource ms = new YamlMessageSource();
ms.setBasename(basename);
ms.setDefaultEncoding(encoding);
ms.setAlwaysUseMessageFormat(true);
ms.setUseCodeAsDefaultMessage(true);
ms.setFallbackToSystemLocale(true);
return ms;
}
// locale ์ ๋ณด์ ๋ฐ๋ผ ๋ค๋ฅธ yml ํ์ผ์ ์ฝ๋๋ก ์ฒ๋ฆฌ
private static class YamlMessageSource extends ResourceBundleMessageSource {
@Override
protected ResourceBundle doGetBundle(String basename, Locale locale) throws MissingResourceException {
return ResourceBundle.getBundle(basename, locale, YamlResourceBundle.Control.INSTANCE);
}
}
}
์์ ํ์ผ์ ์์ฑํ๊ณ ํด๋น ๋ฉ์์ง๋ฅผ ์ฌ์ฉํ ๋ ๋๋ ์๋์ ๊ฐ์ด ์ฌ์ฉํ๋ค!!
private void setSuccessResult(CommonResult result) {
result.setCode(Integer.parseInt(messageSource.getMessage("successResult.code", null, LocaleContextHolder.getLocale())));
result.setMsg(messageSource.getMessage("successResult.msg", null, LocaleContextHolder.getLocale()));
}
messageSource๋ฅผ ์ด์ฉํด์ ๊ฐ์ ์ธํ ํด ์ฃผ๋ฉด ๋๋ค :)
๐ซง ๊ฒฐ๊ณผ
ํฌ์คํธ๋งจ์ผ๋ก ํ ์คํธํด ๋ดค๋๋ฐ ์ฑ๊ณต์ ์ผ๋ก ์ ๋์ค๋ ๊ฒ ๊ฐ๋ค ใ ใ
reference