ใช้การเขียนใหม่สำหรับการปรับให้เข้ากับหลายภาษา ("การเขียนใหม่สำหรับ i18n") เพื่อแสดงเนื้อหาที่แตกต่างกันโดยขึ้นอยู่กับประเทศหรือภาษาที่ต้องการของผู้ใช้ ต่อไปนี้เป็นตัวอย่างการกำหนดค่าที่คุณตั้งค่าได้
แสดงเนื้อหาภาษาฝรั่งเศสเดียวกันแก่ผู้ใช้ทุกคนที่ต้องการภาษาฝรั่งเศส (ไม่ว่าจะอยู่ในประเทศใดก็ตาม)
ตัวอย่าง: หน้าแรกที่มีข้อความภาษาฝรั่งเศสแสดงเนื้อหาภาษาฝรั่งเศสมาตรฐานต่อผู้ใช้ที่ต้องการภาษาฝรั่งเศส แต่สำหรับผู้ใช้ชาวแคนาดาที่ต้องการภาษาฝรั่งเศส ให้แสดงเนื้อหาภาษาฝรั่งเศสของแคนาดาแทน
ตัวอย่าง: หน้าแรกที่มีวลีภาษาฝรั่งเศสมาตรฐานเทียบกับหน้าแรกที่มีวลีภาษาฝรั่งเศสแคนาดาแสดงเนื้อหาเดียวกันแก่ผู้ใช้ทุกคนในแคนาดา (โดยไม่คำนึงถึงภาษาที่ต้องการ)
ตัวอย่าง: หน้าแรกที่มีภาษา "เริ่มต้น" ของเว็บไซต์ แต่มีฟีเจอร์เฉพาะแคนาดา (เช่น ธีมวันหยุด)แสดงเนื้อหาภาษาฝรั่งเศสสำหรับแคนาดาต่อผู้ใช้ชาวแคนาดาที่ต้องการดูเนื้อหาภาษาฝรั่งเศส
ตัวอย่าง: หน้าแรกที่มีวลีภาษาฝรั่งเศสของแคนาดาและฟีเจอร์เฉพาะแคนาดา (เช่น ธีมวันหยุด)
Firebase Hosting จะกำหนดประเทศของผู้ใช้จากที่อยู่ IP และกำหนดค่าภาษาของผู้ใช้จากส่วนหัวคำขอ Accept-Language
(โดยปกติเว็บเบราว์เซอร์จะตั้งค่าโดยอัตโนมัติ)
ตั้งค่าการเขียนใหม่สำหรับ i18n
หากต้องการตั้งค่าการเขียนใหม่สำหรับ i18n ของเว็บไซต์ Hosting คุณต้องสร้างไดเรกทอรี "i18n content" สำหรับเนื้อหาที่แปลแล้วทั้งหมด จากนั้นเพิ่มแอตทริบิวต์ i18n
ลงในไฟล์ firebase.json
เพื่อชี้ไปยังไดเรกทอรี "i18n content" ใหม่
ขั้นตอนโดยละเอียดมีดังนี้
ภายในโฟลเดอร์
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
หรือโฟลเดอร์ย่อยอื่นๆ คุณสร้างเนื้อหาที่เจาะจงภาษาและ/หรือประเทศได้ทั้งหมดเพิ่มแอตทริบิวต์
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
เป็นค่าที่ไม่บังคับติดตั้งใช้งาน "เนื้อหา 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 จะแสดงเนื้อหาตามลําดับความสําคัญต่อไปนี้
เนมสเปซที่สงวนไว้ซึ่งขึ้นต้นด้วยส่วนเส้นทาง
/__/*
การเปลี่ยนเส้นทางที่กําหนดค่าไว้
เนื้อหาแบบคงที่ที่ตรงกันทั้งหมด
รหัสภาษา + รหัสประเทศ (เช่น เนื้อหาจาก
fr_ca/
)
ลําดับจะเป็นไปตามค่าคุณภาพของแต่ละภาษาในส่วนหัวAccept-Language
ของคําขอรหัสประเทศเท่านั้น (เช่น เนื้อหาจาก
ALL_ca/
)รหัสภาษาเท่านั้น (เช่น เนื้อหาจาก
fr/
หรือes_ALL/
)
ลําดับจะเป็นไปตามค่าคุณภาพของแต่ละภาษาในส่วนหัวAccept-Language
ของคําขอเนื้อหาแบบคงที่ที่ตรงกันทั้งหมด "ค่าเริ่มต้น"
คือเนื้อหาที่อยู่นอกไดเรกทอรี "เนื้อหา i18n" เช่น ที่รูทของไดเรกทอรีpublic
การเขียนใหม่ที่กำหนดค่าไว้
การจัดการ 404
หน้า 404 ที่แปลแล้ว
ลำดับความสำคัญจะเหมือนกับที่ระบุไว้ข้างต้นสำหรับเนื้อหาแบบคงที่ที่ตรงกันทั้งหมดหน้า 404 ที่กำหนดเอง
หน้า 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 จะค้นหาหน้าเว็บที่ขอตามลำดับต่อไปนี้ตามลําดับความสําคัญของการทำงานแบบตรงทั้งหมดและค่าคุณภาพสําหรับค่ากําหนดภาษา
public/localized-files/fr_ca/
public/localized-files/en_ca/
public/localized-files/ALL_ca/
public/localized-files/fr_ALL/
public/localized-files/fr/
public/localized-files/en_ALL/
public/localized-files/en/
public/
การจัดการ 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";
การลบล้างคุกกี้ภาษาต้องเป็นรายการรหัสภาษาที่คั่นด้วยคอมมาตามลำดับที่ต้องการ โดยไม่มีแท็กย่อยหรือค่าคุณภาพ
การลบล้างคุกกี้จะไม่แสดงในบันทึก