2016-03-01 8 views
10

मैं प्रतिक्रिया, i18next और i18next-browser-languagedetector का उपयोग कर बहुभाषी अनुप्रयोग विकसित कर रहा हूं।प्रतिक्रिया i18next और भाषा बदलने का सही तरीका

मैं निम्नलिखित तरीके i18next प्रारंभ:

i18n 
    .use(LanguageDetector) 
    .init({ 
    lng: localStorage.getItem(I18N_LANGUAGE) || "pt", 
    fallbackLng: "pt", 
    resources: { 
     en: stringsEn, 
     pt: stringsPt 
    }, 
    detection: { 
     order: ["localStorage", "navigator"], 
     lookupQuerystring: "lng", 
     lookupLocalStorage: I18N_LANGUAGE, 
     caches: ["localStorage"] 
    } 
    }); 

export default i18n; 

और मुझे लगता है कि सिर्फ तुम क्या उपयोगकर्ता चुना localStorage में मूल्य में परिवर्तन एक भाषा चयनकर्ता लागू किया है।

क्या यह करने का सही तरीका है?

मैं पूछता हूं क्योंकि यह काम करता है, मुझे लगता है कि मैं localStorage.getItem(I18N_LANGUAGE) || "pt" सेट करके "धोखाधड़ी" कर रहा हूं और मैं भाषा पहचान का उपयोग नहीं कर रहा हूं जैसा मुझे करना चाहिए।

+0

मैं एक ही समस्या को हल करने की कोशिश कर रहा हूं और दो समाधान ढूंढ चुका हूं। सबसे पहले: आप लोकेल को url पैरामीटर (: locale \ you_url) के रूप में स्टोर कर सकते हैं जैसे [this] (https://alicoding.com/language-code-url-in-react-intl/)। दूसरा स्थानीय संस्करण या कुकीज़ में आपका संस्करण - स्टोर लोकेल है। मैं आपके जैसा ही करना चाहता हूं, लेकिन i18next को चाबियाँ नहीं मिलती हैं। क्या आप एक उदाहरण लिख सकते हैं या अपना कोड साझा कर सकते हैं? –

+0

हमने लोकलॉरेज में लोकेल सेट करना चुना है। आपका क्या मतलब है 'i18next' कुंजी नहीं मिलती है? मैं वैसे भी 'प्रतिक्रिया-i18next' का उपयोग कर रहा हूँ। चेक करें: https://gist.github.com/pteixeira/4a75160ca15e3edf6975 मैं भी एक भाषा चयनकर्ता घटक है कि भाषा के मूल्य के साथ localStorage प्रविष्टि सेट जब यह initializes एक डिफ़ॉल्ट मान या क्या के लिए जाँच की है उपयोगकर्ता खो देता है। – pteixeira

+0

धन्यवाद, यह मेरे लिए वास्तव में उपयोगी है। एक और सवाल: रनटाइम में भाषा बदलने का कोई तरीका है? –

उत्तर

3

documentation के अनुसार, आप अपने आप को भाषा निर्दिष्ट करने की आवश्यकता नहीं होनी चाहिए:

if (!lng && this.services.languageDetector) lng = this.services.languageDetector.detect();

:

import i18next from 'i18next'; 
import LngDetector from 'i18next-browser-languagedetector'; 

i18next 
    .use(LngDetector) 
    .init({ 
    detection: options 
    }); 

और i18next में this piece of source के अनुसार, यह वास्तव में प्लगइन का पता लगाने क्षमताओं का उपयोग करता

क्या यह करने का सही तरीका है?

तो, नहीं, ऐसा नहीं है। प्लगइन को यह काम करने दें। :)

+1

सही प्रतिक्रिया ... यदि आप भाषा डिटेक्टर में भाषा सेट करते हैं तो यह पता लगाने पर यह काम नहीं करेगा। सही उत्तर के रूप में चिह्नित किया जा सकता है। बेस्ट जन (उर्फ jamuhl: i18next के रखरखाव) – jamuhl

+0

मैंने कोड पर एक नज़र डाली और प्लगइन का सही उपयोग करने के लिए इसे दोबारा इस्तेमाल किया। ने उत्तर को स्वीकार किया गया है। – pteixeira

0

@firstdoit:

स्वत: ब्राउज़र की भाषा का पता लगाने के संबंध में अच्छा जवाब। हालांकि, आपको नहीं लगता कि, यह उपयोगकर्ता को स्वचालित और मैन्युअल कॉन्फ़िगरेशन दोनों का लाभ उठाने का एक बेहतर तरीका है।

उदाहरण के लिए, यदि किसी के पास ब्राउज़र पर सेट किया गया है, तो यह आपके द्वारा प्रलेखन के आधार पर स्वचालित दृष्टिकोण के लिए ठीक होगा। यदि कोई उपयोगकर्ता अंग्रेजी भाषा से फ़्रेंच भाषा बदलता है, तो यह ब्राउज़र भाषा को प्रभावित नहीं करता है, इसलिए साइट को केवल अंग्रेज़ी में रखते हुए कॉन्फ़िगरेशन स्वचालित रूप से ब्राउज़र भाषा का पता लगाने के लिए सेट होते हैं।

मैं, बारी में, वर्तमान पृष्ठ भाषा को प्राथमिकता देंगे:

  • या तो के माध्यम से मानकों (/george.php?lang=fr या /fr_FR/george.php)
पारित कर दिया

यह

  • var lang = this.props.lang || के रूप में मेरे कोड के प्रोप के रूप में पारित किया जाएगा। this.services.languageDetector.detect() || "एन";

आपका क्या लेना है?

0

मुझे लगता है कि आप बहुत करीब हैं। आप शुरुआत में फ़ॉलबैक भाषा के साथ i18n सेट कर सकते हैं। और फिर स्थानीय स्टोरेज या लोकलफोरेज या जो भी स्टोरेज के लिए सहेजी गई भाषा की जानकारी लोड करने के बाद, i18nInstance.changeLanguage(lng) पर कॉल करें।

संबंधित मुद्दे