Cấu hình viết lại quốc tế hóa (i18n)

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

  • Cung cấp cùng một nội dung 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

  • Cung cấp nội dung tiếng Pháp tiêu chuẩn cho 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, thay vào đó hãy phân phát nội dung tiếng Pháp Canada.
    Ví dụ: trang chủ có cụm từ tiếng Pháp chuẩn so với trang chủ có cụm từ tiếng Pháp Canada

  • Cung cấp cùng một nội dung cho tất cả người dùng Canada (bất kể tùy chọn ngôn ngữ của họ).
    Ví dụ: trang chủ có ngôn ngữ "mặc định" trên trang web của bạn nhưng có tính năng dành riêng cho Canada (như chủ đề ngày lễ)

  • Cung cấp nội dung tiếng Pháp của Canada cho 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à tính năng dành riêng cho Canada (như chủ đề ngày lễ)

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

Thiết lập viết lại i18n

Để thiết lập tính năng ghi đè i18n cho trang web Lưu trữ của bạn, bạn cần tạo thư mục "nội dung i18n" cho tất cả nội dung đã bản địa hóa của mình, sau đó thêm thuộc tính i18n vào tệp firebase.json để trỏ đến thư mục "nội dung i18n" mới của bạn.

Dưới đâ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ộ của bạn, hãy tạo một thư mục riêng cho "nội dung i18n" của bạn, sau đó tạo các thư mục con cho từng kết hợp ngôn ngữ và quốc gia được 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 sự kết hợp đó, như trang chủ theo chủ đề ngày lễ hoặc trang 404 theo ngôn ngữ cụ thể.

    Đây là một ví dụ về thư mục "nội dung i18n" được gọi 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ư mục localized-files/ chứa các thư mục con riêng biệt cho từng kết hợp ngôn ngữ và quốc gia được 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 người dùng có tùy chọn ngôn ngữ mã quốc gia đó

    • languageCode : Chứa nội dung dành riêng cho người dùng có tùy 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

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

    Các tệp trong thư mục con không cần phải có cá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 của bạn và chỉ định thư mục chứa "nội dung i18n" của bạn. Tiếp tục ví dụ của chúng tôi:

    // 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ả các thư mục con "nội dung i18n" của bạn. Nếu bạn đặt tất cả các thư mục con "nội dung i18n" vào thư mục gốc của thư mục public , hãy sử dụng / cho giá trị của root . Dấu gạch chéo đầu và cuối trong giá trị root là tùy chọn.

  3. Triển khai "nội dung i18n" và cấu hình của bạn vào trang web Lưu trữ của bạn.

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

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

Khi đặt tên cho thư mục con "nội dung i18n", bạn phải sử dụng chữ thường cho cả mã quốc gia và ngôn ngữ. Bạn có thể sử dụng giá trị ALL (phân biệt chữ hoa chữ thường) để chỉ ra bất kỳ quốc gia nào (như es_ALL/ ) hoặc bất kỳ ngôn ngữ nào (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ã ISO 3166-1 alpha-2 gồm hai chữ cái .

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 của họ đặt tự động ). Chúng là mã ISO 639-1 . Hãy ghi nhớ những điều sau khi sử dụng mã ngôn ngữ:

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

  • Dịch vụ lưu trữ loại bỏ bất kỳ thẻ phụ khu vực và quốc gia nào trong tiêu đề Accept-Language , do đó mã ngôn ngữ trong tên thư mục con "nội dung i18n" 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 bạn có thể sử dụng es .

    Nếu bạn muốn cung cấp nội dung khu vực hoặc quốc gia cụ thể, bạn có thể tạo các thư mục con chứa nội dung ngôn ngữ-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 viết lại i18n, Hosting sẽ phân phối nội dung dựa trên thứ tự ưu tiên sau:

  1. Các vùng tên dành riêng bắt đầu bằng phân đoạn đường dẫn /__/*

  2. Chuyển hướng được định cấu hình

  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", giống như ở thư mục gốc của thư mục public .

  4. Viết lại cấu hình

  5. xử lý 404

    1. i18n 404 trang
      Điều này tuân theo thứ tự ưu tiên tương tự được liệt kê ở trên đối với nội dung tĩnh khớp chính xác.

    2. Trang 404 tùy 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ụ của chúng tôi từ trên. Chúng tôi sẽ sử dụng cùng một thư mục mẫu và một yêu cầu mẫu.

  • Ví dụ thư mục dự án cục bộ có thư mục "nội dung i18n" (được gọi 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 ví dụ

    • Mã ngôn ngữ: fr , en (tiếng Pháp, rồi tiếng Anh)
      Mã ngôn ngữ được sắp xếp dựa trên 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 tùy chọn 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ý 404

Trang nào sẽ được phục vụ 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ề việc tìm kiếm và phục vụ thư mục "nội dung i18n" này:

  • Thư mục localized-files/ không thực sự 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 ưu tiên cho đến khi tìm thấy thư mục con phù hợp cho sự kế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 mẫu ở trên không bao gồm mã ngôn ngữ es hoặc es-foo , do đó Hosting sẽ không tìm kiếm "nội dung i18n" khớp với es .

  • Các thư mục con được gọi là fr/fr_ALL/ tương đương nhau xét theo tùy chọn quốc gia và ngôn ngữ của người dùng. Tuy nhiên, nếu cả hai thư mục con đều tồn tại, Hosting sẽ phân phát fr_ALL/ content trước fr/ content.

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

Dưới đây là một số cách bạn có thể sử dụng ghi đè cookie:

  • Thử nghiệm một tính năng với các kết hợp ngôn ngữ/quốc gia khác nhau để kiểm tra xem nội dung nào được phân phối.

  • Cho phép người dùng của bạn thay đổi nội dung họ nhìn 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 ghi đè cookie, hãy đặt cookie bằng cả hai hoặc một trong hai tên sau: firebase-country-overridefirebase-language-override . Ví dụ: đoạn mã JavaScript sau 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";

Ghi đè cookie ngôn ngữ phải là danh sách 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.

Việc ghi đè cookie không được phản ánh trong nhật ký.