इंटरनैशनलाइजेशन (i18n) रीराइट को कॉन्फ़िगर करें

किसी उपयोगकर्ता के देश या उसकी पसंदीदा भाषा के हिसाब से अलग-अलग कॉन्टेंट दिखाने के लिए, इंटरनैशनलाइज़ेशन रीराइट ("i18n रीराइट") का इस्तेमाल करें. यहां कॉन्फ़िगरेशन के कुछ उदाहरण दिए गए हैं, जिन्हें सेट अप किया जा सकता है:

  • फ़्रेंच भाषा को प्राथमिकता देने वाले सभी उपयोगकर्ताओं को एक ही फ़्रेंच कॉन्टेंट दिखाएं. भले ही, वे किसी भी देश में हों.
    उदाहरण: फ़्रेंच टेक्स्ट वाला होम पेज

  • फ़्रेंच भाषा को प्राथमिकता देने वाले उपयोगकर्ताओं को स्टैंडर्ड फ़्रेंच कॉन्टेंट दिखाएं. हालांकि, फ़्रेंच भाषा को प्राथमिकता देने वाले कनाडा के उपयोगकर्ताओं को स्टैंडर्ड फ़्रेंच कॉन्टेंट के बजाय, कैनेडियन फ़्रेंच कॉन्टेंट दिखाएं.
    उदाहरण: स्टैंडर्ड फ़्रेंच वाक्यांश वाला होम पेज बनाम कैनेडियन फ़्रेंच वाक्यांश वाला होम पेज

  • कनाडा के सभी उपयोगकर्ताओं को एक ही कॉन्टेंट दिखाएं. भले ही, उनकी पसंदीदा भाषा कोई भी हो.
    उदाहरण: आपकी साइट की "डिफ़ॉल्ट" भाषा वाला होम पेज, लेकिन इसमें कनाडा के लिए खास सुविधा (जैसे, छुट्टियों की थीम) शामिल हो

  • फ़्रेंच भाषा को प्राथमिकता देने वाले कनाडा के उपयोगकर्ताओं को कैनेडियन फ़्रेंच कॉन्टेंट दिखाएं.
    उदाहरण: कैनेडियन फ़्रेंच वाक्यांश वाला होम पेज और इसमें कनाडा के लिए खास सुविधा (जैसे, छुट्टियों की थीम) शामिल हो

Firebase Hosting उपयोगकर्ता के आईपी पते से उसके देश और उपयोगकर्ता की भाषा से जुड़ी प्राथमिकताओं का पता लगाता है. यह जानकारी Accept-Language अनुरोध का हेडर से मिलती है. आम तौर पर, यह जानकारी उसके वेब ब्राउज़र से अपने-आप सेट हो जाती है.

i18n रीराइट सेट अप करना

अपनी Hosting साइट के लिए i18n रीराइट सेट अप करने के लिए, आपको स्थानीय भाषा में उपलब्ध कराए गए अपने सभी कॉन्टेंट के लिए "i18n कॉन्टेंट" डायरेक्ट्री बनानी होगी. इसके बाद, अपनी नई "i18n कॉन्टेंट" डायरेक्ट्री की ओर ले जाने के लिए, अपनी firebase.json फ़ाइल में i18n एट्रिब्यूट जोड़ना होगा.

यहां पूरी प्रोसेस बताई गई है:

  1. अपने स्थानीय ऐप्लिकेशन की डायरेक्ट्री के public फ़ोल्डर में, "i18n कॉन्टेंट" के लिए एक अलग डायरेक्ट्री बनाएं. इसके बाद, अपनी साइट पर उपलब्ध हर भाषा और देश के कॉम्बिनेशन के लिए सबफ़ोल्डर बनाएं.

    हर सबफ़ोल्डर में, उस कॉम्बिनेशन के लिए खास कॉन्टेंट जोड़ें. जैसे, छुट्टियों की थीम वाले होम पेज या भाषा के हिसाब से अलग-अलग 404 पेज.

    यहां "i18n कॉन्टेंट" डायरेक्ट्री का एक उदाहरण दिया गया है. इसे localized-files कहा जाता है:

    public/
        index.html  // your site's default homepage
        404.html  // your site's custom 404 page
    
        localized-files/
            ALL_ca/
                index.html
            es_ALL/
                index.html
                404.html
            fr/
                index.html
                404.html
            fr_ca/
                index.html

    localized-files/ डायरेक्ट्री में, आपकी साइट पर उपलब्ध हर भाषा और देश के कॉम्बिनेशन के लिए अलग-अलग सबफ़ोल्डर होते हैं. हर सबफ़ोल्डर के नाम का पैटर्न, इनमें से किसी एक फ़ॉर्मैट में होना चाहिए:

    • languageCode_countryCode: इसमें उन उपयोगकर्ताओं के लिए खास कॉन्टेंट होता है जिनकी भाषा की प्राथमिकता और देश का कोड, दोनों ही इस नाम से मेल खाते हैं

    • languageCode: इसमें उन उपयोगकर्ताओं के लिए खास कॉन्टेंट होता है जिनकी भाषा की प्राथमिकता इस नाम से मेल खाती है. हालांकि, यह कॉन्टेंट किसी खास देश के लिए नहीं होता. यह languageCode_ALL के बराबर होता है

    इन कोड के बारे में ज़्यादा जानकारी के लिए, देश और भाषा कोड वाला सब-सेक्शन देखें. `ALL` (केस-सेंसिटिव) की वैल्यू का इस्तेमाल करके, ``किसी भी देश (जैसे, `es_ALL/`) या ``किसी भी भाषा (जैसे, `ALL_ca/`) को दिखाया जा सकता है.

    ज़रूरी नहीं है कि किसी सबफ़ोल्डर में मौजूद फ़ाइलों के लिए, public डायरेक्ट्री या अन्य सबफ़ोल्डर में भी मिलती-जुलती फ़ाइलें मौजूद हों. ऐसा कॉन्टेंट बनाया जा सकता है जो पूरी तरह से किसी भाषा और/या देश के लिए खास हो.

  2. अपनी firebase.json फ़ाइल में i18n एट्रिब्यूट जोड़ें और उस डायरेक्ट्री के बारे में बताएं जिसमें आपका "i18n कॉन्टेंट" मौजूद है. हमारा उदाहरण जारी रखते हुए:

    // firebase.json
    
    "hosting": {
    
      "public": "public",
    
      "ignore": [
        "firebase.json",
        "**/.*",
        "**/node_modules/**"
      ],
    
      "i18n": {
        "root": "/localized-files"  // directory that contains your "i18n content"
      }
    
      ...
    }

    root के लिए बताई गई डायरेक्ट्री का नाम, वह डायरेक्ट्री होनी चाहिए जिसमें "i18n कॉन्टेंट" के सभी सबफ़ोल्डर मौजूद हों. अगर आपने "i18n कॉन्टेंट" के सभी सबफ़ोल्डर, public डायरेक्ट्री के रूट में रखे हैं, तो / की वैल्यू के लिए root का इस्तेमाल करें. root की वैल्यू में, पहले और बाद में स्लैश लगाना ज़रूरी नहीं है.

  3. अपनी Hosting साइट पर "i18n कॉन्टेंट" और कॉन्फ़िगरेशन डिप्लॉय करें.

कुकी को बदलने की सुविधा का इस्तेमाल करके, अपने सेटअप की जांच की जा सकती है.

देश और भाषा कोड

"i18n कॉन्टेंट" के सबफ़ोल्डर के नाम रखते समय, देश और भाषा, दोनों के कोड के लिए छोटे अक्षरों का इस्तेमाल करना ज़रूरी है. आप ALL (केस-सेंसिटिव) की वैल्यू का इस्तेमाल करके, किसी भी देश (जैसे, es_ALL/) या किसी भी भाषा (जैसे, ALL_ca/) को दिखा सकते हैं.

Hosting उपयोगकर्ता के आईपी पते से देश का कोड हासिल करती है. देश के कोड दो अक्षरों वाले ISO 3166-1 alpha-2 कोड होते हैं.

भाषा के कोड, उपयोगकर्ता के Accept-Language अनुरोध हेडर से हासिल किए जाते हैं. (आम तौर पर, यह जानकारी उसके वेब ब्राउज़र से अपने-आप सेट हो जाती है). ये ISO 639-1 कोड होते हैं. भाषा कोड का इस्तेमाल करते समय, इन बातों का ध्यान रखें:

  • जब Hosting यह खोजता है कि "i18n कॉन्टेंट" में से कौनसी भाषा का कॉन्टेंट दिखाना है, तो वह भाषाओं को Accept-Language हेडर में मौजूद क्वालिटी वैल्यू के आधार पर क्रम में लगाता है.

  • Hosting किसी भी क्षेत्रीय और देश के सबटैग को Accept-Language हेडर में हटा देता है, इसलिए "i18n कॉन्टेंट" सबफ़ोल्डर के नाम में भाषा कोड में ये सबटैग शामिल नहीं हो सकते हैं. उदाहरण के लिए, सबफ़ोल्डर के नाम में भाषा कोड के तौर पर es-419 या es-US का इस्तेमाल नहीं किया जा सकता. हालांकि, es का इस्तेमाल किया जा सकता है.

    अगर आपको किसी खास क्षेत्र या देश के लिए कॉन्टेंट दिखाना है, तो ऐसे सबफ़ोल्डर बनाए जा सकते हैं जिनमें भाषा और देश के हिसाब से वह कॉन्टेंट मौजूद हो जिसे आपको दिखाना है.

"i18n कॉन्टेंट" के लिए प्राथमिकता का क्रम

अगर i18n रीराइट सेट अप किए जाते हैं, तो Hosting कॉन्टेंट को इस प्राथमिकता क्रम के हिसाब से दिखाती है:

  1. रिज़र्व किए गए नेमस्पेस, जो /__/* पाथ सेगमेंट से शुरू होते हैं

  2. कॉन्फ़िगर किए गए रीडायरेक्ट

  3. पूरी तरह मेल खाने वाला स्टैटिक कॉन्टेंट

    1. भाषा कोड + देश का कोड (उदाहरण के लिए, fr_ca/से कॉन्टेंट)
      क्रम, अनुरोध के Accept-Language हेडर में मौजूद हर भाषा की क्वालिटी वैल्यू के हिसाब से होता है.

    2. सिर्फ़ देश का कोड (उदाहरण के लिए, ALL_ca/ से कॉन्टेंट)

    3. सिर्फ़ भाषा कोड (उदाहरण के लिए, fr/ या es_ALL/ से कॉन्टेंट)
      क्रम, अनुरोध के Accept-Language हेडर में मौजूद हर भाषा की क्वालिटी वैल्यू के हिसाब से होता है.

    4. पूरी तरह मेल खाने वाला "डिफ़ॉल्ट" स्टैटिक कॉन्टेंट
      यह वह कॉन्टेंट होता है जो "i18n कॉन्टेंट" डायरेक्ट्री के बाहर मौजूद होता है. जैसे, public डायरेक्ट्री के रूट में.

  4. कॉन्फ़िगर किए गए रीराइट

  5. 404 को हैंडल करना

    1. i18n 404 पेज
      इसके लिए, पूरी तरह मेल खाने वाले स्टैटिक कॉन्टेंट के लिए ऊपर बताए गए प्राथमिकता क्रम का पालन किया जाता है.

    2. पसंद के मुताबिक बनाया गया 404 पेज

    3. डिफ़ॉल्ट 404 पेज (Firebase से उपलब्ध कराया गया)

प्राथमिकता क्रम का उदाहरण

ऊपर दिए गए उदाहरण को जारी रखते हैं. हम उसी उदाहरण डायरेक्ट्री और अनुरोध का इस्तेमाल करेंगे.

  • "i18n कॉन्टेंट" डायरेक्ट्री (जिसे localized-files कहा जाता है) वाली स्थानीय प्रोजेक्ट डायरेक्ट्री का उदाहरण

    public/
        index.html  // your site's default homepage
        404.html  // your site's custom 404 page
    
        localized-files/
            ALL_ca/
                index.html
            es_ALL/
                index.html
                404.html
            fr/
                index.html
                404.html
            fr_ca/
                index.html
  • अनुरोध की जानकारी का उदाहरण

    • भाषा कोड: fr, en (पहले फ़्रेंच, फिर अंग्रेज़ी)
      भाषा कोड, Accept-Language हेडर में मौजूद क्वालिटी वैल्यू के आधार पर क्रम में लगाए जाते हैं.

    • देश का कोड: ca (कनाडा)

पूरी तरह मेल खाने वाले कॉन्टेंट के लिए प्राथमिकता के क्रम और भाषा की प्राथमिकताओं की क्वालिटी वैल्यू के हिसाब से, Hosting अनुरोध किए गए पेज के लिए डायरेक्ट्री में इस क्रम में खोज करेगी.

  1. public/localized-files/fr_ca/

  2. public/localized-files/en_ca/

  3. public/localized-files/ALL_ca/

  4. public/localized-files/fr_ALL/

  5. public/localized-files/fr/

  6. public/localized-files/en_ALL/

  7. public/localized-files/en/

  8. public/

  9. 404 को हैंडल करना

उपयोगकर्ता को कौनसा पेज दिखाया जाएगा?

  • अनुरोध किया गया पेज: index.html

  • अनुरोध किया गया पेज: awesome-page.html

"i18n कॉन्टेंट" डायरेक्ट्री की खोज और उसे दिखाने के बारे में ये बातें ध्यान रखें:

  • localized-files/ डायरेक्ट्री में, en_ca/, en_ALL/, या en/ सबफ़ोल्डर मौजूद नहीं हैं. इसलिए, Hosting प्राथमिकता सूची में तब तक आगे बढ़ती रहेगी, जब तक उसे अनुरोध की भाषा और देश के कॉम्बिनेशन के लिए कोई मिलता-जुलता सबफ़ोल्डर नहीं मिल जाता.

  • भले ही, localized-files/ डायरेक्ट्री में es_ALL/ सबफ़ोल्डर मौजूद हो, लेकिन ऊपर दिए गए उदाहरण अनुरोध में es या es-foo भाषा कोड शामिल नहीं है. इसलिए, Hosting, es से मेल खाने वाले "i18n कॉन्टेंट" की खोज नहीं करेगी.

  • उपयोगकर्ता के देश और भाषा की प्राथमिकताओं के हिसाब से, fr/ और fr_ALL/ नाम वाले सबफ़ोल्डर एक जैसे होते हैं. हालांकि, अगर दोनों सबफ़ोल्डर मौजूद हैं, तो Hosting fr/ कॉन्टेंट से पहले fr_ALL/ कॉन्टेंट दिखाएगी.

देश और भाषा के हेडर को बदलने के लिए, कुकी का इस्तेमाल करके यह बदला जा सकता है कि कौनसा कॉन्टेंट दिखाया जाए.

कुकी को बदलने की सुविधा का इस्तेमाल करने के कुछ तरीके यहां दिए गए हैं:

  • अलग-अलग भाषा/देश के कॉम्बिनेशन के साथ किसी सुविधा को टेस्ट करके देखें कि कौनसा कॉन्टेंट दिखाया जाता है.

  • अपने उपयोगकर्ताओं को यह सुविधा दें कि वे अपने हिसाब से कॉन्टेंट बदल सकें. उदाहरण के लिए, भाषा चुनने की सुविधा लागू की जा सकती है. इसके बाद, उपयोगकर्ता की firebase-language-override कुकी को उसके हिसाब से सेट किया जा सकता है.

कुकी को बदलने की सुविधा कॉन्फ़िगर करने के लिए, इन दोनों या इनमें से किसी एक नाम वाली कुकी सेट करें: firebase-country-override और firebase-language-override. उदाहरण के लिए, JavaScript कोड का यह स्निपेट, देश के कोड को ca और Accept-Language हेडर को fr,en में बदल देता है:

document.cookie = "firebase-country-override=ca";
document.cookie = "firebase-language-override=fr,en";

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

कुकी को बदलने की सुविधा, लॉग में नहीं दिखती.