शायद अब तक सही लेकिन इस मैं क्या बनाया है किया जा रहा से ...
मैं भी है कि मैं डिफ़ॉल्ट भाषा का चयन तंत्र की जरूरत है एसईओ की वजह से थोड़ा बदल गया है और मैं द्वारा भाषा बदलने के लिए नहीं करने का फैसला कहने की जरूरत है एक प्राप्त पैरामीटर का उपयोग कर, लेकिन चयनित भाषा के लिए मेरे यूरी पथ के पहले भाग का उपयोग कर। उदाहरण के लिए: http://myurl.com/test.html?lang=de
मेरी एनोटेशन आधारित विन्यास में के बजाय http://myurl.com/en/test.html:
@Bean
public LocaleResolver localeResolver() {
UriLocaleResolver uriLocaleResolver = new UriLocaleResolver();
return uriLocaleResolver;
}
स्थान समाधानकर्ता
public class UriLocaleResolver implements LocaleResolver {
private final Logger logger = LoggerFactory.getLogger(getClass());
private Locale locale = null;
@Autowired
private LocalizationService localizationService;
@Override
public Locale resolveLocale(final HttpServletRequest servletRequest) {
if (locale != null) {
return locale;
}
String languageIsoCode = null;
try {
languageIsoCode = ((String)servletRequest.getAttribute(RequestKey.LANGUAGE_ISO_CODE)).toLowerCase();
}
catch (Exception e) { }
if (StringUtils.isBlank(languageIsoCode) || !localizationService.getSupportedLocaleLanguageIsoCodes().contains(languageIsoCode)) {
logger.trace("Couldn't find valid language iso code. Using default locale '{}'", GlobalConstant.DEFAULT_LOCALE);
return GlobalConstant.DEFAULT_LOCALE;
}
logger.trace("Found language iso code '{}'", languageIsoCode);
return new Locale(languageIsoCode);
}
@Override
public void setLocale(HttpServletRequest request, HttpServletResponse response, Locale locale) {
this.locale = locale;
}
}
फिल्टर जो uri में एक वैध भाषा कोड के लिए जाँच करता ..
@Component
public class UriLocalizationFilter extends OncePerRequestFilter {
private final Logger logger = LoggerFactory.getLogger(getClass());
@Autowired
private LocalizationService localizationService;
@Override
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {
String uri = request.getRequestURI().substring(request.getContextPath().length());
String[] pathParts = uri.split("/");
if (!uri.startsWith(GlobalConstant.FRONTEND_RESOURCE_PATH_PREFIX) && pathParts.length >= 1 && pathParts[1].length() == 2) {
String originalLanguageIsoCode = pathParts[1];
String lowerCaseLanguageIsoCode = originalLanguageIsoCode.toLowerCase();
if (localizationService.getSupportedLocaleLanguageIsoCodes().contains(lowerCaseLanguageIsoCode)) {
logger.debug("Found valid language iso code {}", lowerCaseLanguageIsoCode);
}
else {
logger.debug("Found invalid language iso code {}. Using default language iso code {}.", lowerCaseLanguageIsoCode, GlobalConstant.DEFAULT_LOCALE.getLanguage());
lowerCaseLanguageIsoCode = GlobalConstant.DEFAULT_LOCALE.getLanguage();
}
String newUrl = StringUtils.removeStart(uri, '/' + originalLanguageIsoCode);
request.setAttribute(RequestKey.LANGUAGE_ISO_CODE, lowerCaseLanguageIsoCode);
logger.debug("Dispatching to new url '{}'", newUrl);
request.getRequestDispatcher(newUrl).forward(request, response);
}
else {
filterChain.doFilter(request, response);
}
}
public void setLocalizationService(LocalizationService localizationService) {
this.localizationService = localizationService;
}
}
}
फ्रंटएंड पथ मेरे मामले में "संसाधन" है जहां जेएस, सीएसएस, फोंट इत्यादि जैसी सभी स्थिर फाइलें बिछाई कर रही हैं। स्थानीयकरण सेवा.getSupportedLocaleLanguageIsoCodes() वर्तमान में तीन भाषा कोड (एन, आरयू, डी) युक्त एक सेट है। तो गलत भाषा कोड के मामले में जैसे abc im मेरी डिफ़ॉल्ट भाषा "डी" के साथ आगे बढ़ रहा है। मेरे लिए यह स्वीकार्य समाधान था क्योंकि यूरी में गलत भाषा कोड होने का मतलब है कि यूरी उपयोगकर्ता द्वारा छेड़छाड़ की गई थी ...
जैसा कि मैंने कहा था कि यह शायद "समाधान" नहीं है; उदाहरण के लिए मुझे यकीन नहीं है कि यह कैसे और कैसे कुकीज़ के साथ काम करता है और/या "मुझे याद रखें" प्रमाणीकरण (वसंत सुरक्षा का उपयोग करके) ... अभी तक इसका परीक्षण करने का कोई समय नहीं था ...
क्या किसी के पास कोई विचार नहीं है? बहुत कुछ खोज रहा था लेकिन अभी तक कोई समाधान या विचार नहीं मिला .... – StephanM
जब आप http://localhost.de?lang=abc पर नेविगेट करते हैं तो क्या होता है? इस मामले में किस लोकेल का उपयोग किया जाता है? –
मैं अब आपको नहीं बता सकता क्योंकि मैंने पहले ही एक फ़िल्टर बनाया है जो भाषा कोड की जांच करता है। यदि मेरा ऐप इस भाषा का समर्थन नहीं करता है तो मैं इसे अपनी डिफ़ॉल्ट भाषा में मैन्युअल रूप से सेट कर रहा हूं। तो आपके मामले में इसे "डी"/जर्मन पर सेट किया जाएगा ... – StephanM