다국어 지원 - taeyun-ham/andalos GitHub Wiki

ISO-639-1

ISO-639-1

Header

// 클라이언트가 서버에게 받을 수 있는 언어의 종류를 보냄 
Accept-Language : ko-KR,ko;q=0.9,en-US;q=0.8, en;q=0.7

// 서버가 클라이언트에게 보내는 내용의 언어를 알려줌
Content-Language : ko-KR

Locale

  • 기본으로 적용되는 localeResolver 는 AcceptHeaderLocaleResolver 이다.
  • header 에 정의된 Accept-Language 의 지역정보를 읽어 locale 을 지정한다.
  • header 에 지역정보가 없을 경우 시스템 locale (JVM Locale) 을 사용한다.
  • 기본 로케일을 지정할 경우 다음과 같이 SpringConfig 에 bean 을 등록한다.
	@Bean
	public LocaleResolver localeResolver() {
		// Accept-Language 헤더를 기반으로 로케일을 결정하는 LocaleResolver
		AcceptHeaderLocaleResolver localeResolver = new AcceptHeaderLocaleResolver();
		// 기본 로케일 설정 (선택 사항)
		localeResolver.setDefaultLocale(Locale.ENGLISH);
		return localeResolver;
	}

MessageSource

  • Locale 에 해당하는 messageSource 파일을 검색한다.
  • 파일이 없을 경우 시스템 locale 에 해당하는 파일에서 찾는다.
  • default messageSource 를 지정할 경우 다음과 같이 SpringConfig 에 bean 을 등록한다.
	@Bean
	public ReloadableResourceBundleMessageSource messageSource() {
		ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource();
		messageSource.setBasename("classpath:messages");
		messageSource.setCacheSeconds(60);
		messageSource.setDefaultLocale(Locale.ENGLISH); // message_en.properties 파일을 기본값으로 지정
		return messageSource;
	}

주의

  • locale 에 해당하는 파일이 존재하나 property key 가 없을 경우 Accept-Language header 에 지정된 지역정보 순서대로 messageSource 파일을 검색하는 것이 아니라 default 로 지정된 messageSource 파일에서 찾는다.