আন্তর্জাতিকীকরণ (i18n) পুনর্লিখন কনফিগার করুন

ব্যবহারকারীর দেশ বা পছন্দের ভাষার ওপর নির্ভর করে ভিন্ন কন্টেন্ট পরিবেশন করতে আন্তর্জাতিকীকরণ রিরাইট ("i18n রিরাইট") ব্যবহার করুন। এখানে কিছু উদাহরণ কনফিগারেশন দেওয়া হলো যা আপনি সেট আপ করতে পারেন:

  • ফরাসি পছন্দ করেন এমন সকল ব্যবহারকারীকে (দেশ নির্বিশেষে) একই ফরাসি কন্টেন্ট পরিবেশন করুন।
    উদাহরণ: ফরাসি লেখা সহ একটি হোমপেজ

  • যেসব ব্যবহারকারী ফরাসি পছন্দ করেন, তাদের সাধারণ ফরাসি কন্টেন্ট পরিবেশন করুন, কিন্তু যেসব কানাডিয়ান ব্যবহারকারী ফরাসি পছন্দ করেন, তাদের পরিবর্তে কানাডিয়ান ফরাসি কন্টেন্ট পরিবেশন করুন।
    উদাহরণ: প্রমিত ফরাসি বাক্যাংশে লেখা একটি হোমপেজ বনাম কানাডীয় ফরাসি বাক্যাংশে লেখা একটি হোমপেজ

  • সকল কানাডিয়ান ব্যবহারকারীকে (তাদের ভাষার পছন্দ নির্বিশেষে) একই বিষয়বস্তু পরিবেশন করুন।
    উদাহরণ: আপনার সাইটের 'ডিফল্ট' ভাষার একটি হোমপেজ, কিন্তু সাথে কানাডার জন্য বিশেষ কোনো বৈশিষ্ট্য (যেমন ছুটির দিনের থিম)।

  • যেসব কানাডিয়ান ব্যবহারকারী ফরাসি ভাষা পছন্দ করেন, তাদেরকে কানাডিয়ান ফরাসি কন্টেন্ট পরিবেশন করুন।
    উদাহরণ: কানাডিয়ান ফরাসি শব্দচয়ন এবং কানাডা-নির্দিষ্ট বৈশিষ্ট্য (যেমন ছুটির দিনের থিম) সহ একটি হোমপেজ।

Firebase Hosting ব্যবহারকারীর আইপি অ্যাড্রেস থেকে তার দেশ এবং Accept-Language রিকোয়েস্ট হেডার থেকে তার ভাষার পছন্দ নির্ধারণ করে (যা সাধারণত তাদের ওয়েব ব্রাউজার দ্বারা স্বয়ংক্রিয়ভাবে সেট করা হয় )।

i18n রিরাইট সেট আপ করুন

আপনার Hosting সাইটের জন্য i18n রিরাইট সেট আপ করতে, আপনাকে আপনার সমস্ত স্থানীয় কন্টেন্টের জন্য একটি "i18n কন্টেন্ট" ডিরেক্টরি তৈরি করতে হবে, তারপর আপনার নতুন "i18n কন্টেন্ট" ডিরেক্টরিটি নির্দেশ করার জন্য আপনার firebase.json ফাইলে i18n অ্যাট্রিবিউটটি যোগ করতে হবে।

এখানে বিস্তারিত ধাপগুলো দেওয়া হলো:

  1. আপনার স্থানীয় অ্যাপ ডিরেক্টরির public ফোল্ডারের মধ্যে, আপনার "i18n কন্টেন্ট"-এর জন্য একটি আলাদা ডিরেক্টরি তৈরি করুন, তারপর আপনার সাইট দ্বারা সমর্থিত প্রতিটি ভাষা এবং দেশের সংমিশ্রণের জন্য সাবফোল্ডার তৈরি করুন।

    প্রতিটি সাবফোল্ডারে সেই নির্দিষ্ট সংমিশ্রণের জন্য বিষয়বস্তু যোগ করুন, যেমন ছুটির দিনের থিমের হোমপেজ বা ভাষা-ভিত্তিক ৪০৪ পেজ।

    এখানে ' localized-files ' নামের একটি 'i18n content' ডিরেক্টরির উদাহরণ দেওয়া হলো:

    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 এর সমতুল্য।

    এই কোডগুলো সম্পর্কে আরও বিস্তারিত জানতে নিচের ‘দেশ এবং ভাষা কোড’ উপবিভাগটি দেখুন। আপনি যেকোনো দেশ (যেমন es_ALL/ ) বা যেকোনো ভাষা (যেমন ALL_ca/ ) বোঝাতে ALL (কেস-সেনসিটিভ) মানটি ব্যবহার করতে পারেন।

    একটি সাবফোল্ডারের ফাইলগুলোর অনুরূপ ফাইল 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 কন্টেন্ট" সাবফোল্ডারগুলির নামকরণের সময়, আপনাকে দেশ এবং ভাষা কোড উভয়ের জন্যই ছোট হাতের অক্ষর ব্যবহার করতে হবে। আপনি যেকোনো দেশ (যেমন es_ALL/ ) বা যেকোনো ভাষা (যেমন ALL_ca/ ) বোঝাতে ALL (কেস-সেনসিটিভ) মানটি ব্যবহার করতে পারেন।

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 ব্যবহার করতে পারবেন।

    আপনি যদি নির্দিষ্ট আঞ্চলিক বা দেশের কন্টেন্ট পরিবেশন করতে চান, তাহলে আপনি সাবফোল্ডার তৈরি করতে পারেন যেখানে আপনার সমর্থিত নির্দিষ্ট ভাষা ও দেশের কন্টেন্ট থাকবে।

"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. ৪০৪ হ্যান্ডলিং

    1. i18n ৪০৪ পৃষ্ঠা
      এটি এক্সাক্ট-ম্যাচ স্ট্যাটিক কন্টেন্টের জন্য উপরে তালিকাভুক্ত একই অগ্রাধিকার ক্রম অনুসরণ করে।

    2. কাস্টম ৪০৪ পৃষ্ঠা

    3. ডিফল্ট ৪০৪ পৃষ্ঠা (ফায়ারবেস দ্বারা প্রদত্ত)

অগ্রাধিকার ক্রমের উদাহরণ

চলুন, আমরা উপরের উদাহরণটি নিয়ে আলোচনা চালিয়ে যাই। আমরা একই উদাহরণ ডিরেক্টরি এবং একটি উদাহরণ অনুরোধ ব্যবহার করব।

  • একটি "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. ৪০৪ হ্যান্ডলিং

ব্যবহারকারীকে কোন পৃষ্ঠাটি দেখানো হবে?

  • অনুরোধকৃত পৃষ্ঠা: 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/ কন্টেন্ট পরিবেশন করবে।

কুকি ব্যবহার করে দেশ এবং ভাষার হেডারগুলোকে ওভাররাইড করার মাধ্যমে আপনি পরিবেশিত কন্টেন্ট পরিবর্তন করতে পারেন।

কুকি ওভাররাইড ব্যবহার করার কয়েকটি উপায় নিচে দেওয়া হলো:

  • কোন কন্টেন্ট পরিবেশন করা হয় তা যাচাই করতে বিভিন্ন ভাষা/দেশের সমন্বয়ে একটি ফিচার পরীক্ষা করুন।

  • আপনার ব্যবহারকারীদেরকে তাদের দেখা বিষয়বস্তু পরিবর্তন করার সুযোগ দিন। উদাহরণস্বরূপ, আপনি একটি ভাষা বাছাইকারী (language picker) যুক্ত করতে পারেন এবং সেই অনুযায়ী ব্যবহারকারীর firebase-language-override কুকিটি সেট করতে পারেন।

কুকি ওভাররাইড কনফিগার করতে, firebase-country-override এবং firebase-language-override এই নামগুলোর যেকোনো একটি বা উভয়টি দিয়ে কুকি সেট করুন। উদাহরণস্বরূপ, নিম্নলিখিত জাভাস্ক্রিপ্ট কোড স্নিপেটটি কান্ট্রি কোডকে ca এবং Accept-Language হেডারকে fr,en ওভাররাইড করে:

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

ভাষা কুকি ওভাররাইড অবশ্যই পছন্দের ক্রমানুসারে সাজানো ভাষা কোডগুলির একটি কমা-বিভক্ত তালিকা হতে হবে, যেখানে কোনো সাবট্যাগ বা কোয়ালিটি ভ্যালু থাকবে না।

কুকি ওভাররাইডগুলো লগ-এ প্রতিফলিত হয় না।