Gunakan penulisan ulang internasionalisasi ("i18n rewrites") untuk menyajikan konten yang berbeda tergantung pada negara pengguna atau bahasa pilihan. Berikut adalah beberapa contoh konfigurasi yang dapat Anda atur:
Sajikan konten bahasa Prancis yang sama kepada semua pengguna yang lebih menyukai bahasa Prancis (terlepas dari negaranya).
Contoh: beranda dengan teks PrancisSajikan konten Prancis Standar kepada pengguna yang lebih menyukai bahasa Prancis, tetapi untuk pengguna Kanada yang lebih menyukai bahasa Prancis, sajikan konten Prancis Kanada sebagai gantinya.
Contoh: beranda dengan frasa Prancis Standar versus beranda dengan frasa Prancis KanadaSajikan konten yang sama untuk semua pengguna Kanada (terlepas dari preferensi bahasa mereka).
Contoh: beranda dengan bahasa "default" situs Anda tetapi dengan fitur khusus Kanada (seperti tema liburan)Sajikan konten Prancis Kanada kepada pengguna Kanada yang lebih menyukai bahasa Prancis.
Contoh: beranda dengan frasa Prancis Kanada dan fitur khusus Kanada (seperti tema liburan)
Firebase Hosting menentukan negara pengguna dari alamat IP mereka dan preferensi bahasa pengguna dari header permintaan Accept-Language
(biasanya disetel secara otomatis oleh browser web mereka ).
Siapkan penulisan ulang i18n
Untuk menyiapkan penulisan ulang i18n untuk situs Hosting, Anda perlu membuat direktori "konten i18n" untuk semua konten yang dilokalkan, lalu menambahkan atribut i18n
ke file firebase.json
untuk mengarahkan ke direktori "konten i18n" baru Anda.
Berikut langkah-langkah detailnya:
Dalam folder
public
direktori aplikasi lokal Anda, buat direktori terpisah untuk "konten i18n" Anda, lalu buat subfolder untuk setiap kombinasi bahasa dan negara yang didukung oleh situs Anda.Di setiap subfolder, tambahkan konten khusus untuk kombinasi tersebut, seperti beranda bertema liburan atau laman 404 khusus bahasa.
Berikut adalah contoh direktori "i18n content" yang disebut
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
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
Direktori
localized-files/
berisi subfolder terpisah untuk setiap kombinasi bahasa dan negara yang didukung oleh situs Anda. Pola penamaan untuk setiap subfolder harus mengikuti salah satu format berikut:languageCode_countryCode
: Berisi konten khusus untuk pengguna yang memiliki preferensi bahasa dan kode negara tersebutlanguageCode
: Berisi konten khusus untuk pengguna yang memiliki preferensi bahasa tersebut, tetapi kontennya tidak spesifik negara; pada dasarnya setara denganlanguageCode_ALL
Lihat subbagian Kode negara dan bahasa di bawah ini untuk detail selengkapnya tentang kode ini. Anda dapat menggunakan nilai
ALL
(peka huruf besar/kecil) untuk menunjukkan negara mana pun (seperties_ALL/
) atau bahasa apa pun (sepertiALL_ca/
).File dalam subfolder tidak perlu memiliki file analog di direktori
public
atau subfolder lainnya. Anda dapat membuat konten yang sepenuhnya spesifik untuk suatu bahasa dan/atau negara.Tambahkan atribut
i18n
ke filefirebase.json
Anda dan tentukan direktori yang berisi "konten i18n" Anda. Melanjutkan contoh kita:// firebase.json "hosting": { "public": "public", "ignore": [ "firebase.json", "**/.*", "**/node_modules/**" ], "i18n": { "root": "/localized-files" // directory that contains your "i18n content" } ... }
Direktori yang ditentukan untuk
root
harus berupa nama direktori yang berisi semua subfolder "konten i18n" Anda. Jika Anda menempatkan semua subfolder "konten i18n" di root direktoripublic
Anda, gunakan/
untuk nilairoot
. Garis miring awal dan akhir dalam nilairoot
adalah opsional.Terapkan "konten i18n" Anda dan konfigurasikan ke situs Hosting Anda.
Anda dapat menguji pengaturan Anda menggunakan cookie override .
Kode negara dan bahasa
Saat memberi nama subfolder "konten i18n", Anda harus menggunakan huruf kecil untuk kode negara dan bahasa. Anda dapat menggunakan nilai ALL
(peka huruf besar/kecil) untuk menunjukkan negara mana pun (seperti es_ALL/
) atau bahasa apa pun (seperti ALL_ca/
).
Hosting memperoleh kode negara dari alamat IP pengguna. Kode negara adalah kode dua huruf ISO 3166-1 alpha-2 .
Kode bahasa diperoleh dari header permintaan Accept-Language
pengguna (biasanya diatur secara otomatis oleh browser web mereka ). Mereka adalah kode ISO 639-1 . Ingatlah hal-hal berikut saat menggunakan kode bahasa:
Saat Hosting mencari "konten i18n" mana yang akan ditayangkan, Hosting akan mengurutkan bahasa berdasarkan nilai kualitas di header
Accept-Language
.Hosting menghapus subtag regional dan negara apa pun di header
Accept-Language
, sehingga kode bahasa dalam nama subfolder "konten i18n" tidak dapat berisi subtag ini. Misalnya, Anda tidak dapat menggunakanes-419
ataues-US
sebagai kode bahasa dalam nama subfolder, tetapi Anda dapat menggunakanes
.Jika Anda ingin menyajikan konten regional atau negara tertentu, Anda dapat membuat subfolder yang berisi konten bahasa-negara tertentu yang ingin Anda dukung.
Dalam contoh ini, permintaan dari Spanyol dengan preferensi bahasa
es
,es-es
, atau bahkanes-419
akan menerima konten dari subfolderes_es/
karena Hosting memperlakukan semua kode bahasa tersebut sebagaies
.Permintaan dari Amerika Serikat, Meksiko, atau negara lain mana pun dengan preferensi bahasa
es-419
akan menerima konten dari subfolderes_ALL/
karena Hosting memperlakukanes-419
sebagaies
.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
Dalam contoh ini, permintaan dari Meksiko dengan preferensi bahasa
es-419
akan menerima konten dari subfolderes_mx/
karena Hosting memperlakukan kode bahasaes-419
sebagaies
.Namun, permintaan dari Amerika Serikat dengan preferensi bahasa
es-419
akan menerima konten dari subfolderes_ALL/
karena Hosting memperlakukanes-419
sebagaies
dan tidak ada subfolderes_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
Urutan prioritas untuk "konten i18n"
Jika Anda mengatur penulisan ulang i18n, Hosting menyajikan konten berdasarkan urutan prioritas berikut:
Ruang nama yang dicadangkan yang dimulai dengan segmen jalur
/__/*
Pengalihan yang dikonfigurasi
Konten statis pencocokan tepat
Kode bahasa + Kode negara (misalnya, konten dari
fr_ca/
)
Urutan mengikuti nilai kualitas untuk setiap bahasa di headerAccept-Language
permintaan.Hanya kode negara (misalnya, konten dari
ALL_ca/
)Hanya kode bahasa (misalnya, konten dari
fr/
ataues_ALL/
)
Urutan mengikuti nilai kualitas untuk setiap bahasa di headerAccept-Language
permintaan.Konten statis pencocokan persis "default"
Ini adalah konten yang berada di luar direktori "konten i18n", seperti di akar direktoripublic
.
Penulisan ulang yang dikonfigurasi
404 penanganan
i18n 404 halaman
Ini mengikuti urutan prioritas yang sama yang tercantum di atas untuk konten statis pencocokan tepat.Halaman 404 khusus
Halaman 404 default (disediakan oleh Firebase)
Contoh untuk urutan prioritas
Mari kita lanjutkan contoh kita dari atas. Kami akan menggunakan direktori contoh yang sama dan permintaan contoh.
Contoh direktori proyek lokal dengan direktori "i18n content" (disebut
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
Contoh permintaan informasi
Kode bahasa:
fr
,en
(Prancis, lalu Inggris)
Kode bahasa diurutkan berdasarkan nilai kualitas di headerAccept-Language
.Kode negara:
ca
(Kanada)
Menurut urutan prioritas pencocokan tepat dan nilai kualitas untuk preferensi bahasa, Hosting akan mencari direktori untuk halaman yang diminta dalam urutan berikut.
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/
404 penanganan
Halaman mana yang akan disajikan kepada pengguna?
Halaman yang diminta:
index.html
index.html
dari subfolderfr_ca/
Karena Hosting mencari subfolder
fr_ca/
terlebih dahulu, ia akan menemukan pencocokan tepat untukindex.html
di subfolder tersebut.Halaman yang diminta:
awesome-page.html
404.html
dari subfolderfr/
Hosting pertama-tama menelusuri seluruh direktori (termasuk semua subfolder "konten i18n" dan direktori root) dalam urutan prioritas untuk pencocokan tepat, tetapi tidak ada pencocokan tepat untuk
awesome-page.html
.Jadi, Hosting akan memulai penanganan 404, yang mengikuti urutan prioritas i18n yang sama dengan pencarian pencocokan tepat. Subfolder
fr/
adalah subfolder pertama yang dicari yang berisi halaman 404.
Perhatikan hal berikut tentang pencarian dan layanan direktori "konten i18n" ini:
Direktori
localized-files/
sebenarnya tidak berisien_ca/
,en_ALL/
, atauen/
subfolder, jadi Hosting hanya akan melewati daftar prioritas sampai menemukan subfolder yang cocok untuk kombinasi bahasa-negara permintaan.Meskipun direktori
localized-files/
berisi subfolderes_ALL/
, permintaan contoh di atas tidak menyertakan kode bahasaes
ataues-foo
, jadi Hosting tidak akan mencari "konten i18n" yang cocok denganes
.Subfolder yang disebut
fr/
danfr_ALL/
setara dari perspektif preferensi negara dan bahasa pengguna. Namun, jika kedua subfolder ada, Hosting akan menyajikanfr_ALL/
konten sebelumfr/
konten.
Ganti bahasa dan kode negara dengan cookie
Anda dapat mengubah konten apa yang disajikan dengan menggunakan cookie untuk mengganti header negara dan bahasa.
Berikut adalah beberapa cara Anda dapat menggunakan penggantian cookie:
Uji fitur dengan kombinasi bahasa/negara yang berbeda untuk memeriksa konten mana yang disajikan.
Aktifkan pengguna Anda untuk mengubah konten yang mereka lihat. Misalnya, Anda dapat mengimplementasikan pemilih bahasa, lalu menyetel cookie
firebase-language-override
pengguna yang sesuai.
Untuk mengonfigurasi penggantian cookie, setel cookie dengan kedua atau salah satu nama berikut: firebase-country-override
dan firebase-language-override
. Misalnya, cuplikan kode JavaScript berikut menimpa kode negara menjadi ca
dan header Accept-Language
menjadi fr,en
:
document.cookie = "firebase-country-override=ca";
document.cookie = "firebase-language-override=fr,en";
Penggantian cookie bahasa harus berupa daftar kode bahasa yang dipisahkan koma dalam urutan preferensi, tanpa subtag atau nilai kualitas.
Penggantian cookie tidak tercermin dalam log.