การรองรับหลายภาษาในเบราว์เซอร์ดั้งเดิมนั้นไม่ดี เดิมนี้เกิดจากวลีในECMAScript
สเป็คภาษาที่มีลักษณะเช่นนี้:
Number.prototype.toLocaleString ()
สร้างค่าสตริงที่แทนค่าของ Number ที่จัดรูปแบบตามแบบแผนของโลแคลปัจจุบันของสภาพแวดล้อมโฮสต์ ฟังก์ชั่นนี้คือการดำเนินการขึ้นอยู่กับและได้รับอนุญาต แต่ไม่ได้รับการสนับสนุนให้มันกลับเป็นสิ่งเดียวกับtoString
ทุกวิธีการโลคัลไลเซชันที่กำหนดไว้ในข้อมูลจำเพาะถูกกำหนดเป็น "ขึ้นอยู่กับการใช้งาน" ซึ่งส่งผลให้เกิดความไม่สอดคล้องกันมากมาย ในกรณีนี้ Chrome Opera และ Safari .toString()
จะกลับมาเป็นสิ่งเดียวกับ Firefox และ IE จะส่งคืนสตริงที่จัดรูปแบบโลแคลและ IE ยังมีตัวคั่นหลักพัน (สมบูรณ์แบบสำหรับสตริงสกุลเงิน) Chrome ได้รับการอัปเดตเมื่อเร็ว ๆ นี้เพื่อส่งคืนสตริงที่คั่นด้วยหลักพัน แต่ไม่มีทศนิยมตายตัว
สำหรับสภาพแวดล้อมที่ทันสมัยของข้อมูลจำเพาะ API ECMAScript สากล , มาตรฐานใหม่ที่เติมเต็ม ECMAScript ภาษาสเปคให้การสนับสนุนที่ดีมากสำหรับการเปรียบเทียบสตริง, จัดรูปแบบตัวเลขและวันที่และเวลาการจัดรูปแบบ; นอกจากนี้ยังแก้ไขฟังก์ชั่นที่เกี่ยวข้องใน Language Spec การแนะนำสามารถพบได้ที่นี่ การใช้งานมีอยู่ใน:
- Chrome 24
- Firefox 29
- Internet Explorer 11
- Opera 15
นอกจากนี้ยังมีการใช้งานร่วมกันได้Intl.jsซึ่งจะจัดเตรียม API ในสภาพแวดล้อมที่ยังไม่มีอยู่
การกำหนดภาษาที่ต้องการของผู้ใช้ยังคงเป็นปัญหาเนื่องจากไม่มีข้อกำหนดสำหรับการรับภาษาปัจจุบัน แต่ละเบราว์เซอร์ใช้วิธีการรับสตริงภาษา แต่อาจขึ้นอยู่กับภาษาของระบบปฏิบัติการของผู้ใช้หรือเพียงแค่ภาษาของเบราว์เซอร์:
// navigator.userLanguage for IE, navigator.language for others
var lang = navigator.language || navigator.userLanguage;
วิธีแก้ปัญหาที่ดีสำหรับสิ่งนี้คือการถ่ายโอนข้อมูลส่วนหัวยอมรับภาษาจากเซิร์ฟเวอร์ไปยังไคลเอนต์ หากจัดรูปแบบเป็น JavaScript ก็สามารถส่งผ่านไปยังตัวสร้าง Internationalization API ซึ่งจะเลือกสถานที่ที่ดีที่สุด (หรือได้รับการสนับสนุน) โดยอัตโนมัติ
กล่าวโดยย่อคือคุณต้องทำงานด้วยตัวเองหรือใช้เฟรมเวิร์ก / ไลบรารีเพราะคุณไม่สามารถพึ่งพาเบราว์เซอร์เพื่อทำงานให้คุณได้
ไลบรารีและปลั๊กอินต่าง ๆ สำหรับการแปล:
รู้สึกอิสระที่จะเพิ่ม / แก้ไข