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

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

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

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

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

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

Firebase Hosting लोगों के आईपी पते से उनके देश की जानकारी और a 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";

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

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