از بازنویسیهای بینالمللی ("بازنویسیهای i18n") برای ارائه محتوای متفاوت بسته به کشور یا زبان ترجیحی کاربر استفاده کنید. در اینجا چند نمونه پیکربندی که میتوانید تنظیم کنید، آورده شده است:
محتوای فرانسوی یکسانی را برای همه کاربرانی که فرانسوی را ترجیح میدهند (صرف نظر از کشور) ارائه دهید.
مثال: صفحه اصلی با متن فرانسویمحتوای فرانسوی استاندارد را برای کاربرانی که فرانسوی را ترجیح میدهند ارائه دهید، اما برای کاربران کانادایی که فرانسوی را ترجیح میدهند، محتوای فرانسوی کانادایی را ارائه دهید.
مثال: صفحه اصلی با عبارتبندی فرانسوی استاندارد در مقابل صفحه اصلی با عبارتبندی فرانسوی کاناداییمحتوای یکسانی را برای همه کاربران کانادایی (صرف نظر از ترجیح زبانی آنها) ارائه دهید.
مثال: یک صفحه اصلی با زبان "پیشفرض" سایت شما اما با یک ویژگی خاص کانادا (مانند یک تم تعطیلات)محتوای فرانسوی کانادایی را به کاربران کانادایی که فرانسوی را ترجیح میدهند، ارائه دهید.
مثال: یک صفحه اصلی با عبارات فرانسوی کانادایی و یک ویژگی خاص کانادا (مانند یک تم تعطیلات)
Firebase Hosting کشور کاربر را از آدرس IP و تنظیمات زبان کاربر را از هدر درخواست Accept-Language (که معمولاً به طور خودکار توسط مرورگر وب آنها تنظیم میشود ) تعیین میکند.
تنظیم بازنویسیهای i18n
برای تنظیم بازنویسیهای i18n برای سایت Hosting خود، باید یک دایرکتوری "i18n content" برای تمام محتوای محلیشده خود ایجاد کنید، سپس ویژگی i18n را به فایل firebase.json خود اضافه کنید تا به دایرکتوری جدید "i18n content" شما اشاره کند.
در اینجا مراحل دقیق آمده است:
در پوشه
publicدایرکتوری برنامه محلی خود، یک دایرکتوری جداگانه برای "محتوای i18n" خود ایجاد کنید، سپس برای هر ترکیب زبان و کشور پشتیبانی شده توسط سایت خود، زیرپوشههایی ایجاد کنید.در هر زیرپوشه، محتوای مخصوص آن ترکیب را اضافه کنید، مانند صفحات اصلی با تم تعطیلات یا صفحات خطای ۴۰۴ مخصوص زبان.
در اینجا یک مثال از دایرکتوری "i18n content" با نام
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.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است
برای جزئیات بیشتر در مورد این کدها، به زیربخش «کدهای کشور و زبان » در زیر مراجعه کنید. میتوانید از مقدار
ALL(حساس به حروف بزرگ و کوچک) برای نشان دادن هر کشوری (مانندes_ALL/) یا هر زبانی (مانندALL_ca/) استفاده کنید.فایلهای موجود در یک زیرپوشه نیازی به داشتن فایلهای مشابه در دایرکتوری
publicیا سایر زیرپوشهها ندارند. شما میتوانید محتوایی ایجاد کنید که کاملاً مختص یک زبان و/یا کشور باشد.ویژگی
i18nرا به فایلfirebase.jsonخود اضافه کنید و دایرکتوری حاوی "محتوای i18n" خود را مشخص کنید. مثال ما را ادامه دهید:// firebase.json "hosting": { "public": "public", "ignore": [ "firebase.json", "**/.*", "**/node_modules/**" ], "i18n": { "root": "/localized-files" // directory that contains your "i18n content" } ... }
دایرکتوری مشخص شده برای
rootباید نام دایرکتوری باشد که شامل تمام زیرپوشههای "i18n content" شما باشد. اگر تمام زیرپوشههای "i18n content" خود را در ریشه دایرکتوریpublicخود قرار دادهاید، از/برای مقدارrootاستفاده کنید. استفاده از اسلشهای (/) در ابتدا و انتهای مقدارrootاختیاری است.«محتوای i18n» و پیکربندی خود را در سایت Hosting خود مستقر کنید.
شما میتوانید تنظیمات خود را با استفاده از لغو کوکیها (cookie overrides) آزمایش کنید.
کدهای کشور و زبان
هنگام نامگذاری زیرپوشههای "i18n content"، باید از حروف کوچک برای کدهای کشور و زبان استفاده کنید. میتوانید از مقدار ALL (حساس به حروف کوچک و بزرگ) برای نشان دادن هر کشوری (مانند es_ALL/ ) یا هر زبانی (مانند ALL_ca/ ) استفاده کنید.
Hosting کد کشور را از آدرس IP کاربر دریافت میکند. کدهای کشور، کدهای دو حرفی 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 محتوا را بر اساس ترتیب اولویت زیر ارائه میدهد:
فضاهای نام رزرو شده که با بخش مسیر
/__/*شروع میشوندتغییر مسیرهای پیکربندی شده
محتوای استاتیک با تطابق دقیق
کد زبان + کد کشور (برای مثال، محتوا از
fr_ca/)
این ترتیب از مقادیر کیفیت برای هر زبان در سربرگAccept-Languageدرخواست پیروی میکند.فقط کد کشور (برای مثال، محتوا از
ALL_ca/)فقط کد زبان (برای مثال، محتوای
fr/یاes_ALL/)
این ترتیب از مقادیر کیفیت برای هر زبان در سربرگAccept-Languageدرخواست پیروی میکند.محتوای استاتیک «پیشفرض» با تطابق دقیق
این محتوایی است که خارج از دایرکتوری "i18n content" قرار دارد، مثلاً در ریشه دایرکتوریpublic.
بازنویسیهای پیکربندیشده
رسیدگی به خطای ۴۰۴
صفحات ۴۰۴ i18n
این از همان ترتیب اولویت ذکر شده در بالا برای محتوای استاتیک دقیقاً منطبق پیروی میکند.صفحه ۴۰۴ سفارشی
صفحه پیشفرض ۴۰۴ (ارائه شده توسط Firebase)
مثال برای ترتیب اولویت
بیایید مثال بالا را ادامه دهیم. ما از همان دایرکتوری مثال و یک درخواست مثال استفاده خواهیم کرد.
مثال دایرکتوری پروژه محلی با دایرکتوری "i18n content" (به نام
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.htmlindex.htmlاز زیرپوشهfr_ca/از آنجایی که Hosting ابتدا زیرپوشه
fr_ca/را جستجو میکند، دقیقاً مطابق باindex.htmlرا در آن زیرپوشه پیدا خواهد کرد.صفحه درخواستی:
awesome-page.html404.htmlاز زیرپوشهfr/Hosting ابتدا کل دایرکتوری (شامل تمام زیرپوشههای "i18n content" و دایرکتوری ریشه) را به ترتیب اولویت برای یافتن یک تطابق دقیق جستجو میکند، اما هیچ تطابق دقیقی برای
awesome-page.htmlوجود ندارد.بنابراین، Hosting مدیریت خطای ۴۰۴ خود را آغاز میکند که از همان ترتیب اولویت i18n مانند جستجوهای دقیق منطبق پیروی میکند. زیرپوشه
fr/اولین زیرپوشهای است که جستجو میشود و حاوی صفحه ۴۰۴ است.
به نکات زیر در مورد این جستجو و سرویسدهی در دایرکتوری "i18n content" توجه کنید:
دایرکتوری
localized-files/در واقع شامل زیرپوشههایen_ca/،en_ALL/یاen/نیست، بنابراین Hosting لیست اولویت را تا زمانی که زیرپوشهای مطابق با ترکیب زبان-کشور درخواست پیدا کند، نادیده میگیرد.اگرچه دایرکتوری
localized-files/شامل زیرپوشهes_ALL/است، درخواست مثال بالا شامل کد زبانesیاes-fooنمیشود، بنابراین Hosting به دنبال "i18n content" که باesمطابقت داشته باشد، نخواهد گشت.زیرپوشههایی به نام
fr/وfr_ALL/از نظر کشور و زبان مورد نظر کاربر معادل هستند. با این حال، اگر هر دو زیرپوشه وجود داشته باشند، Hosting محتوایfr_ALL/را قبل از محتوایfr/ارائه میدهد.
لغو کدهای زبان و کشور با کوکیها
شما میتوانید با استفاده از کوکیها برای لغو سربرگهای کشور و زبان، محتوای ارائه شده را تغییر دهید.
در اینجا چند روش برای استفاده از لغو کوکیها آورده شده است:
یک ویژگی را با ترکیبهای مختلف زبان/کشور آزمایش کنید تا ببینید کدام محتوا ارائه میشود.
به کاربران خود این امکان را بدهید که محتوایی را که میبینند تغییر دهند. برای مثال، میتوانید یک انتخابگر زبان پیادهسازی کنید، سپس کوکی
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";
لغو کوکیهای زبانی باید فهرستی از کدهای زبانی باشد که به ترتیب اولویت با ویرگول از هم جدا شدهاند، بدون زیربرچسبها یا مقادیر کیفی.
لغو کوکیها در گزارشها منعکس نمیشود.