2013-05-06 3 views
1

i18n에 대한 두 개의 등록 정보 파일이 있으며 서비스 메소드에서 현지화 된 메시지를 수신하려고합니다. 내가 messageSource을 주사했는데 이제는 원하는대로 사용자의 로케일을 얻는 것뿐입니다.서비스에서 사용자 로켈을 수신 할 수 없습니다.

  1. 첫 번째로 LocaleContextHolder.getLocale()을 통해이 작업을 시도했지만 요청 로캘에 관계없이 내 시스템 로캘을 반환합니다.
  2. 그럼 서비스에 HttpServletRequest을 삽입하고 시도해 보았습니다 : RequestContextUtils.getLocaleResolver(request).resolveLocale(request), 그러나 LocaleResolver (null 임)을받지 못했습니다. 그것은 봄 보안의 UserDetailsService

    의 단지 구현입니다 그리고 중요한 있다면, 내 프로젝트에 CookieLocaleResolver을 사용하기 때문에

나는,이 서비스 컨트롤러에서 어떻게든지 로케일을 보낼 수 없습니다.

+0

사용하려는 로케일을 결정하는 것은 무엇입니까? – soulcheck

+0

@soulcheck은 질문을 이해하지 못했습니다. 승인되지 않은 권한으로 지역화 된 메시지를 표시하려고하므로 현재 사용자 로캘 – Patison

+1

을 알고 있어야합니다. 로케일은 요청에 의해 결정됩니다. 컨트롤러/인증 인터셉터에서 가져 와서 매개 변수로 서비스에 전달할 수 있습니다. – soulcheck

답변

1

일반적으로 프레젠테이션 계층에 프레젠테이션 문제를 남기고 싶습니다.

jsp에서 메시지를 표시하려면 jsp에서 <spring:message /> (또는 일반 <fmt:message />) 태그를 사용하고 l10n에 대해 스프링이 걱정하게하십시오.

할 수 없다면 서비스 레이어에서 예외를 던지고 사용자가 로케일로 ServletRequest에 액세스 할 수있는 컨트롤러/인터셉터에서 처리하는 또 다른 옵션이 있습니다.

+0

물론, 저는 프로젝트에서''를 사용하고 있습니다. 그러나, 내가 이해하는 바와 같이, 일반적으로 권한 부여 과정에서 다른 오류가 발생할 수 있으며,이를 변환하여 Spring Security에 제공해야합니다. ''를 사용하여 어떻게이 뉘앙스를 풀 수 있습니까? – Patison

+0

@vasileusky 당연히 다른 종류의 에러가 발생할 수 있지만, 인증 에러는 인증과 관련이있다. 적어도 스프링 보안에서는'를 사용하여 에러 페이지를 정의 할 수있다. />' – soulcheck

+0

도움 주셔서 감사합니다! 내 서비스에서 예외를 던지려고하고 더 높은 수준의 어딘가에서 처리하려고합니다. – Patison

관련 문제