ฉันมีไซต์สแตติกหลายภาษา
ไซต์มีโครงสร้างเพื่อให้เนื้อหาทั้งหมดเป็นภาษาอังกฤษโดยค่าเริ่มต้น ดังนั้นเนื้อหาเริ่มต้นจึงอยู่ภายใต้ / ตัวอย่างเช่น:
เส้นทาง: เนื้อหา:
/ บ้าน
/contact.html หน้าติดต่อ
/services.html บริการ
/about.html เกี่ยวกับเรา
จากนั้นจะมีโฟลเดอร์ย่อยสำหรับแต่ละภาษาที่รองรับ
ตัวอย่างเช่น 'de' ในภาษาเยอรมัน 'da' ในภาษาเดนมาร์ก เป็นต้น เนื้อหาที่แปลแล้วทั้งหมดจะปรับขนาดในโฟลเดอร์ย่อยสำหรับภาษาที่เกี่ยวข้อง
ดังนั้นเนื้อหาภาษาเดนมาร์กจะมีโครงสร้างดังนี้:
เส้นทาง: เนื้อหา:
/ดา/ หน้าแรก
/da/contact.html หน้าติดต่อ
/da/services.html บริการ
/da/about.html เกี่ยวกับเรา
และเช่นเดียวกันสำหรับภาษาอื่นๆ
เนื่องจากไซต์นี้เป็นไซต์แบบสแตติกโดยสมบูรณ์ ฉันจึงไม่สามารถใช้ภาษาสคริปต์บางภาษา เช่น PHP เพื่อตรวจหาตำแหน่งที่ตั้งของผู้ใช้และเปลี่ยนเส้นทางตามนั้น
ดังนั้นฉันคิดว่าฉันจะต้องปล่อยให้ apache ทำส่วนนี้
ฉันใช้ Apache 2.4
คำถามของฉันคือ ฉันจะกำหนดค่าโฮสต์เสมือนของ Apache ให้ผู้ใช้ที่ร้องขอ / จะถูกเปลี่ยนเส้นทางไปยัง /da/ หากภาษาที่ต้องการคือเดนมาร์ก ไปที่ /de/ หากภาษาที่ต้องการคือเยอรมัน และรับ / as เริ่มต้นถ้าภาษาอังกฤษหรือภาษาอื่น ๆ เป็นภาษาที่ต้องการ?
ในทำนองเดียวกัน หากผู้ใช้ร้องขอ /foo.html พวกเขาจะถูกเปลี่ยนเส้นทางไปที่ /$LANG/foo.html โดยที่ $LANG เป็นภาษาที่ต้องการ (คือภาษานั้นอยู่ในรายการภาษาที่รองรับ)
ระบบจะตรวจพบการตั้งค่าตำแหน่งที่ตั้ง/ภาษาของผู้ใช้โดยใช้ส่วนหัวที่ยอมรับภาษาของไคลเอ็นต์
ตอนนี้ ส่วนหัวนี้จะสนับสนุนไคลเอนต์ที่ระบุหลายภาษาตามลำดับความสำคัญ ดังนั้นเราจะใช้สิ่งที่คุณต้องการ
นอกจากนี้ ฉันเดาว่าเราจะต้องเก็บภาษาไว้ในคุกกี้บางประเภท เนื่องจากหากผู้ใช้ระบุภาษาเยอรมันเป็นภาษาที่ต้องการ แต่ขอเวอร์ชันเดนมาร์กหรืออังกฤษอย่างชัดแจ้ง เราก็ไม่ควรเปลี่ยนเส้นทางต่อไป
ดังนั้นฉันจึงพยายามนี้ สิ่งนี้ไม่ได้ตั้งค่าคุกกี้ แต่จะทริกเกอร์เฉพาะในหน้าหลัก (/)
เพียงแค่ตรวจสอบว่าภาษาเดนมาร์กเป็นภาษาที่ยอมรับหรือไม่ แต่ไม่ใช่ว่าจะชอบเดนมาร์กหรือไม่
นอกจากนี้ยังไม่รองรับหลายภาษาได้เป็นอย่างดี
ตัวอย่างเช่น สมมติว่าเรามีผู้ใช้ที่ชอบภาษาเยอรมันแต่มีภาษาเดนมาร์กเป็นภาษาที่สอง พวกเขาจะได้รับภาษาเดนมาร์กที่นี่และไม่ใช่ภาษาเยอรมัน
RewriteEngine เปิดอยู่
RewriteCond %{HTTP:Accept-Language} (ดา) [NC]
RewriteCond %{REQUEST_URI} "^/$"
RewriteRule ^(.*)$ https://%{SERVER_NAME}/da [R=303,NC,L]