การทำให้เป็นสากลเป็นอย่างไรใน JavaScript


143

ฉันสงสัยว่าจะจัดการความเป็นสากลใน JavaScript ได้อย่างไร ฉัน googled แต่ฉันไม่ได้รับคำตอบที่น่าเชื่อสำหรับ:

  • JavaScript มีการสนับสนุนดั้งเดิมสำหรับการทำให้เป็นสากลหรือไม่?
  • i18n ใน JavaScript คืออะไร
  • วิธีจัดการกับปฏิทินสกุลเงินวันที่ ฯลฯ

ฉันได้อ่านInternationalization ใน JavaScriptแล้ว


Microsoft เพิ่งเปิดตัวปลั๊กอิน jQuery globalization รายละเอียดอยู่ที่นี่
Adeel

คำตอบ:


161

การรองรับหลายภาษาในเบราว์เซอร์ดั้งเดิมนั้นไม่ดี เดิมนี้เกิดจากวลีใน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 ซึ่งจะเลือกสถานที่ที่ดีที่สุด (หรือได้รับการสนับสนุน) โดยอัตโนมัติ

กล่าวโดยย่อคือคุณต้องทำงานด้วยตัวเองหรือใช้เฟรมเวิร์ก / ไลบรารีเพราะคุณไม่สามารถพึ่งพาเบราว์เซอร์เพื่อทำงานให้คุณได้

ไลบรารีและปลั๊กอินต่าง ๆ สำหรับการแปล:

  • อื่น ๆ :

รู้สึกอิสระที่จะเพิ่ม / แก้ไข


13
ขอบคุณทุกคนที่มีส่วนร่วม; ฉันไม่เคยคิดเลยว่าฉันจะเรียนรู้บางสิ่งได้โดยอ่านคำตอบเก่า ๆ ของฉัน ฉันดีใจที่ได้เห็นการอัปเดตข้อมูลจำเพาะสำหรับ Internationalization API นั้นยอดเยี่ยมมากและฉันต้องทดสอบไดรฟ์ใน Chrome
Andy E

1
ขอบคุณสำหรับการรวบรวมที่ยอดเยี่ยม ในแง่บวกดูเหมือนว่า Mozilla อาจจัดส่ง toLocaleString () เร็ว ๆ นี้ - อาจเป็น FF28: bugzilla.mozilla.org/show_bug.cgi?id=769871
Chris Adams

1
i18next.comตอนนี้มาพร้อมกับการจัดการการแปลที่สร้างขึ้นบนlocize.com - นี่อาจเป็นชัยชนะครั้งใหญ่หากคุณต้องการแก้ไขกระบวนการแปลที่สมบูรณ์ - ไม่ใช่แค่ใช้รหัสของคุณสำหรับ i18n Plus มีคุณสมบัติ Incontext Editor ที่ดี ...
jamuhl

12

Mozilla เพิ่งเปิดตัว L20n ที่ยอดเยี่ยมหรือการแปลภาษาท้องถิ่น 2.0 ในคำพูดของตัวเอง L20n คือ

โอเพ่นซอร์สภาษาสคริปต์เฉพาะที่ใช้ในการแปลเพื่อประมวลผลเพศพหูพจน์การผันคำกริยาและองค์ประกอบอื่น ๆ ที่แปลกประหลาดของภาษาธรรมชาติ

การใช้ js ของพวกเขาอยู่บนที่เก็บ github L20n


ฉันได้เริ่มโครงการที่ต้องการการโลคัลไลเซชันและเราได้ตัดสินใจใช้ L20n ด้วย;) ดังนั้นฉันจึงได้ลองปลั๊กอิน L20n รุ่นแรกสำหรับ RequireJS ( github.com/fernandogmar/L20n-RequireJS ) ในกรณีที่คุณใช้ RequireJS ฉันหวังว่ามันจะมีประโยชน์สำหรับคุณเช่นกัน ข้อเสนอแนะใด ๆ จะได้รับการต้อนรับ
เฟอร์นันโดจีเอ็ม

0

บางส่วนเป็นแบบดั้งเดิมส่วนที่เหลือสามารถใช้ได้ผ่านห้องสมุด

ตัวอย่างเช่นDatejsเป็นห้องสมุดวันที่ดีระดับนานาชาติ

สำหรับส่วนที่เหลือนั้นเป็นเพียงการแปลภาษาและ JavaScript สามารถใช้งานร่วมกับ Unicode ได้ (รวมถึงเบราว์เซอร์หลักทั้งหมด)


0

นอกจากนี้คุณยังสามารถลองห้องสมุดอื่น - https://github.com/wikimedia/jquery.i18n

นอกเหนือจากการแทนที่พารามิเตอร์และรูปแบบพหูพจน์หลายรูปแบบแล้วมันยังรองรับคุณสมบัติทางเพศที่เป็นเอกลักษณ์ของกฎไวยากรณ์ที่กำหนดเองซึ่งบางภาษาต้องการ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.