Konfigurasikan penulisan ulang internasionalisasi (i18n)

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 Prancis

  • Sajikan 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 Kanada

  • Sajikan 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:

  1. 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
    

    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 tersebut

    • languageCode : Berisi konten khusus untuk pengguna yang memiliki preferensi bahasa tersebut, tetapi kontennya tidak spesifik negara; pada dasarnya setara dengan languageCode_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 (seperti es_ALL/ ) atau bahasa apa pun (seperti ALL_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.

  2. Tambahkan atribut i18n ke file firebase.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 direktori public Anda, gunakan / untuk nilai root . Garis miring awal dan akhir dalam nilai root adalah opsional.

  3. 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 menggunakan es-419 atau es-US sebagai kode bahasa dalam nama subfolder, tetapi Anda dapat menggunakan es .

    Jika Anda ingin menyajikan konten regional atau negara tertentu, Anda dapat membuat subfolder yang berisi konten bahasa-negara tertentu yang ingin Anda dukung.

Urutan prioritas untuk "konten i18n"

Jika Anda mengatur penulisan ulang i18n, Hosting menyajikan konten berdasarkan urutan prioritas berikut:

  1. Ruang nama yang dicadangkan yang dimulai dengan segmen jalur /__/*

  2. Pengalihan yang dikonfigurasi

  3. Konten statis pencocokan tepat

    1. Kode bahasa + Kode negara (misalnya, konten dari fr_ca/ )
      Urutan mengikuti nilai kualitas untuk setiap bahasa di header Accept-Language permintaan.

    2. Hanya kode negara (misalnya, konten dari ALL_ca/ )

    3. Hanya kode bahasa (misalnya, konten dari fr/ atau es_ALL/ )
      Urutan mengikuti nilai kualitas untuk setiap bahasa di header Accept-Language permintaan.

    4. Konten statis pencocokan persis "default"
      Ini adalah konten yang berada di luar direktori "konten i18n", seperti di akar direktori public .

  4. Penulisan ulang yang dikonfigurasi

  5. 404 penanganan

    1. i18n 404 halaman
      Ini mengikuti urutan prioritas yang sama yang tercantum di atas untuk konten statis pencocokan tepat.

    2. Halaman 404 khusus

    3. 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 header Accept-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.

  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 penanganan

Halaman mana yang akan disajikan kepada pengguna?

  • Halaman yang diminta: index.html

  • Halaman yang diminta: awesome-page.html

Perhatikan hal berikut tentang pencarian dan layanan direktori "konten i18n" ini:

  • Direktori localized-files/ sebenarnya tidak berisi en_ca/ , en_ALL/ , atau en/ subfolder, jadi Hosting hanya akan melewati daftar prioritas sampai menemukan subfolder yang cocok untuk kombinasi bahasa-negara permintaan.

  • Meskipun direktori localized-files/ berisi subfolder es_ALL/ , permintaan contoh di atas tidak menyertakan kode bahasa es atau es-foo , jadi Hosting tidak akan mencari "konten i18n" yang cocok dengan es .

  • Subfolder yang disebut fr/ dan fr_ALL/ setara dari perspektif preferensi negara dan bahasa pengguna. Namun, jika kedua subfolder ada, Hosting akan menyajikan fr_ALL/ konten sebelum fr/ konten.

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.