Định cấu hình ghi lại quốc tế hóa (i18n)

Sử dụng các bản viết lại quốc tế hóa ("bản viết lại i18n") để phục vụ 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 nào).
    Ví dụ: trang chủ có văn bản tiếng Pháp

  • Cung cấp nội dung tiếng Pháp 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, hãy cung cấp nội dung tiếng Pháp của Canada thay thế.
    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ể ngôn ngữ ưu tiên 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 (chẳng hạn như chủ đề ngày lễ)

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

Dịch vụ lưu trữ Firebase 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 đặt tự động bởi trình duyệt web của họ ).

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

Để thiết lập tính năng ghi lại 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, 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ộ, 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 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 đó, chẳng hạn như trang chủ theo chủ đề ngày lễ hoặc trang 404 theo ngôn ngữ cụ thể.

    Đây là một ví dụ thư mục "i18n content" đượ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 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ị của 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" ở 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à định cấu hình cho 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 ghi đè cookie .

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

Khi đặt tên cho các 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à mã ngôn ngữ. Bạn có thể sử dụng giá trị của 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 đặt tự động bởi trình duyệt web của họ ). Chúng là mã ISO 639-1 . Hãy ghi nhớ những điều sau đây khi sử dụng mã ngôn ngữ:

  • Khi Dịch vụ lưu trữ tìm kiếm "nội dung i18n" nào để phân phát, Dịch vụ lưu trữ sẽ sắp xếp các 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 , vì vậy 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 phục vụ nội dung quốc gia hoặc khu vực 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 phục vụ 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 đoạn đường dẫn /__/*

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

  3. Đối sánh chính xác nội dung tĩnh

    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. cấu hình viết lại

  5. xử lý 404

    1. i18n 404 trang
      Điều này tuân theo cùng thứ tự ưu tiên được liệt kê ở trên đối với nội dung tĩnh đối sánh 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ừ phía trên. Chúng tôi sẽ sử dụng cùng một thư mục ví dụ và một yêu cầu ví dụ.

  • 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, sau đó là tiếng Anh)
      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 đối sánh chính xác và các giá trị chất lượng cho tùy chọn ngôn ngữ, Dịch vụ lưu trữ 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ề 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/ nên Dịch vụ lưu trữ sẽ bỏ qua danh sách ưu tiên cho đến khi tìm thấy 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 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/ là tương đương với 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, Dịch vụ lưu trữ 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 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 tổ hợp ngôn ngữ/quốc gia khác nhau để kiểm tra xem nội dung nào được phục vụ.

  • Cho phép người dùng của bạn thay đổi nội dung mà 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 tương ứng.

Để định cấu hình 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 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.

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