2011-12-01 11 views
7

मैं कुकी का पता लगाकर पहले उपयोगकर्ता के लोकेल को हल करना चाहता हूं, और यदि स्वीकारकर्ता भाषा शीर्षलेख द्वारा कोई नहीं है। वसंत केवल एक LocaleResolver स्वीकार करना चाहता है।चेनिंग स्प्रिंग कुकी लॉकेलरोलोलर और AcceptHeaderLocaleResolver

दिलचस्प बात यह है CookieLocaleResolver राज्य के लिए वसंत डॉक्स

LocaleResolver कार्यान्वयन निर्दिष्ट डिफ़ॉल्ट स्थान के लिए एक वापस आने या अनुरोध को स्वीकार के साथ कुकी अनुकूलित सेटिंग के मामले में उपयोगकर्ता को वापस भेज का उपयोग करता है, -हेडर लोकेल।

लेकिन यह वास्तव में ऐसा नहीं लगता है; परीक्षण से पता चलता है कि यह काम नहीं करता है और स्रोत पर एक त्वरित रूप से पता चलता है कि यदि कोई कुकी नहीं है तो यह केवल डिफ़ॉल्ट हो जाता है।

क्या मेरा खुद का LocaleResolver कार्यान्वयन लिखने का एकमात्र समाधान है?

उत्तर

9

ऐसा लगता है कि CookieLocaleResolver ठीक उसी तरह करें जब तक आप defaultLocale सेट नहीं करते हैं।

आप कुछ अलग (उदाहरण के लिए, जब न तो कुकी और न ही Accept हैडर मिला था defaultLocale पर वापस आने) चाहते हैं तो आपको उसके अनुसार अपना determineDefaultLocale() ओवरराइड कर सकते हैं।

+0

धन्यवाद, यह काम करने लगता है। हो सकता है कि मैंने सिर्फ दस्तावेज़ों को गलत समझा, यह थोड़ा स्पष्ट हो सकता है। – Qwerky

3

उदाहरण कुकी स्थान समाधानकर्ता कि defaultLocale को Accept-Language शीर्षक के पहले वापस आने और उसके बाद ही:

public class CookieThenAcceptHeaderLocaleResolver extends CookieLocaleResolver { 

    @Override 
    protected Locale determineDefaultLocale(HttpServletRequest request) { 

     String acceptLanguage = request.getHeader("Accept-Language"); 
     if (acceptLanguage == null || acceptLanguage.trim().isEmpty()) { 
      return super.determineDefaultLocale(request); 
     } 
     return request.getLocale(); 
    } 
} 
संबंधित मुद्दे