로캘 확인자를 연결할 수 있습니까?스프링 로캘 리졸버 체인 연결
내가로부터 로케일 값을 싶습니다
세션을 경우 내 가능 언어
쿠키의 경우를 가진지도 내 가능 언어
두 경우와지도 로케일 정보를 포함하지 마십시오. 허용 언어에서 추출한 후 허용 된 로케일과 가장 일치하는 항목을 선택하십시오.
어떻게 하시겠습니까?
로캘 확인자를 연결할 수 있습니까?스프링 로캘 리졸버 체인 연결
내가로부터 로케일 값을 싶습니다
세션을 경우 내 가능 언어
쿠키의 경우를 가진지도 내 가능 언어
두 경우와지도 로케일 정보를 포함하지 마십시오. 허용 언어에서 추출한 후 허용 된 로케일과 가장 일치하는 항목을 선택하십시오.
어떻게 하시겠습니까?
스프링의 로케일 분석자 목록을 래핑하는 자신의 LocaleResolver을 작성해야한다고 생각합니다. Locale
이 해결 될 때까지 하나씩 호출합니다. 목록에 Locale
이 없으면 LocaleResolver
에 기본 동작을 제공합니다.
https://mvnrepository.com/artifact/org.lds.stack.web/stack-web-spring/3.0.8
아니면 두 링크에서보기를 선호하는 경우 :
다음은 유용 할 수있는 몇 가지 링크입니다
는package org.lds.stack.web.spring.i18n;
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.LocaleResolver;
import org.springframework.web.servlet.i18n.AcceptHeaderLocaleResolver;
import org.springframework.web.servlet.i18n.FixedLocaleResolver;
/**
* This locale resolver provides the ability to define a list of resolvers from which to determine
* the locale. This allows us to give preference to certain locale resolution schemes by putting
* them earlier in the list.
* <p/>
*
* The order of resolvers from which to find the given locale (or set a specified locale) could be
* defined in the spring context file with something like:
*
* <pre>
* <bean id="localeResolver" class="org.lds.stack.web.spring.i18n.ChainedLocaleResolver">
* <property name="localeResolvers">
* <list>
* <bean class="org.lds.stack.web.spring.i18n.UrlLocaleResolver" />
* <bean class="org.lds.stack.web.spring.i18n.NoDefaultSessionLocaleResolver" />
* <bean class="org.lds.stack.web.spring.i18n.NoDefaultCookieLocaleResolver">
* <property name="cookieMaxAge" value="31536000"/>
* </bean>
* <bean class="org.springframework.web.servlet.i18n.AcceptHeaderLocaleResolver" />
* <bean class="org.springframework.web.servlet.i18n.FixedLocaleResolver" />
* </list>
* </property>
* </bean>
* </pre>
*
* This allows you to remove, or re-order the locale resolution schemes to meet your needs.
* Also note that the id of localeResolver is significant. The Spring Framework knows to use this
* resolver as the LocaleResolver by virtue of the id being "localeResolver".
* <p/>
*
* NOTE: If the default resolver order, shown above, will work for your application, then you can
* skip this verbose definition by utilizing the stack-web namespace handler, providing any exposed
* attribute values for minor customizations. The namespace handler is defined as follows:
*
* <pre>
* <stack-web:locale-resolver />
* </pre>
*
* Additionally, in order to change the locale based on a url parameter, you can configure a
* LocaleChangeInterceptor, which will call the set method of all of the locales in the chained
* resolver, so that they can be found when resolveLocale(...) is called on them.
* <p/>
*
* The interceptor configuration might look as follows:
* <pre>
* <mvc:interceptors>
* <bean id="localeChangeInterceptor" class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor" />
* </mvc:interceptors>
* </pre>
*/
public class ChainedLocaleResolver implements LocaleResolver {
private List<LocaleResolver> localeResolvers;
public ChainedLocaleResolver() {
//if anything other than this default order or set is desired, the list of resolvers
//to be chained should be set up in the bean definition as shown above
localeResolvers = new ArrayList<LocaleResolver>();
//TODO: Is the Url resolver necessary if we have an interceptor that changes the locale from the url?
localeResolvers.add(new UrlLocaleResolver());
localeResolvers.add(new NoDefaultSessionLocaleResolver());
NoDefaultCookieLocaleResolver cookieLocaleResolver = new NoDefaultCookieLocaleResolver();
cookieLocaleResolver.setCookieMaxAge(31536000);
localeResolvers.add(cookieLocaleResolver);
//TODO: may need to create a NoDefault, but that seems difficult as the implementation is provided
//by the javax.servlet, ..., Also, maybe we could just remove the fixedLocaleResolver, as this one
//gets the default, and then if people did not use this one, they could add the fixed one back in.
localeResolvers.add(new AcceptHeaderLocaleResolver());
localeResolvers.add(new FixedLocaleResolver());
}
@Override
public Locale resolveLocale(HttpServletRequest request) {
Locale locale = null;
for (LocaleResolver resolver : getLocaleResolvers()) {
locale = resolver.resolveLocale(request);
if (locale != null) {
return locale;
}
}
return locale;
}
@Override
public void setLocale(HttpServletRequest request, HttpServletResponse response, Locale locale) {
for (LocaleResolver resolver : getLocaleResolvers()) {
try {
resolver.setLocale(request, response, locale);
} catch (UnsupportedOperationException uoe) {}
}
}
public List<LocaleResolver> getLocaleResolvers() {
return localeResolvers;
}
public void setLocaleResolvers(List<LocaleResolver> localeResolvers) {
this.localeResolvers = localeResolvers;
}
}
두 번째 링크 (404)를 제공합니다. 이 코드가 패키지의 일부입니까? (잘하면 Maven 패키지) 어떤 라이센스가 배포되어 있는가? –
모든 링크가 깨졌습니다. – Daniele
@Daniele : fixed – Bogdan