ব্যবহারকারীর দেশ বা পছন্দের ভাষার ওপর নির্ভর করে ভিন্ন কন্টেন্ট পরিবেশন করতে আন্তর্জাতিকীকরণ রিরাইট ("i18n রিরাইট") ব্যবহার করুন। এখানে কিছু উদাহরণ কনফিগারেশন দেওয়া হলো যা আপনি সেট আপ করতে পারেন:
ফরাসি পছন্দ করেন এমন সকল ব্যবহারকারীকে (দেশ নির্বিশেষে) একই ফরাসি কন্টেন্ট পরিবেশন করুন।
উদাহরণ: ফরাসি লেখা সহ একটি হোমপেজযেসব ব্যবহারকারী ফরাসি পছন্দ করেন, তাদের সাধারণ ফরাসি কন্টেন্ট পরিবেশন করুন, কিন্তু যেসব কানাডিয়ান ব্যবহারকারী ফরাসি পছন্দ করেন, তাদের পরিবর্তে কানাডিয়ান ফরাসি কন্টেন্ট পরিবেশন করুন।
উদাহরণ: প্রমিত ফরাসি বাক্যাংশে লেখা একটি হোমপেজ বনাম কানাডীয় ফরাসি বাক্যাংশে লেখা একটি হোমপেজসকল কানাডিয়ান ব্যবহারকারীকে (তাদের ভাষার পছন্দ নির্বিশেষে) একই বিষয়বস্তু পরিবেশন করুন।
উদাহরণ: আপনার সাইটের 'ডিফল্ট' ভাষার একটি হোমপেজ, কিন্তু সাথে কানাডার জন্য বিশেষ কোনো বৈশিষ্ট্য (যেমন ছুটির দিনের থিম)।যেসব কানাডিয়ান ব্যবহারকারী ফরাসি ভাষা পছন্দ করেন, তাদেরকে কানাডিয়ান ফরাসি কন্টেন্ট পরিবেশন করুন।
উদাহরণ: কানাডিয়ান ফরাসি শব্দচয়ন এবং কানাডা-নির্দিষ্ট বৈশিষ্ট্য (যেমন ছুটির দিনের থিম) সহ একটি হোমপেজ।
Firebase Hosting ব্যবহারকারীর আইপি অ্যাড্রেস থেকে তার দেশ এবং Accept-Language রিকোয়েস্ট হেডার থেকে তার ভাষার পছন্দ নির্ধারণ করে (যা সাধারণত তাদের ওয়েব ব্রাউজার দ্বারা স্বয়ংক্রিয়ভাবে সেট করা হয় )।
i18n রিরাইট সেট আপ করুন
আপনার Hosting সাইটের জন্য i18n রিরাইট সেট আপ করতে, আপনাকে আপনার সমস্ত স্থানীয় কন্টেন্টের জন্য একটি "i18n কন্টেন্ট" ডিরেক্টরি তৈরি করতে হবে, তারপর আপনার নতুন "i18n কন্টেন্ট" ডিরেক্টরিটি নির্দেশ করার জন্য আপনার firebase.json ফাইলে i18n অ্যাট্রিবিউটটি যোগ করতে হবে।
এখানে বিস্তারিত ধাপগুলো দেওয়া হলো:
আপনার স্থানীয় অ্যাপ ডিরেক্টরির
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.htmlpublic/ // 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এর সমতুল্য।
এই কোডগুলো সম্পর্কে আরও বিস্তারিত জানতে নিচের ‘দেশ এবং ভাষা কোড’ উপবিভাগটি দেখুন। আপনি যেকোনো দেশ (যেমন
es_ALL/) বা যেকোনো ভাষা (যেমনALL_ca/) বোঝাতেALL(কেস-সেনসিটিভ) মানটি ব্যবহার করতে পারেন।একটি সাবফোল্ডারের ফাইলগুলোর অনুরূপ ফাইল
publicডিরেক্টরি বা অন্যান্য সাবফোল্ডারে থাকার প্রয়োজন নেই। আপনি এমন কন্টেন্ট তৈরি করতে পারেন যা সম্পূর্ণরূপে কোনো একটি ভাষা এবং/অথবা দেশের জন্য নির্দিষ্ট।আপনার
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মানের শুরুতে এবং শেষে স্ল্যাশ দেওয়া ঐচ্ছিক।আপনার 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ব্যবহার করতে পারবেন।আপনি যদি নির্দিষ্ট আঞ্চলিক বা দেশের কন্টেন্ট পরিবেশন করতে চান, তাহলে আপনি সাবফোল্ডার তৈরি করতে পারেন যেখানে আপনার সমর্থিত নির্দিষ্ট ভাষা ও দেশের কন্টেন্ট থাকবে।
এই উদাহরণে, স্পেন থেকে
es,es-es, বা এমনকিes-419ভাষার পছন্দ সহ একটি অনুরোধes_es/সাবফোল্ডার থেকে কন্টেন্ট পাবে, কারণ Hosting এই সমস্ত ভাষা কোডকেesহিসাবে গণ্য করে।মার্কিন যুক্তরাষ্ট্র, মেক্সিকো বা
es-419ভাষা পছন্দ রয়েছে এমন অন্য কোনো দেশ থেকে করা অনুরোধes_ALL/সাবফোল্ডার থেকে কন্টেন্ট পাবে, কারণ Hostinges-419esহিসেবে গণ্য করে।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/সাবফোল্ডার থেকে কন্টেন্ট পাবে, কারণ Hostinges-419ভাষা কোডটিকেesহিসেবে গণ্য করে।তবে, মার্কিন যুক্তরাষ্ট্র থেকে
es-419ভাষার পছন্দসহ কোনো অনুরোধes_ALL/সাবফোল্ডার থেকে কন্টেন্ট পাবে, কারণ Hostinges-419esহিসেবে গণ্য করে এবং সেখানে কোনো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 নিম্নলিখিত অগ্রাধিকার ক্রম অনুসারে কন্টেন্ট পরিবেশন করে:
সংরক্ষিত নেমস্পেস যা একটি
/__/*পাথ সেগমেন্ট দিয়ে শুরু হয়কনফিগার করা পুনঃনির্দেশ
সঠিক-মিল স্থির বিষয়বস্তু
ভাষা কোড + দেশ কোড (উদাহরণস্বরূপ,
fr_ca/থেকে প্রাপ্ত কন্টেন্ট)
অনুরোধেরAccept-Languageহেডারে প্রতিটি ভাষার জন্য নির্ধারিত গুণগত মান অনুসারে ক্রমটি সাজানো হয়।শুধুমাত্র দেশের কোড (উদাহরণস্বরূপ,
ALL_ca/থেকে প্রাপ্ত কন্টেন্ট)শুধুমাত্র ভাষার কোড (উদাহরণস্বরূপ,
fr/বাes_ALL/থেকে প্রাপ্ত বিষয়বস্তু)
অনুরোধেরAccept-Languageহেডারে প্রতিটি ভাষার জন্য নির্ধারিত গুণগত মান অনুসারে ক্রমটি সাজানো হয়।"ডিফল্ট" সঠিক-মিল স্ট্যাটিক বিষয়বস্তু
এটি এমন কন্টেন্ট যা "i18n কন্টেন্ট" ডিরেক্টরির বাইরে থাকে, যেমনpublicডিরেক্টরির রুটে।
কনফিগার করা পুনর্লিখন
৪০৪ হ্যান্ডলিং
i18n ৪০৪ পৃষ্ঠা
এটি এক্সাক্ট-ম্যাচ স্ট্যাটিক কন্টেন্টের জন্য উপরে তালিকাভুক্ত একই অগ্রাধিকার ক্রম অনুসরণ করে।কাস্টম ৪০৪ পৃষ্ঠা
ডিফল্ট ৪০৪ পৃষ্ঠা (ফায়ারবেস দ্বারা প্রদত্ত)
অগ্রাধিকার ক্রমের উদাহরণ
চলুন, আমরা উপরের উদাহরণটি নিয়ে আলোচনা চালিয়ে যাই। আমরা একই উদাহরণ ডিরেক্টরি এবং একটি উদাহরণ অনুরোধ ব্যবহার করব।
একটি "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 অনুরোধ করা পেজটির জন্য ডিরেক্টরিগুলোতে নিম্নলিখিত ক্রমে অনুসন্ধান করবে।
public/localized-files/fr_ca/public/localized-files/en_ca/public/localized-files/ALL_ca/public/localized-files/fr_ALL/public/localized-files/fr/public/localized-files/en_ALL/public/localized-files/en/public/৪০৪ হ্যান্ডলিং
ব্যবহারকারীকে কোন পৃষ্ঠাটি দেখানো হবে?
অনুরোধকৃত পৃষ্ঠা:
index.htmlfr_ca/সাবফোল্ডার থেকেindex.htmlযেহেতু Hosting প্রথমে
fr_ca/সাবফোল্ডারে অনুসন্ধান করে, তাই এটি সেই সাবফোল্ডারেindex.htmlএর হুবহু মিল খুঁজে পাবে।অনুরোধকৃত পৃষ্ঠা:
awesome-page.htmlfr/সাবফোল্ডার থেকে404.htmlHosting প্রথমে অগ্রাধিকার ক্রমে সম্পূর্ণ ডিরেক্টরিতে (সমস্ত "i18n content" সাবফোল্ডার এবং রুট ডিরেক্টরি সহ) একটি হুবহু মিলের জন্য অনুসন্ধান করে, কিন্তু
awesome-page.htmlএর জন্য কোনো হুবহু মিল পাওয়া যায়নি।সুতরাং, Hosting তার 404 হ্যান্ডলিং শুরু করবে, যা এক্সাক্ট-ম্যাচ সার্চের মতোই i18n অগ্রাধিকার ক্রম অনুসরণ করে।
fr/সাবফোল্ডারটিই হলো প্রথম সাবফোল্ডার যা সার্চ করা হয় এবং যেটিতে একটি 404 পেজ থাকে।
"i18n কন্টেন্ট" ডিরেক্টরিটির এই অনুসন্ধান ও পরিবেশন সম্পর্কে নিম্নলিখিত বিষয়গুলো লক্ষ্য করুন:
localized-files/ডিরেক্টরিতে আসলেen_ca/,en_ALL/, বাen/সাবফোল্ডার থাকে না, তাই Hosting অনুরোধের ভাষা-দেশের সংমিশ্রণের জন্য একটি মিলে যাওয়া সাবফোল্ডার না পাওয়া পর্যন্ত অগ্রাধিকার তালিকা ধরে এগোতে থাকবে।যদিও
localized-files/ডিরেক্টরিতে একটিes_ALL/সাবফোল্ডার রয়েছে, উপরের উদাহরণ অনুরোধটিতে কোনোesবাes-fooভাষা কোড অন্তর্ভুক্ত নেই, তাই Hostingesসাথে মেলে এমন "i18n কন্টেন্ট" অনুসন্ধান করবে না।ব্যবহারকারীর দেশ এবং ভাষার পছন্দের দৃষ্টিকোণ থেকে
fr/এবংfr_ALL/নামের সাবফোল্ডার দুটি সমতুল্য। তবে, যদি উভয় সাবফোল্ডারই বিদ্যমান থাকে, তাহলে Hostingfr/কন্টেন্টের আগে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";
ভাষা কুকি ওভাররাইড অবশ্যই পছন্দের ক্রমানুসারে সাজানো ভাষা কোডগুলির একটি কমা-বিভক্ত তালিকা হতে হবে, যেখানে কোনো সাবট্যাগ বা কোয়ালিটি ভ্যালু থাকবে না।
কুকি ওভাররাইডগুলো লগ-এ প্রতিফলিত হয় না।