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

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

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

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

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

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

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

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

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

यहां इस बारे में ज़्यादा जानकारी दी गई है:

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

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

    यहां localized-files नाम की "i18n कॉन्टेंट" डायरेक्ट्री का उदाहरण दिया गया है:

    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

    public/
        // matches requests that aren't specified by your "i18n content" subfolders
        // example: display your homepage in the "default" language for your site with no country-specific features
        index.html  // your site's default homepage
        404.html  // your site's custom 404 page
    
        localized-files/
    
            // matches requests from Canada with any language preference
            // example: display your homepage in the "default" language for your site with a Canada-specific feature
            ALL_ca/
                index.html
    
            // matches requests from any country with a language preference of `es` or `es-foo`
            // example: display your homepage in Spanish with no country-specific features
            es_ALL/
                index.html
                404.html  // your site's custom 404 page in Spanish
    
            // matches requests from any country with a language preference of `fr` or `fr-foo`
            // example: display your homepage in Standard French with no country-specific features
            fr/
                index.html
                404.html  // your site's custom 404 page in French
    
            // matches requests from Canada with a language preference of `fr` or `fr-foo`
            // example: display your homepage in Canadian French and/or with a Canada-specific feature
            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 content" सब-फ़ोल्डर का नाम देते समय, आपको देश और भाषा के कोड, दोनों के लिए छोटे अक्षरों का इस्तेमाल करना होगा. ALL (केस-सेंसिटिव) की वैल्यू का इस्तेमाल करके, किसी देश (जैसे, es_ALL/) या किसी भाषा (जैसे, ALL_ca/) की जानकारी दी जा सकती है.

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

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

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

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

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

    इस उदाहरण में, स्पेन से es, es-es या es-419 भाषा के लिए किए गए अनुरोध पर, es_es/ सब-फ़ोल्डर से कॉन्टेंट दिखाया जाएगा. इसकी वजह यह है कि Hosting उन सभी भाषा कोड को es के तौर पर इस्तेमाल करता है.

    अमेरिका, मेक्सिको या किसी भी ऐसे देश से मिले अनुरोध के लिए जिसकी भाषा की प्राथमिकता es-419 है, es_ALL/ सब-फ़ोल्डर से कॉन्टेंट दिखाया जाएगा. इसकी वजह यह है कि Hosting, es-419 को es के तौर पर इस्तेमाल करता है.

    public/
        // matches requests that aren't specified by your "i18n content" subfolders
        index.html  // the site's default homepage
    
        localized-files/
    
            // matches requests from Spain with a language preference of `es` or `es-foo`
            es_es/
                index.html
    
            // matches requests from any other country with a language preference of `es` or `es-foo`
            es_ALL/
                index.html

    इस उदाहरण में, मेक्सिको से es-419 भाषा के लिए किए गए अनुरोध पर, es_mx/ सब-फ़ोल्डर का कॉन्टेंट दिखाया जाएगा. ऐसा इसलिए, क्योंकि Hosting, भाषा कोड es-419 को es के तौर पर इस्तेमाल करता है.

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

    public/
        // matches requests that aren't specified by your "i18n content" subfolders
        index.html  // the site's default homepage
    
        localized-files/
    
            // matches requests from Argentina with a language preference of `es` or `es-foo` (mimics behavior of `es-ar` header tag)
            es_ar/
                index.html
    
            // matches requests from Spain with a language preference of `es` or `es-foo` (mimics behavior of `es-es` header tag)
            es_es/
                index.html
    
            // matches requests from Mexico with a language preference of `es` or `es-foo` (mimics behavior of `es-mx` header tag)
            es_mx/
                index.html
    
            // matches requests from any other country with a language preference of `es` or `es-foo` (mimics behavior of `es-419` header tag)
            es_ALL/
                index.html

"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

    fr_ca/ सब-फ़ोल्डर से index.html

    Hosting सबसे पहले fr_ca/ सब-फ़ोल्डर में खोज करता है. इसलिए, उसे उस सब-फ़ोल्डर में index.html का एग्ज़ैक्ट मैच मिलेगा.

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

    fr/ सब-फ़ोल्डर से 404.html

    Hosting, एग्ज़ैक्ट मैच के लिए प्राथमिकता के क्रम में पूरी डायरेक्ट्री (इसमें सभी "i18n कॉन्टेंट" सबफ़ोल्डर और रूट डायरेक्ट्री शामिल हैं) को सबसे पहले खोजता है. हालांकि, awesome-page.html के लिए कोई एग्ज़ैक्ट मैच नहीं है.

    इसलिए, Hosting 404 को हैंडल करना शुरू कर देगा. यह एग्ज़ैक्ट मैच वाली खोजों के लिए तय किए गए i18n प्राथमिकता क्रम का पालन करता है. fr/ सब-फ़ोल्डर, खोजा गया पहला सब-फ़ोल्डर है जिसमें 404 पेज मौजूद है.

"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";

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

कुकी ओवरराइड, लॉग में नहीं दिखते.