Định cấu hình tính năng viết lại cho quy trình quốc tế hoá (i18n)

Sử dụng tính năng viết lại nội dung quốc tế hoá ("nội dung viết lại theo ngôn ngữ cụ thể") để phân phát các nội dung khác nhau, tuỳ thuộc vào quốc gia hoặc ngôn ngữ ưu tiên của người dùng. Sau đây là một số cấu hình mẫu mà bạn có thể thiết lập:

  • Phân phát cùng một nội dung bằng tiếng Pháp cho tất cả người dùng thích tiếng Pháp (bất kể quốc gia).
    Ví dụ: trang chủ có văn bản tiếng Pháp

  • Phân phát nội dung tiếng Pháp chuẩn cho những người dùng thích tiếng Pháp, nhưng đối với người dùng Canada thích tiếng Pháp, hãy phân phát nội dung tiếng Pháp của Canada.
    Ví dụ: trang chủ có các cụm từ tiếng Pháp chuẩn so với trang chủ có các cụm từ tiếng Pháp ở Canada

  • Phân phát cùng một nội dung cho tất cả người dùng ở Canada (bất kể ngôn ngữ họ ưu tiên).
    Ví dụ: trang chủ có ngôn ngữ "mặc định" của trang web nhưng có một tính năng dành riêng cho Canada (chẳng hạn như giao diện theo mùa lễ)

  • Phân phát nội dung tiếng Pháp của Canada cho những người dùng Canada thích tiếng Pháp.
    Ví dụ: trang chủ có cụm từ tiếng Pháp ở Canada và một tính năng dành riêng cho Canada (chẳng hạn như giao diện ngày lễ)

Firebase Hosting xác định quốc gia của người dùng qua địa chỉ IP và lựa chọn ưu tiên về ngôn ngữ của người dùng qua tiêu đề yêu cầu Accept-Language (thường do trình duyệt web tự động đặt).

Thiết lập tính năng viết lại i18n

Để thiết lập các tính năng viết lại i18n cho trang web Hosting, bạn cần tạo thư mục "i18n content" cho mọi nội dung đã bản địa hoá, sau đó thêm thuộc tính i18n vào tệp firebase.json để trỏ đến thư mục "i18n content" mới.

Sau đây là các bước chi tiết:

  1. Trong thư mục public của thư mục ứng dụng cục bộ, hãy tạo một thư mục riêng cho "nội dung i18n", sau đó tạo thư mục con cho từng tổ hợp ngôn ngữ và quốc gia mà trang web của bạn hỗ trợ.

    Trong mỗi thư mục con, hãy thêm nội dung cụ thể cho tổ hợp đó, chẳng hạn như trang chủ theo chủ đề kỳ nghỉ hoặc trang 404 theo ngôn ngữ cụ thể.

    Dưới đây là ví dụ về thư mục "i18n content" có tên 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

    Thư mục localized-files/ chứa các thư mục con riêng biệt cho từng tổ hợp ngôn ngữ và quốc gia mà trang web của bạn hỗ trợ. Mẫu đặt tên cho mỗi thư mục con phải tuân theo một trong các định dạng sau:

    • languageCode_countryCode: Chứa nội dung dành riêng cho những người dùng có lựa chọn ưu tiên về ngôn ngữ mã quốc gia đó

    • languageCode: Chứa nội dung dành riêng cho những người dùng có tuỳ chọn ngôn ngữ đó, nhưng nội dung không dành riêng cho quốc gia; về cơ bản tương đương với languageCode_ALL

    Hãy tham khảo tiểu mục Mã quốc gia và mã ngôn ngữ bên dưới để biết thêm thông tin chi tiết về các mã này. Bạn có thể sử dụng giá trị của ALL (có phân biệt chữ hoa chữ thường) để chỉ định bất kỳ quốc gia nào (chẳng hạn như es_ALL/) hoặc bất kỳ ngôn ngữ nào (chẳng hạn như ALL_ca/).

    Các tệp trong thư mục con không cần có tệp tương tự trong thư mục public hoặc các thư mục con khác. Bạn có thể tạo nội dung hoàn toàn dành riêng cho một ngôn ngữ và/hoặc quốc gia.

  2. Thêm thuộc tính i18n vào tệp firebase.json và chỉ định thư mục chứa "nội dung i18n" của bạn. Tiếp tục ví dụ:

    // firebase.json
    
    "hosting": {
    
      "public": "public",
    
      "ignore": [
        "firebase.json",
        "**/.*",
        "**/node_modules/**"
      ],
    
      "i18n": {
        "root": "/localized-files"  // directory that contains your "i18n content"
      }
    
      ...
    }

    Thư mục được chỉ định cho root phải là tên của thư mục chứa tất cả thư mục con "nội dung i18n". Nếu bạn đã đặt tất cả thư mục con "nội dung i18n" ở thư mục gốc của thư mục public, hãy sử dụng / cho giá trị của root. Bạn không bắt buộc phải sử dụng dấu gạch chéo ở đầu và cuối trong giá trị root.

  3. Triển khai "nội dung i18n" và định cấu hình cho trang web Hosting của bạn.

Bạn có thể kiểm tra chế độ thiết lập bằng cách sử dụng tính năng ghi đè cookie.

Mã quốc gia và mã ngôn ngữ

Khi đặt tên cho thư mục con "i18n content", bạn phải sử dụng chữ thường cho cả mã quốc gia và mã ngôn ngữ. Bạn có thể sử dụng giá trị của ALL (có phân biệt chữ hoa chữ thường) để chỉ định bất kỳ quốc gia nào (chẳng hạn như es_ALL/) hoặc bất kỳ ngôn ngữ nào (chẳng hạn như ALL_ca/).

Hosting lấy mã quốc gia từ địa chỉ IP của người dùng. Mã quốc gia là mã gồm 2 chữ cái theo ISO 3166-1 alpha-2.

Mã ngôn ngữ được lấy từ tiêu đề yêu cầu Accept-Language của người dùng (thường được trình duyệt web tự động đặt). Đó là mã ISO 639-1. Hãy lưu ý những điều sau khi sử dụng mã ngôn ngữ:

  • Khi tìm kiếm "nội dung i18n" để phân phát, Hosting sẽ sắp xếp các ngôn ngữ dựa trên giá trị chất lượng trong tiêu đề Accept-Language.

  • Hosting sẽ loại bỏ mọi thẻ phụ theo khu vực và quốc gia trong tiêu đề Accept-Language, vì vậy, mã ngôn ngữ trong tên thư mục con "i18n content" không thể chứa các thẻ phụ này. Ví dụ: bạn không thể sử dụng es-419 hoặc es-US làm mã ngôn ngữ trong tên thư mục con, nhưng có thể sử dụng es.

    Nếu muốn phân phát nội dung theo khu vực hoặc quốc gia cụ thể, bạn có thể tạo thư mục con chứa nội dung theo ngôn ngữ và quốc gia cụ thể mà bạn muốn hỗ trợ.

Thứ tự ưu tiên cho "nội dung i18n"

Nếu bạn thiết lập tính năng viết lại i18n, Hosting sẽ phân phát nội dung dựa trên thứ tự ưu tiên sau:

  1. Không gian tên dành riêng bắt đầu bằng một phân đoạn đường dẫn /__/*

  2. Đã định cấu hình lệnh chuyển hướng

  3. Nội dung tĩnh khớp chính xác

    1. Mã ngôn ngữ + Mã quốc gia (ví dụ: nội dung từ fr_ca/)
      Thứ tự tuân theo các giá trị chất lượng cho từng ngôn ngữ trong tiêu đề Accept-Language của yêu cầu.

    2. Chỉ mã quốc gia (ví dụ: nội dung từ ALL_ca/)

    3. Chỉ mã ngôn ngữ (ví dụ: nội dung từ fr/ hoặc es_ALL/)
      Thứ tự tuân theo các giá trị chất lượng cho từng ngôn ngữ trong tiêu đề Accept-Language của yêu cầu.

    4. Nội dung tĩnh khớp chính xác "Mặc định"
      Đây là nội dung nằm ngoài thư mục "nội dung i18n", chẳng hạn như ở thư mục gốc của thư mục public.

  4. Đã định cấu hình tính năng viết lại

  5. Xử lý lỗi 404

    1. Trang 404 i18n
      Trang này tuân theo thứ tự ưu tiên nêu trên đối với nội dung tĩnh khớp chính xác.

    2. Trang 404 tuỳ chỉnh

    3. Trang 404 mặc định (do Firebase cung cấp)

Ví dụ về thứ tự ưu tiên

Hãy tiếp tục ví dụ ở trên. Chúng ta sẽ sử dụng cùng một thư mục mẫu và một yêu cầu mẫu.

  • Ví dụ về thư mục dự án cục bộ có thư mục "nội dung i18n" (có tên là 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
  • Thông tin yêu cầu mẫu

    • Mã ngôn ngữ: fr, en (tiếng Pháp, sau đó là tiếng Anh)
      Các mã ngôn ngữ được sắp xếp dựa trên các giá trị chất lượng trong tiêu đề Accept-Language.

    • Mã quốc gia: ca (Canada)

Theo thứ tự ưu tiên khớp chính xác và giá trị chất lượng cho lựa chọn ưu tiên về ngôn ngữ, Hosting sẽ tìm kiếm các thư mục cho trang được yêu cầu theo thứ tự sau.

  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. Xử lý lỗi 404

Trang nào sẽ được phân phát cho người dùng?

  • Trang được yêu cầu: index.html

  • Trang được yêu cầu: awesome-page.html

Lưu ý những điều sau đây về tính năng tìm kiếm và phân phát thư mục "nội dung i18n":

  • Thư mục localized-files/ thực sự không chứa các thư mục con en_ca/, en_ALL/ hoặc en/. Vì vậy, Hosting sẽ chỉ bỏ qua danh sách mức độ ưu tiên cho đến khi tìm thấy một thư mục con phù hợp cho tổ hợp ngôn ngữ-quốc gia của yêu cầu.

  • Mặc dù thư mục localized-files/ chứa thư mục con es_ALL/, nhưng yêu cầu ví dụ ở trên không bao gồm mã ngôn ngữ es hoặc es-foo, vì vậy, Hosting sẽ không tìm kiếm "nội dung i18n" khớp với es.

  • Các thư mục con có tên fr/fr_ALL/ tương đương nhau theo lựa chọn ưu tiên về quốc gia và ngôn ngữ của người dùng. Tuy nhiên, nếu có cả hai thư mục con, thì Hosting sẽ phân phát nội dung fr_ALL/ trước nội dung fr/.

Bạn có thể thay đổi nội dung được phân phát bằng cách sử dụng cookie để ghi đè tiêu đề quốc gia và ngôn ngữ.

Sau đây là một số cách bạn có thể sử dụng tính năng ghi đè cookie:

  • Kiểm thử một tính năng với nhiều tổ hợp ngôn ngữ/quốc gia để kiểm tra nội dung nào được phân phát.

  • Cho phép người dùng thay đổi nội dung mà họ thấy. Ví dụ: bạn có thể triển khai bộ chọn ngôn ngữ, sau đó đặt cookie firebase-language-override của người dùng cho phù hợp.

Để định cấu hình cơ chế ghi đè cookie, hãy đặt cookie có cả hai hoặc một trong hai tên sau: firebase-country-overridefirebase-language-override. Ví dụ: đoạn mã JavaScript sau đây ghi đè mã quốc gia thành ca và tiêu đề Accept-Language thành fr,en:

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

Cookie ghi đè ngôn ngữ phải là danh sách các mã ngôn ngữ được phân tách bằng dấu phẩy theo thứ tự ưu tiên, không có thẻ phụ hoặc giá trị chất lượng.

Các chế độ ghi đè cookie không được phản ánh trong nhật ký.