ใช้การเขียนใหม่เพื่อการแปลภาษา ("การเขียนใหม่เพื่อ 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 ของ i18n
ซึ่งมีลำดับความสำคัญเดียวกันกับที่ระบุไว้ข้างต้นสำหรับเนื้อหาแบบคงที่ที่ตรงกันทุกประการหน้า 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";
การลบล้างคุกกี้ภาษาต้องเป็นรายการรหัสภาษาที่คั่นด้วยคอมมาตามลำดับความสำคัญ โดยไม่มีค่าแท็กย่อยหรือค่าคุณภาพ
การลบล้างคุกกี้จะไม่แสดงในบันทึก