2011-07-01 14 views
6

http://web.archiveorange.com/archive/v/fwvde0wN3xcViMtADw6xएंड्रॉयड

में उपयोगकर्ता की भाषा ऐसा लगता है कि navigator.language संपत्ति एंड्रोइड्स पर वेबव्यू में हमेशा "एन" है प्राप्त करें। फिर, उपयोगकर्ता की भाषा प्राप्त करने का सबसे अच्छा तरीका क्या है? इसे देशी जावा कोड में प्राप्त करें और इसे जावास्क्रिप्ट द्वारा वेबव्यू में डालें? या कोई अन्य बेहतर तरीका?

उत्तर

2

समाधान मैं इस समस्या का पाया वेबव्यू की सेटिंग के माध्यम उपयोगकर्ता एजेंट स्थापित करने के लिए है:

WebSettings settings = wv.getSettings(); 
settings.setJavaScriptEnabled(true); 
settings.setUserAgentString(Locale.getDefault().getLanguage()); 

अपने webcontent में आप तो इसके माध्यम से पुनः प्राप्त:

var userLang = navigator.userAgent; 

यह केवल स्थानीय सामग्री प्रदर्शित करने वाले वेबव्यू के लिए उपयोग किया जाना चाहिए।

2

इस मदद कर सकता है:

Locale.getDefault().getDisplayLanguage(); 
+0

क्या इसे सीधे वेबव्यू में HTML फ़ाइल में लाने का कोई तरीका है? –

0

यह वास्तव में निर्भर करता है जहाँ आप इस जानकारी की जरूरत है। यदि आपको एंड्रॉइड ओएस लोकेल की आवश्यकता है, तो Locale.getDefault() बस पर्याप्त होगा। सर्वर पक्ष के लिए, लोकेल का पता लगाने का सबसे अच्छा तरीका HTTP प्रोटोकॉल के स्वीकार्य-भाषा शीर्षलेख की सामग्री को पढ़ना है।
ऐसे मामले में लोकेल का पता लगाने सर्वर सर्वर प्रौद्योगिकी पर निर्भर करता है। navigator.userAgent, और उस पर एक regex भाषा की तलाश में चलाने - सरल सर्वलेट के लिए, आप बस आदि

+0

मैं सिर्फ वेब्यूम में एचटीएमएल की भाषा बदलना चाहता हूं। एचटीएमएल स्थिर है और स्थानीय निर्देशिका में संग्रहीत है, इसलिए मैं अनुरोध हेडर का उपयोग नहीं कर सकता। हममम। –

+0

स्थिर HTML के लिए आप कुछ_de.html, something_en.html जैसी फ़ाइलों का नाम दे सकते हैं और इसी तरह रनटाइम पर उचित फ़ाइल चुन सकते हैं। –

3

एक तरह से हल करने के लिए इस userAgent लेने के लिए है request.getLocale(), JSF के लिए आप UIViewRoot से इसे पढ़ा होगा, करना होगा।

उदाहरण एंड्रॉयड ua स्ट्रिंग (http://www.gtrifonov.com/2011/04/15/google-android-user-agent-strings-2/ से):

Mozilla/5.0 (लिनक्स, यू, एंड्रॉयड 2.0.1, en-us; Droid बिल्ड/ESD56) AppleWebKit/530.17 (KHTML, छिपकली की तरह) संस्करण/4.0 मोबाइल सफारी/530,17

तो बस भाषा मेल: navigator.userAgent.match(/[a-z]{2}-[a-z]{2}/), जो रिटर्न en-us

तुम सच में सुरक्षित बनाना चाहते हैं, तो आप Android 2.0.1; की उपस्थिति तुरंत भाषा पूर्ववर्ती मेल कर सकते हैं। उस के लिए regex होगा:

navigator.userAgent.match(/Android \d+(?:\.\d+){1,2}; [a-z]{2}-[a-z]{2}/).toString().match(/[a-z]{2}-[a-z]{2}/)

+1

एंड्रॉइड के नए संस्करण दुर्भाग्य से उपयोगकर्ता एजेंट स्ट्रिंग में भाषा नहीं डालते हैं। –