กำหนดค่าการปรับให้เป็นสากล (i18n) ที่เขียนใหม่

ใช้การเขียนใหม่สำหรับการปรับให้เข้ากับหลายภาษา ("การเขียนใหม่สำหรับ i18n") เพื่อแสดงเนื้อหาที่แตกต่างกันโดยขึ้นอยู่กับประเทศหรือภาษาที่ต้องการของผู้ใช้ ต่อไปนี้เป็นตัวอย่างการกำหนดค่าที่คุณตั้งค่าได้

  • แสดงเนื้อหาภาษาฝรั่งเศสเดียวกันแก่ผู้ใช้ทุกคนที่ต้องการภาษาฝรั่งเศส (ไม่ว่าจะอยู่ในประเทศใดก็ตาม)
    ตัวอย่าง: หน้าแรกที่มีข้อความภาษาฝรั่งเศส

  • แสดงเนื้อหาภาษาฝรั่งเศสมาตรฐานต่อผู้ใช้ที่ต้องการภาษาฝรั่งเศส แต่สำหรับผู้ใช้ชาวแคนาดาที่ต้องการภาษาฝรั่งเศส ให้แสดงเนื้อหาภาษาฝรั่งเศสของแคนาดาแทน
    ตัวอย่าง: หน้าแรกที่มีวลีภาษาฝรั่งเศสมาตรฐานเทียบกับหน้าแรกที่มีวลีภาษาฝรั่งเศสแคนาดา

  • แสดงเนื้อหาเดียวกันแก่ผู้ใช้ทุกคนในแคนาดา (โดยไม่คำนึงถึงภาษาที่ต้องการ)
    ตัวอย่าง: หน้าแรกที่มีภาษา "เริ่มต้น" ของเว็บไซต์ แต่มีฟีเจอร์เฉพาะแคนาดา (เช่น ธีมวันหยุด)

  • แสดงเนื้อหาภาษาฝรั่งเศสสำหรับแคนาดาต่อผู้ใช้ชาวแคนาดาที่ต้องการดูเนื้อหาภาษาฝรั่งเศส
    ตัวอย่าง: หน้าแรกที่มีวลีภาษาฝรั่งเศสของแคนาดาและฟีเจอร์เฉพาะแคนาดา (เช่น ธีมวันหยุด)

Firebase Hosting จะกำหนดประเทศของผู้ใช้จากที่อยู่ IP และกำหนดค่าภาษาของผู้ใช้จากส่วนหัวคำขอ Accept-Language (โดยปกติเว็บเบราว์เซอร์จะตั้งค่าโดยอัตโนมัติ)

ตั้งค่าการเขียนใหม่สำหรับ i18n

หากต้องการตั้งค่าการเขียนใหม่สำหรับ i18n ของเว็บไซต์ Hosting คุณต้องสร้างไดเรกทอรี "i18n content" สำหรับเนื้อหาที่แปลแล้วทั้งหมด จากนั้นเพิ่มแอตทริบิวต์ i18n ลงในไฟล์ firebase.json เพื่อชี้ไปยังไดเรกทอรี "i18n content" ใหม่

ขั้นตอนโดยละเอียดมีดังนี้

  1. ภายในโฟลเดอร์ public ของไดเรกทอรีแอปในเครื่อง ให้สร้างไดเรกทอรีแยกต่างหากสำหรับ "เนื้อหา i18n" จากนั้นสร้างโฟลเดอร์ย่อยสำหรับชุดค่าผสมภาษาและประเทศแต่ละชุดที่เว็บไซต์รองรับ

    ในโฟลเดอร์ย่อยแต่ละโฟลเดอร์ ให้เพิ่มเนื้อหาที่เจาะจงสำหรับชุดค่าผสมนั้น เช่น หน้าแรกธีมวันหยุดหรือหน้า 404 สำหรับภาษาที่เฉพาะเจาะจง

    ตัวอย่างไดเรกทอรี "เนื้อหา i18n" ชื่อ 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

    ไดเรกทอรี localized-files/ มีโฟลเดอร์ย่อยแยกกันสำหรับชุดค่าผสมภาษาและประเทศแต่ละชุดที่เว็บไซต์รองรับ รูปแบบการตั้งชื่อสำหรับโฟลเดอร์ย่อยแต่ละโฟลเดอร์ต้องเป็นไปตามรูปแบบใดรูปแบบหนึ่งต่อไปนี้

    • languageCode_countryCode: มีเนื้อหาสำหรับผู้ใช้ที่มีการตั้งค่าภาษานั้นและรหัสประเทศนั้นโดยเฉพาะ

    • languageCode: มีเนื้อหาสำหรับผู้ใช้ที่ต้องการภาษานั้นโดยเฉพาะ แต่เนื้อหาไม่ได้เจาะจงประเทศ โดยพื้นฐานแล้วเทียบเท่ากับ languageCode_ALL

    ดูรายละเอียดเพิ่มเติมเกี่ยวกับรหัสเหล่านี้ได้ในส่วนย่อยรหัสประเทศและภาษาด้านล่าง คุณสามารถใช้ค่าของ ALL (ต้องตรงตามตัวพิมพ์ใหญ่-เล็ก) เพื่อระบุประเทศใดก็ได้ (เช่น es_ALL/) หรือภาษาใดก็ได้ (เช่น ALL_ca/)

    ไฟล์ในโฟลเดอร์ย่อยไม่จำเป็นต้องมีไฟล์ที่คล้ายกันในไดเรกทอรี public หรือโฟลเดอร์ย่อยอื่นๆ คุณสร้างเนื้อหาที่เจาะจงภาษาและ/หรือประเทศได้ทั้งหมด

  2. เพิ่มแอตทริบิวต์ i18n ลงในไฟล์ firebase.json และระบุไดเรกทอรีที่มี "เนื้อหา i18n" ต่อจากตัวอย่าง

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

    ไดเรกทอรีที่ระบุสำหรับ root ต้องเป็นชื่อไดเรกทอรีที่มีโฟลเดอร์ย่อย "เนื้อหา i18n" ทั้งหมด หากคุณวางโฟลเดอร์ย่อย "เนื้อหา i18n" ทั้งหมดไว้ที่รูทของไดเรกทอรี public ให้ใช้ / เป็นค่าของ root เครื่องหมายทับนำและเครื่องหมายทับต่อท้ายในค่า root เป็นค่าที่ไม่บังคับ

  3. ติดตั้งใช้งาน "เนื้อหา i18n" และกำหนดค่าในเว็บไซต์ Hosting

คุณสามารถทดสอบการตั้งค่าโดยใช้การลบล้างคุกกี้

รหัสประเทศและภาษา

เมื่อตั้งชื่อโฟลเดอร์ย่อย "เนื้อหา i18n" คุณต้องใส่ทั้งรหัสประเทศและรหัสภาษาเป็นตัวพิมพ์เล็ก คุณสามารถใช้ค่า ALL (ต้องตรงตามตัวพิมพ์ใหญ่-เล็ก) เพื่อระบุประเทศใดก็ได้ (เช่น es_ALL/) หรือภาษาใดก็ได้ (เช่น ALL_ca/)

Hosting รับรหัสประเทศจากที่อยู่ IP ของผู้ใช้ รหัสประเทศเป็นรหัส ISO 3166-1 alpha-2 แบบ 2 อักขระ

ระบบจะรับรหัสภาษาจากAccept-Languageส่วนหัวคำขอของผู้ใช้ (โดยปกติแล้วเว็บเบราว์เซอร์จะตั้งค่าโดยอัตโนมัติ) รหัสเหล่านี้คือรหัส ISO 639-1 โปรดคำนึงถึงสิ่งต่อไปนี้เมื่อใช้รหัสภาษา

  • เมื่อ Hosting ค้นหา "เนื้อหา i18n" ที่จะแสดง ระบบจะจัดเรียงภาษาตามค่าคุณภาพในส่วนหัว Accept-Language

  • Hosting จะวางแท็กย่อยระดับภูมิภาคและประเทศในส่วนหัว Accept-Language ดังนั้นรหัสภาษาในชื่อโฟลเดอร์ย่อย "เนื้อหา i18n" จึงต้องมีแท็กย่อยเหล่านี้ เช่น คุณใช้ es-419 หรือ es-US เป็นรหัสภาษาในชื่อโฟลเดอร์ย่อยไม่ได้ แต่ใช้ es ได้

    หากต้องการแสดงเนื้อหาระดับภูมิภาคหรือประเทศที่เฉพาะเจาะจง คุณสามารถสร้างโฟลเดอร์ย่อยที่มีเนื้อหาภาษา-ประเทศที่เฉพาะเจาะจงซึ่งคุณต้องการรองรับ

ลำดับความสำคัญสำหรับ "เนื้อหา i18n"

หากคุณตั้งค่าการเขียนใหม่สำหรับ i18n Hosting จะแสดงเนื้อหาตามลําดับความสําคัญต่อไปนี้

  1. เนมสเปซที่สงวนไว้ซึ่งขึ้นต้นด้วยส่วนเส้นทาง /__/*

  2. การเปลี่ยนเส้นทางที่กําหนดค่าไว้

  3. เนื้อหาแบบคงที่ที่ตรงกันทั้งหมด

    1. รหัสภาษา + รหัสประเทศ (เช่น เนื้อหาจาก fr_ca/)
      ลําดับจะเป็นไปตามค่าคุณภาพของแต่ละภาษาในส่วนหัวAccept-Languageของคําขอ

    2. รหัสประเทศเท่านั้น (เช่น เนื้อหาจาก ALL_ca/)

    3. รหัสภาษาเท่านั้น (เช่น เนื้อหาจาก fr/ หรือ es_ALL/)
      ลําดับจะเป็นไปตามค่าคุณภาพของแต่ละภาษาในส่วนหัวAccept-Languageของคําขอ

    4. เนื้อหาแบบคงที่ที่ตรงกันทั้งหมด "ค่าเริ่มต้น"
      คือเนื้อหาที่อยู่นอกไดเรกทอรี "เนื้อหา i18n" เช่น ที่รูทของไดเรกทอรี public

  4. การเขียนใหม่ที่กำหนดค่าไว้

  5. การจัดการ 404

    1. หน้า 404 ที่แปลแล้ว
      ลำดับความสำคัญจะเหมือนกับที่ระบุไว้ข้างต้นสำหรับเนื้อหาแบบคงที่ที่ตรงกันทั้งหมด

    2. หน้า 404 ที่กำหนดเอง

    3. หน้า 404 เริ่มต้น (จาก Firebase)

ตัวอย่างลําดับความสําคัญ

มาดูตัวอย่างจากด้านบนต่อ เราจะใช้ไดเรกทอรีตัวอย่างและคําขอตัวอย่างเดียวกัน

  • ตัวอย่างไดเรกทอรีโปรเจ็กต์ในเครื่องที่มีไดเรกทอรี "เนื้อหา i18n" (ชื่อ 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
  • ตัวอย่างข้อมูลคำขอ

    • รหัสภาษา: fr, en (ฝรั่งเศส ตามด้วยอังกฤษ)
      ระบบจะจัดเรียงรหัสภาษาตามค่าคุณภาพในส่วนหัวAccept-Language

    • รหัสประเทศ: ca (แคนาดา)

Hosting จะค้นหาหน้าเว็บที่ขอตามลำดับต่อไปนี้ตามลําดับความสําคัญของการทำงานแบบตรงทั้งหมดและค่าคุณภาพสําหรับค่ากําหนดภาษา

  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

ระบบจะแสดงหน้าใดต่อผู้ใช้

  • หน้าที่ขอ: index.html

  • หน้าที่ขอ: awesome-page.html

โปรดทราบข้อมูลต่อไปนี้เกี่ยวกับการค้นหาและแสดงไดเรกทอรี "เนื้อหา i18n"

  • ไดเรกทอรี localized-files/ ไม่ได้มีโฟลเดอร์ย่อย en_ca/, en_ALL/ หรือ en/ จริง ๆ Hosting จึงจะข้ามรายการลำดับความสำคัญไปจนกว่าจะพบโฟลเดอร์ย่อยที่ตรงกับชุดค่าผสมภาษา-ประเทศของคำขอ

  • แม้ว่าไดเรกทอรี localized-files/ จะมีโฟลเดอร์ย่อย es_ALL/ แต่ตัวอย่างคําขอด้านบนไม่มีรหัสภาษา es หรือ es-foo ดังนั้น Hosting จะไม่ค้นหา "เนื้อหา i18n" ที่ตรงกับ es

  • โฟลเดอร์ย่อยที่ชื่อ fr/ และ fr_ALL/ ถือว่าเท่าเทียมกันจากมุมมองของการตั้งค่าประเทศและภาษาของผู้ใช้ อย่างไรก็ตาม หากทั้ง 2 โฟลเดอร์ย่อยมีอยู่ Hosting จะแสดงเนื้อหา fr_ALL/ ก่อนเนื้อหา fr/

คุณเปลี่ยนเนื้อหาที่แสดงได้โดยใช้คุกกี้เพื่อลบล้างส่วนหัวประเทศและภาษา

ตัวอย่างวิธีใช้การลบล้างคุกกี้มีดังนี้

  • ทดสอบฟีเจอร์ด้วยชุดค่าผสมภาษา/ประเทศต่างๆ เพื่อดูว่าระบบแสดงเนื้อหาใด

  • อนุญาตให้ผู้ใช้เปลี่ยนเนื้อหาที่ตนเห็น เช่น คุณอาจใช้เครื่องมือเลือกภาษา แล้วตั้งค่าคุกกี้firebase-language-overrideของผู้ใช้ตามความเหมาะสม

หากต้องการกําหนดค่าการลบล้างคุกกี้ ให้ตั้งค่าคุกกี้โดยใช้ชื่อทั้ง 2 รายการต่อไปนี้ หรือจะใช้ชื่อใดชื่อหนึ่งก็ได้ firebase-country-override และ firebase-language-override ตัวอย่างเช่น ข้อมูลโค้ด JavaScript ต่อไปนี้จะลบล้างรหัสประเทศเป็น ca และส่วนหัว Accept-Language เป็น fr,en

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

การลบล้างคุกกี้ภาษาต้องเป็นรายการรหัสภาษาที่คั่นด้วยคอมมาตามลำดับที่ต้องการ โดยไม่มีแท็กย่อยหรือค่าคุณภาพ

การลบล้างคุกกี้จะไม่แสดงในบันทึก