ใช้การเขียนซ้ำสากล ("การเขียนซ้ำ i18n") เพื่อให้บริการเนื้อหาที่แตกต่างกันโดยขึ้นอยู่กับประเทศของผู้ใช้หรือภาษาที่ต้องการ ต่อไปนี้เป็นตัวอย่างการกำหนดค่าที่คุณสามารถตั้งค่าได้:
แสดงเนื้อหาภาษาฝรั่งเศสแบบเดียวกันแก่ผู้ใช้ ทุก คนที่ชอบภาษาฝรั่งเศส (โดยไม่คำนึงถึงประเทศ)
ตัวอย่าง: หน้าแรกที่มีข้อความภาษาฝรั่งเศสแสดงเนื้อหาภาษาฝรั่งเศสมาตรฐานแก่ผู้ใช้ที่ชอบภาษาฝรั่งเศส แต่สำหรับผู้ใช้ชาว แคนาดา ที่ชอบภาษาฝรั่งเศส ให้แสดงเนื้อหาภาษาฝรั่งเศสของแคนาดาแทน
ตัวอย่าง: หน้าแรกที่มีข้อความภาษาฝรั่งเศสมาตรฐานกับหน้าแรกที่มีข้อความภาษาฝรั่งเศสแบบแคนาดาให้บริการเนื้อหาเดียวกันแก่ผู้ใช้ชาวแคนาดา ทุกคน (โดยไม่คำนึงถึงการตั้งค่าภาษา)
ตัวอย่าง: หน้าแรกที่มีภาษา "เริ่มต้น" ของไซต์ของคุณ แต่มีคุณลักษณะเฉพาะของแคนาดา (เช่น ธีมวันหยุด)ให้บริการเนื้อหาภาษาฝรั่งเศสของแคนาดาแก่ผู้ใช้ชาวแคนาดาที่ชอบภาษาฝรั่งเศส
ตัวอย่าง: หน้าแรกที่มีข้อความภาษาฝรั่งเศสแบบแคนาดาและฟีเจอร์เฉพาะของแคนาดา (เช่น ธีมวันหยุด)
โฮสติ้งของ Firebase จะกำหนดประเทศของผู้ใช้จากที่อยู่ IP และค่ากำหนดภาษาของผู้ใช้จากส่วนหัวของคำขอ Accept-Language
(โดยปกติ จะตั้งค่าโดยอัตโนมัติโดยเว็บเบราว์เซอร์ )
ตั้งค่าการเขียนซ้ำ i18n
ในการตั้งค่าการเขียนซ้ำ i18n สำหรับไซต์โฮสติ้ง คุณต้องสร้างไดเร็กทอรี "i18n content" สำหรับเนื้อหาที่แปลเป็นภาษาท้องถิ่นทั้งหมดของคุณ จากนั้นเพิ่มแอตทริบิวต์ i18n
ลงในไฟล์ firebase.json
เพื่อชี้ไปยังไดเร็กทอรี "i18n content" ใหม่ของคุณ
นี่คือขั้นตอนโดยละเอียด:
ภายในโฟลเดอร์
public
ของไดเรกทอรีแอปในเครื่องของคุณ ให้สร้างไดเรกทอรีแยกต่างหากสำหรับ "เนื้อหา i18n" ของคุณ จากนั้นสร้างโฟลเดอร์ย่อยสำหรับแต่ละภาษาและชุดค่าผสมประเทศที่ไซต์ของคุณสนับสนุนในแต่ละโฟลเดอร์ย่อย ให้เพิ่มเนื้อหาเฉพาะสำหรับชุดค่าผสมนั้น เช่น หน้าแรกที่มีธีมวันหยุดหรือหน้า 404 เฉพาะภาษา
นี่คือตัวอย่างไดเร็กทอรี "i18n content" ที่เรียกว่า
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
public/ // matches requests that aren't specified by your "i18n content" subfolders // example: display your homepage in the "default" language for your site with no country-specific features index.html // your site's default homepage 404.html // your site's custom 404 page localized-files/ // matches requests from Canada with any language preference // example: display your homepage in the "default" language for your site with a Canada-specific feature ALL_ca/ index.html // matches requests from any country with a language preference of `es` or `es-foo` // example: display your homepage in Spanish with no country-specific features es_ALL/ index.html 404.html // your site's custom 404 page in Spanish // matches requests from any country with a language preference of `fr` or `fr-foo` // example: display your homepage in Standard French with no country-specific features fr/ index.html 404.html // your site's custom 404 page in French // matches requests from Canada with a language preference of `fr` or `fr-foo` // example: display your homepage in Canadian French and/or with a Canada-specific feature 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 content" ทั้งหมดของคุณ หากคุณวางโฟลเดอร์ย่อย "i18n content" ทั้งหมดที่รูทของไดเร็กทอรีpublic
ให้ใช้/
สำหรับค่าของroot
เครื่องหมายทับและต่อท้ายในค่าroot
เป็นทางเลือกปรับใช้ "เนื้อหา i18n" ของคุณและกำหนดค่าไปยังไซต์โฮสติ้งของคุณ
คุณสามารถทดสอบการตั้งค่าของคุณโดยใช้ การแทนที่คุกกี้
รหัสประเทศและภาษา
เมื่อตั้งชื่อโฟลเดอร์ย่อย "เนื้อหา i18n" คุณต้องใช้ตัวพิมพ์เล็กสำหรับทั้งรหัสประเทศและภาษา คุณสามารถใช้ค่า ALL
(คำนึงถึงตัวพิมพ์เล็กและใหญ่) เพื่อระบุประเทศ ใดก็ได้ (เช่น es_ALL/
) หรือภาษา ใดก็ได้ (เช่น ALL_ca/
)
โฮสติ้งได้รับรหัสประเทศจากที่อยู่ IP ของผู้ใช้ รหัสประเทศคือ รหัส ISO 3166-1 alpha-2 สองตัวอักษร
รหัสภาษาจะได้รับจากส่วนหัวของคำขอ Accept-Language
ของผู้ใช้ (โดยปกติ แล้วเว็บเบราว์เซอร์จะตั้งค่าโดยอัตโนมัติ ) คือ รหัส ISO 639-1 โปรดคำนึงถึงสิ่งต่อไปนี้เมื่อใช้รหัสภาษา:
เมื่อโฮสติ้งค้นหาว่า "เนื้อหา i18n" ใดที่จะให้บริการ โฮสติ้งจะสั่งภาษาตามค่าคุณภาพในส่วนหัว
Accept-Language
โฮสติ้งจะลดแท็กย่อยของภูมิภาคและประเทศในส่วนหัว
Accept-Language
ดังนั้นรหัสภาษาในชื่อโฟลเดอร์ย่อย "i18n content" จึงไม่สามารถมีแท็กย่อยเหล่านี้ได้ ตัวอย่างเช่น คุณไม่สามารถใช้es-419
หรือes-US
เป็นรหัสภาษาในชื่อโฟลเดอร์ย่อยได้ แต่คุณสามารถใช้es
ได้หากคุณต้องการให้บริการเนื้อหาเฉพาะภูมิภาคหรือประเทศ คุณสามารถสร้างโฟลเดอร์ย่อยที่มีเนื้อหาภาษา-ประเทศที่คุณต้องการสนับสนุน
ในตัวอย่างนี้ คำขอจากสเปนที่มีการตั้งค่าภาษา
es
es-es
หรือแม้แต่es-419
จะได้รับเนื้อหาจากโฟลเดอร์ย่อยes_es/
เนื่องจากโฮสติ้งถือว่ารหัสภาษาเหล่านั้นทั้งหมดเป็นes
คำขอจากสหรัฐอเมริกา เม็กซิโก หรือประเทศอื่นๆ ที่ต้องการภาษาเป็น
es-419
จะได้รับเนื้อหาจากโฟลเดอร์ย่อยes_ALL/
เนื่องจากโฮสติ้งถือว่าes-419
เป็นes
public/ // matches requests that aren't specified by your "i18n content" subfolders index.html // the site's default homepage localized-files/ // matches requests from Spain with a language preference of `es` or `es-foo` es_es/ index.html // matches requests from any other country with a language preference of `es` or `es-foo` es_ALL/ index.html
ในตัวอย่างนี้ คำขอจากเม็กซิโกที่มีการตั้งค่าภาษาเป็น
es-419
จะได้รับเนื้อหาจากโฟลเดอร์ย่อยes_mx/
เนื่องจากโฮสติ้งถือว่ารหัสภาษาes-419
เป็นes
อย่างไรก็ตาม คำขอจากสหรัฐอเมริกาที่มีการตั้งค่าภาษาเป็น
es-419
จะได้รับเนื้อหาจากโฟลเดอร์ย่อยes_ALL/
เนื่องจากโฮสติ้งถือว่าes-419
เป็นes
และ ไม่มีes_us/
โฟลเดอร์ย่อยpublic/ // matches requests that aren't specified by your "i18n content" subfolders index.html // the site's default homepage localized-files/ // matches requests from Argentina with a language preference of `es` or `es-foo` (mimics behavior of `es-ar` header tag) es_ar/ index.html // matches requests from Spain with a language preference of `es` or `es-foo` (mimics behavior of `es-es` header tag) es_es/ index.html // matches requests from Mexico with a language preference of `es` or `es-foo` (mimics behavior of `es-mx` header tag) es_mx/ index.html // matches requests from any other country with a language preference of `es` or `es-foo` (mimics behavior of `es-419` header tag) es_ALL/ index.html
ลำดับความสำคัญสำหรับ "เนื้อหา i18n"
หากคุณตั้งค่าการเขียนซ้ำ i18n โฮสติ้งจะให้บริการเนื้อหาตามลำดับความสำคัญต่อไปนี้:
เนมสเปซที่สงวนไว้ซึ่งขึ้นต้นด้วยส่วนเส้นทาง
/__/*
การเปลี่ยนเส้นทาง ที่กำหนดค่า
เนื้อหาคงที่แบบตรงทั้งหมด
รหัสภาษา + รหัสประเทศ (เช่น เนื้อหาจาก
fr_ca/
)
ลำดับเป็นไปตามค่าคุณภาพสำหรับแต่ละภาษาในส่วนหัวของAccept-Language
ของคำขอรหัสประเทศเท่านั้น (เช่น เนื้อหาจาก
ALL_ca/
)รหัสภาษาเท่านั้น (เช่น เนื้อหาจาก
fr/
หรือes_ALL/
)
ลำดับเป็นไปตามค่าคุณภาพสำหรับแต่ละภาษาในส่วนหัวของAccept-Language
ของคำขอเนื้อหาคงที่ "เริ่มต้น" ตรงกันทุกประการ
นี่คือเนื้อหาที่อยู่นอกไดเร็กทอรี "i18n content" เช่นที่รูทของไดเร็กทอรีpublic
การเขียนซ้ำ ที่กำหนดค่า
การจัดการ 404
i18n 404 หน้า
ซึ่งเป็นไปตามลำดับความสำคัญเดียวกันกับที่ระบุไว้ด้านบนสำหรับเนื้อหาคงที่แบบตรงทั้งหมดหน้า 404 แบบกำหนดเอง
หน้าเริ่มต้น 404 (จัดทำโดย Firebase)
ตัวอย่างลำดับความสำคัญ
ลองทำตัวอย่างของเราจากด้านบน เราจะใช้ไดเร็กทอรีตัวอย่างเดียวกันและคำขอตัวอย่าง
ตัวอย่างไดเร็กทอรีโปรเจ็กต์โลคัลที่มีไดเร็กทอรี "i18n content" (เรียกว่า
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
(แคนาดา)
ตามลำดับความสำคัญที่ตรงกันทั้งหมดและค่าคุณภาพสำหรับการตั้งค่าภาษา โฮสติ้งจะค้นหาไดเรกทอรีสำหรับหน้าที่ร้องขอตามลำดับต่อไปนี้
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
index.html
จากโฟลเดอร์ย่อยfr_ca/
เนื่องจากโฮสติ้งค้นหาโฟลเดอร์ย่อย
fr_ca/
ก่อน จึงจะพบข้อมูลที่ตรงกันทุกประการสำหรับindex.html
ในโฟลเดอร์ย่อยนั้นหน้าที่ร้องขอ:
awesome-page.html
404.html
จากโฟลเดอร์ย่อยfr/
โฮสติ้งจะค้นหาไดเรกทอรีทั้งหมดก่อน (รวมถึงโฟลเดอร์ย่อย "i18n content" และไดเรกทอรีราก) ตามลำดับความสำคัญสำหรับการจับคู่แบบตรงทั้งหมด แต่ไม่มีการจับคู่แบบตรงทั้งหมดสำหรับ
awesome-page.html
ดังนั้น โฮสติ้งจะเริ่มการจัดการ 404 ซึ่งเป็นไปตามลำดับความสำคัญ i18n เดียวกันกับการค้นหาแบบตรงทั้งหมด โฟลเดอร์
fr/
เป็นโฟลเดอร์ย่อยแรกที่ค้นหาซึ่งมีหน้า 404
โปรดสังเกตสิ่งต่อไปนี้เกี่ยวกับไดเรกทอรีการค้นหาและให้บริการ "เนื้อหา i18n":
ไดเร็กทอรี
localized-files/
ไม่มีen_ca/
,en_ALL/
หรือen/
โฟลเดอร์ย่อย ดังนั้นโฮสติ้งจะข้ามรายการลำดับความสำคัญจนกว่าจะพบโฟลเดอร์ย่อยที่ตรงกันสำหรับชุดค่าผสมภาษา-ประเทศของคำขอแม้ว่าไดเร็กทอรี
localized-files/
จะมีโฟลเดอร์ย่อยes_ALL/
แต่ คำขอ ตัวอย่างด้านบนไม่มีรหัสภาษาes
หรือes-foo
ดังนั้นโฮสติ้งจะไม่ค้นหา "เนื้อหา i18n" ที่ตรงกับes
โฟลเดอร์ย่อยที่เรียกว่า
fr/
และfr_ALL/
นั้นเทียบเท่ากันจากมุมมองของการตั้งค่าประเทศและภาษาของผู้ใช้ อย่างไรก็ตาม หากมีทั้งสองโฟลเดอร์ย่อย โฮสติ้งจะให้บริการfr_ALL/
เนื้อหาก่อนfr/
เนื้อหา
แทนที่รหัสภาษาและประเทศด้วยคุกกี้
คุณสามารถเปลี่ยนเนื้อหาที่ให้บริการได้โดยใช้คุกกี้เพื่อแทนที่ส่วนหัวของประเทศและภาษา
ต่อไปนี้เป็นบางวิธีที่คุณสามารถใช้การแทนที่คุกกี้ได้:
ทดสอบคุณสมบัติโดยใช้ภาษา/ประเทศต่างๆ ร่วมกันเพื่อตรวจสอบว่าเนื้อหาใดบ้างที่ให้บริการ
ให้ผู้ใช้เปลี่ยนเนื้อหาที่เห็น ตัวอย่างเช่น คุณสามารถใช้ตัวเลือกภาษา จากนั้นตั้งค่าคุกกี้
firebase-language-override
ของผู้ใช้ตามนั้น
หากต้องการกำหนดค่าการแทนที่คุกกี้ ให้ตั้งค่าคุกกี้ด้วยชื่อทั้งสองหรืออย่างใดอย่างหนึ่ง: 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";
การแทนที่คุกกี้ภาษาต้องเป็นรายการรหัสภาษาที่คั่นด้วยเครื่องหมายจุลภาคตามลำดับที่ต้องการ โดยไม่มีแท็กย่อยหรือค่าคุณภาพ
การแทนที่คุกกี้จะไม่ปรากฏในบันทึก