Đị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 các chữ viết lại của quốc tế hoá ("nội dung viết lại theo ngôn ngữ cụ thể") để cung cấp 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ố ví dụ 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ối nội dung tiếng Pháp chuẩn cho người dùng thích tiếng Pháp, nhưng Người dùng Canada thích tiếng Pháp, phân phát nội dung tiếng Pháp ở 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ừ Cách diễn đạ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ể họ ngôn ngữ ưu tiên).
    Ví dụ: một trang chủ có "mặc định" của trang web nhưng có ngôn ngữ Tính năng dành riêng cho Canada (như chủ đề ngày lễ)

  • Phân phát nội dung tiếng Pháp ở Canada cho người dùng Canada thích tiếng Pháp.
    Ví dụ: trang chủ có các cụm từ tiếng Pháp ở Canada và một cụm từ đặc trưng cho Canada tính năng (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 và lựa chọn ưu tiên về ngôn ngữ của người dùng từ tiêu đề của 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 tính năng viết lại i18n

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

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 mỗi ngôn ngữ và tổ hợp 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 dành riêng cho tổ hợp đó, chẳng hạn như trang chủ theo chủ đề ngày lễ hoặc trang 404 dành riêng cho từng ngôn ngữ.

    Dưới đây là ví dụ về "nội dung i18n" thư mục 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ư mục localized-files/ chứa các thư mục con riêng cho mỗi thư mục 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 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 những người có lựa chọn ngôn ngữ ưu tiên mã quốc gia đó

    • languageCode: Chứa nội dung dành riêng cho người dùng đó ngôn ngữ ưu tiên, nhưng nội dung không cụ thể theo quốc gia; 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ỳ quốc gia nào ngôn ngữ (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 public hoặ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 rồi chỉ định 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ả "nội dung i18n" của bạn thư mục con. Nếu bạn đã đặt tất cả "Nội dung i18n" các thư mục con ở gốc thư mục public, hãy dùng / cho giá trị root. Dấu gạch chéo ở đầu và ở cuối trong giá trị root là không bắt buộc.

  3. Triển khai "nội dung i18n" và định cấu hình vào trang web Lưu trữ 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 "nội dung i18n" thư mục con, bạn phải sử dụng chữ thường cho cả hai 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) để cho biết bất kỳ quốc gia nào (như es_ALL/) hoặc bất kỳ ngôn ngữ nào (như ALL_ca/).

Dịch vụ lưu trữ lấy mã quốc gia từ địa chỉ IP của người dùng. Mã quốc gia có hai chữ cái Mã ISO 3166-1 alpha-2.

Mã ngôn ngữ 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ọ). Đó là mã ISO 639-1. Hãy lưu ý những điều sau khi sử dụng mã ngôn ngữ:

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

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

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

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 theo chuẩn i18n, tính năng Lưu trữ sẽ phân phát nội dung dựa trên các thứ tự ưu tiên:

  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. Lệnh chuyển hướng đã đị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ự này tuân theo các giá trị chất lượng cho mỗi ngôn ngữ trong yêu cầu Tiêu đề Accept-Language.

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

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

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

  4. Tính năng ghi lại đã định cấu hình

  5. Xử lý lỗi 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 cho đối sánh chính xác nội dung tĩnh.

    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 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ụ về thư mục dự án cục bộ có "nội dung i18n" thư mục (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
    
  • Ví dụ về thông tin của yêu cầ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 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 ngôn ngữ ưu tiên, Lưu trữ sẽ tìm kiếm các thư mục để 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 về hoạt động tìm kiếm và phân phát này của "nội dung i18n" thư mục:

  • Thư mục localized-files/ không thực sự chứa en_ca/, en_ALL/ hoặc en/ thư mục con, nên Lưu trữ sẽ chỉ bỏ qua phần 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.

  • Mặc dù thư mục localized-files/ chứa es_ALL/ thư mục con, thì yêu cầu ví dụ ở trên không bao gồm es hoặc es-foo mã ngôn ngữ, nên dịch vụ Lưu trữ 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 là fr/fr_ALL/ là tương đương với nhau 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ả hai thư mục con 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 phân phát bằng cách sử dụng cookie để ghi đè quốc gia và tiêu đề ngôn ngữ.

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

  • Thử nghiệm một tính năng với các cách kết hợp ngôn ngữ/quốc gia khác nhau để kiểm tra xem đượ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 một bộ chọn ngôn ngữ, sau đó đặt firebase-language-override cookie cho phù hợp.

Để đị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 đây sẽ ghi đè mã quốc gia là 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à một danh sách mã ngôn ngữ được phân tách bằng dấu phẩy thứ tự ưu tiên mà 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ý.