วิธี จำกัด หมายเลขให้ถูกต้องหรือไม่


38

คำเตือนใดที่ฉันควรทราบขณะแปลหมายเลขในแอปพลิเคชันส่วนหน้าของฉัน

ตัวอย่าง: ในบราซิลโปรตุเกส (pt-BR) เราแบ่งหลายพันด้วยจุดและทศนิยมด้วยเครื่องหมายจุลภาค ในภาษาอังกฤษแบบอเมริกัน (en-US) นั้นตรงกันข้าม ใน pt-BR เราแสดงตัวเลขที่คั่นด้วยหลักพันเหมือนกับ en-US แต่การอ่านเกี่ยวกับภาษาอังกฤษของอินเดีย (en-IN) วันนี้ฉันเจออัญมณีนี้:

ระบบหมายเลขอินเดียเหมาะสำหรับการจัดกลุ่มหลัก เมื่อเขียนด้วยคำพูดหรือเมื่อพูดตัวเลขที่น้อยกว่า 100,000 / 100,000 จะแสดงเช่นเดียวกับในภาษาอังกฤษมาตรฐาน ตัวเลขรวมถึงและเกิน 100,000 / 100,000 แสดงเป็นส่วนย่อยของระบบเลขอินเดีย

https://en.wikipedia.org/wiki/Indian_English#Numbering_system

ซึ่งหมายความว่า:

1000000 units in pt-BR are formatted 1.000.000
1000000 units in en-US are formatted 1,000,000
1000000 units in en-IN are formatted 10,00,000

นอกเหนือจากเครื่องหมายจุลภาคและจุดและตัวคั่นเฉพาะอื่น ๆ ดูเหมือนว่าการปิดบังยังเป็นข้อกังวลที่ถูกต้อง

ข้อควรระวังอื่นใดที่ฉันควรทราบขณะแปลตัวเลขในแอปพลิเคชันส่วนหน้าของฉัน พิเศษถ้าฉันแสดงตัวเลขให้กับชุดอักขระที่ไม่ใช่ละติน?


3
รับที่น่าสนใจยิ่งขึ้นเมื่อจัดการกับเงิน! :-)
Stephan Bijzitter

4
ไม่ได้พูดถึงระบบเลขลำดับของดาวอังคารซึ่งมีฐาน 6 (สองครั้ง 3 นิ้ว) ;-) แต่ภาษาญี่ปุ่นก็มีความแปลก: มนุษย์ = 10.000 เขียนเป็น 1.0000, oku = 100.000.000 เขียนในญี่ปุ่นเป็น 1.0000.0000 และchō .. เดา
qwerty_so

6
ทำไมคุณต้องกังวลเกี่ยวกับเรื่องนี้? คุณไม่สามารถติดตามการตั้งค่าระบบปฏิบัติการได้หรือไม่
ม.ค. Doggen

3
@JanDoggen เพราะเป็นหนึ่งในปัญหาที่น่าสนใจของโดเมนวิศวกรรมซอฟต์แวร์ "วิธีการนำเสนอข้อมูลต่อผู้คนอย่างเหมาะสม" สิ่งที่ฉันควรกังวลเมื่อออกแบบระบบคือโดเมนของคำถามนี้ และฉันไม่ได้พูดถึงเรื่องเงินตามที่สเตฟานเพื่อนของเราพูดหรือวันที่และเวลา เพียงแค่ตัวเลขดิบ
Machado

5
@JanDoggen มันมีความซับซ้อนมากขึ้นเมื่อต้องรับมือกับซอฟต์แวร์ออนไลน์ ผู้ใช้อาจอยู่ในอินเดียบนคอมพิวเตอร์ภาษาอังกฤษแบบสหรัฐอเมริกา แต่อ่านหน้าเว็บในภาษาโปรตุเกสแบบบราซิล เซิร์ฟเวอร์ของคุณอาจเป็นภาษาจีน แอปของคุณต้องเข้าใจสิ่งที่ผู้ใช้ต้องการไม่ว่าเขาจะใช้ระบบปฏิบัติการใดหรือเซิร์ฟเวอร์ของคุณอยู่ที่ไหน ดังนั้น 1,000.00 ดอลลาร์ของคุณจะกลายเป็น 67.545,00 รูปี: สกุลเงินสหรัฐแปลงด้วยอัตราแลกเปลี่ยนท้องถิ่น แต่แสดงในรูปแบบโปรตุเกส
noderman

คำตอบ:


87

ภาษาและกรอบการเขียนโปรแกรมส่วนใหญ่มีกลไกการทำงานที่สมเหตุสมผลและเหมาะสมซึ่งคุณสามารถใช้ได้

ตัวอย่างเช่นระบบนิเวศ C # มีเนมสเปซSystem.Globalizationซึ่งอนุญาตให้คุณระบุสิ่งที่Cultureคุณต้องการ:

Console.WriteLine(myMoneyValue.ToString("C", "en-US"));

นี่ไม่ใช่สิ่งที่คุณต้องการประดิษฐ์ซ้ำอีกครั้ง ใช้คุณสมบัติการทำให้เป็นสากลโดยภาษาหรือกรอบงานที่คุณชื่นชอบ


2
ฉันตระหนักถึง System.Globalization และกรอบงานอื่น ๆ ที่จัดการความซับซ้อนแบบนี้ให้ฉัน สิ่งที่ฉันไม่รู้คือปัญหาที่พวกเขากำลังแก้ไข ตัวอย่างเช่นแอปพลิเคชันหลายตัวที่ฉันเห็นใช้การปิดบังเฉพาะบน ToString เช่น. ToString ("#, ## 0.00", locale) แต่มาสก์นั้นไม่ถูกต้องหากฉันแสดงหมายเลขนี้ให้กับคนอินเดีย ดังนั้นนอกจาก "อย่าใช้มาสก์เฉพาะ" ฉันควรระวังอะไรอีกบ้าง
Machado

7
ไม่มีอะไรที่ฉันรู้ ถ้าคุณใช้เฟรมเวิร์กอย่างถูกต้องมันก็น่าจะใช้ได้ มีบางกรณีที่เฉพาะเจาะจงของปัญหาระหว่างประเทศ แต่การสร้างรายการที่ครอบคลุมของพวกเขาไม่ใช่สิ่งที่เราทำที่นี่ ดูตัวอย่างนี้
Robert Harvey

5
นี่เป็นคำตอบเดียวที่ถูกต้อง: ตั้งค่าโลแคลของคุณจากนั้นส่งค่าของคุณผ่านเลเยอร์ i18n ก่อนที่จะแสดงต่อผู้ใช้และให้ผู้เขียนเฟรมเวิร์กจัดการกับมัน สิ่งนี้เป็นจริงสำหรับตัวเลขค่าสกุลเงินสตริงที่แปลวันที่ทุกอย่าง

2
คำตอบที่สมบูรณ์แบบ "อย่าบูรณาการล้อ" เป็นสิ่งที่ควรคำนึงถึงเสมอในขณะที่จัดการกับปัญหาที่พบบ่อยเช่นนี้ มันน่าเสียดายที่ฉันไม่สามารถลงคะแนนมากกว่าหนึ่งครั้ง
BgrWorker

3
@Machado "ตัวอย่างเช่นแอปพลิเคชันหลายตัวที่ฉันเห็นใช้การปิดบังแบบเฉพาะบน ToString เช่น. ToString (" #, ## 0.00 ", locale) แต่มาสก์นั้นต่อไม่ถูกต้องหากฉันแสดงหมายเลขนี้แก่คนอินเดีย ." - อาจไม่ชัดเจน แต่โปรดทราบว่าตำแหน่งของ,สตริงรูปแบบส่วนใหญ่ไม่เกี่ยวข้องและ "#, 0.00" จะมีผลเหมือนกัน ,หมายถึง "ใช้ตัวแบ่งกลุ่มตัวเลขในลักษณะที่ระบุโดยโลแคล"
hvd

23

บางคำตอบที่ยอดเยี่ยมที่นี่แล้ว แต่พวกเขาไม่ได้พูดถึงสิ่งหนึ่งที่ฉันคิดว่าเป็นสิ่งสำคัญที่ไม่ควรลืม: ตรวจสอบให้แน่ใจว่ามีการจัดรูปแบบตัวเลขทุกที่ชัดเจน (หรือสามารถควบคุมได้) สิ่งที่ใช้สำหรับ:

  • เมื่อเป็นส่วนต่อประสานกับผู้ใช้จะต้องใช้การจัดรูปแบบที่แปลเป็นภาษาท้องถิ่น

  • เมื่อหมายเลขจะถูกเขียนลงในไฟล์หรือส่งผ่านเครือข่ายหรือรูปแบบอื่นที่ต้องการหมายเลขในรูปแบบที่เครื่องอ่านได้ตรวจสอบให้แน่ใจว่าไม่ได้ฟอร์แมตตามวัฒนธรรมปัจจุบัน แต่ตามการตั้งค่าคงที่ (ตัวอย่างเช่นในสภาพแวดล้อม. NET ให้ใช้InvariantCulture)

มิฉะนั้นคุณจะพบปัญหาเมื่อเขียนหรือส่งตัวเลขโดยใช้วัฒนธรรม A และอ่านหรือรับโดยใช้วัฒนธรรม B

จากประสบการณ์ของฉันนี่เป็นหนึ่งในอุปสรรคที่ใหญ่ที่สุดในการแปลตัวเลขให้เหมาะสม: ในความพยายามที่จะรวมศูนย์การจัดรูปแบบและการแปลงตัวเลขผู้คนเริ่มสร้างฟังก์ชั่นทั่วไปนำมาใช้ใหม่สำหรับการจัดรูปแบบ สถานที่. อย่างไรก็ตามทันทีที่เราต้องการตัวเลขในรูปแบบสตริงที่เครื่องสามารถอ่านได้จากที่อื่นในโปรแกรมจำเป็นต้องใช้ตัวแปรสองตัว: การแปลและการจัดรูปแบบที่ไม่แปล สิ่งนี้แนะนำให้มีความเสี่ยงสูงในการผสมสองรูปแบบของการแปลง (โดยเฉพาะเมื่อนักพัฒนาและเครื่องทดสอบมีการตั้งค่าตำแหน่งที่ตั้งเริ่มต้นคล้ายกับการตั้งค่า "คงที่" ที่ใช้สำหรับการจัดรูปแบบที่ไม่ใช่ UI แต่ส่วนหนึ่งของฐานผู้ใช้ไม่มี)

ภาคผนวก: ปัญหานี้อาจกลายเป็นสิ่งที่น่ารังเกียจอย่างยิ่งในสถานการณ์ที่ไม่ชัดเจนล่วงหน้าหากจำนวนจะถูกประมวลผลโดยเครื่องหรือโดยมนุษย์ (หรือทั้งสองอย่าง) ในภายหลัง ตัวอย่างเช่นเป็นส่วนหนึ่งของผลลัพธ์ของไฟล์บันทึก ในกรณีเช่นนี้ควรใช้มาตรฐาน "เป็นกลาง" โดยไม่มีตัวคั่นยกเว้นจุดที่เป็นตัวคั่นทศนิยม


2
และยิ่งกว่านั้นภาษา pogramming สมัยใหม่จำนวนมากฟังก์ชั่นที่ชัดเจน / เป็นค่าเริ่มต้นในไลบรารีมาตรฐานคือ "แปลเป็นภาษาท้องถิ่น" ดังนั้นหากผู้พัฒนาไม่ทราบหรือสนใจเกี่ยวกับการโลคัลไลซ์เซชันแอปพลิเคชันที่เกิดขึ้นนั้นมีแนวโน้มว่าจะไม่สมบูรณ์แทนที่จะเป็นเพียงระบบที่น่าเกลียดในต่างประเทศ
ปีเตอร์กรีน

4
ฉันไม่เห็นด้วยกับความเลวร้ายอย่างเท่าเทียมกัน เครื่องมือที่ไม่เป็นไปตามอนุสัญญาตัวเลขท้องถิ่นใน UI นั้นยังคงใช้งานได้อยู่ เครื่องมือที่ล้มเหลวในการอ่านไฟล์ข้อมูลของตัวเองหรือไม่สามารถพูดคุยกับเซิร์ฟเวอร์ได้เนื่องจากความไม่ตรงกันของตัวเลขเป็นไปได้มากกว่าที่จะใช้งานไม่ได้
ปีเตอร์กรีน

5
ประวัติย่อของเรื่องนี้: ตัวคั่นทศนิยมสำหรับ en-ZA เปลี่ยนระหว่าง Win 7 และ Win 8 ค่าที่เก็บไว้ในเครื่องก่อนหน้านี้เริ่มล้มเหลวในการ deserialize
Caleth

1
@PeterGreen: เครื่องมือที่ไม่เป็นไปตามอนุสัญญาตัวเลขท้องถิ่นใน UI นั้นอาจยังใช้งานได้หรืออาจใช้ไม่ได้เต็มที่ในบางกรณี ฉันจะระมัดระวังในการตั้งสมมติฐานดังกล่าว เหตุผลที่ devs จำนวนมากได้รับการแปลตัวเลขที่ไม่ถูกต้องเป็นสิ่งที่แน่นอน - การตั้งสมมติฐานประเภทนี้
Doc Brown

1
@DocBrown ฉันมีรหัสมรดกที่น่ากลัวที่สุดในการรักษาที่ได้รับความทุกข์ทรมานจากจำนวนเต็ม / ลอยแยกห้องสมุดประจำแปลของห้องสมุด ฉันคิดว่ามันยุติธรรมที่จะบอกว่าโปรแกรมที่เขียนโดยไม่ต้องดูแลสำหรับการแปลเมื่อขั้นตอนการเริ่มต้นสำหรับงานเหล่านี้จะไม่แปลอาจจะใช้ไม่ได้สำหรับบางสถานการณ์ แต่ถ้าขั้นตอนการเริ่มต้นจะมีการแปลโปรแกรมที่มักจะถูกทำลายขณะที่มันเป็น ดำเนินการบนคอมพิวเตอร์ที่มีสถานที่ส่วนกลางไม่ใช่ภาษาอังกฤษ
Sebastian Redl

9

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

  • อย่าพยายามทำการแปลโดยอัตโนมัติ มันไม่ได้ผลเสมอไป เป็นการยากที่คุณจะพบปัญหาและทำลายผู้ใช้ของคุณ

  • ให้สอดคล้องกัน: อย่าผสมภาษาที่แตกต่างและรูปแบบการจัดรูปแบบเช่นตัวคั่นทศนิยมแบบบราซิลในข้อความภาษาอังกฤษ

  • สนับสนุนชุดของโลแคลอย่างชัดเจน ทำงานร่วมกับนักแปลของคุณเพื่อหารูปแบบที่เหมาะสมสำหรับวันที่และตัวเลข คุณอาจจะสิ้นสุดการสร้างชุดเครื่องมือการแปลของคุณเอง แต่ปัญหาส่วนใหญ่ (แต่ไม่ทั้งหมด) สามารถมอบหมายให้ห้องสมุดที่มีอยู่

  • สร้างตัวเลือกการจัดรูปแบบอย่างง่ายที่สามารถกำหนดค่าได้โดยผู้ใช้แต่ละคน: รูปแบบสำหรับวันที่และเวลาตัวคั่นทศนิยมสกุลเงินที่ต้องการ ... สิ่งนี้มีประโยชน์อย่างยิ่งสำหรับนักเดินทางชาวต่างชาติหรือคนอื่น ๆ ที่ต้องการผสมผสานหลาย ๆ สถานที่หรือวัฒนธรรมที่เป็นอิสระจากภาษา


18
นอกจากนี้โปรดทราบว่าผู้ใช้จำนวนมากเกลียดการประชุมที่ถือว่า "ถูกต้องสำหรับสถานที่ของพวกเขา" พิจารณาว่าเป็นการฝึกแบบดั้งเดิมที่น่ากลัวและไม่ต้องการจัดกลุ่มเลยหรือการจัดกลุ่มแบบอื่น ดังนั้นควรมีตัวเลือกให้ปิดหรือแทนที่ด้วยตนเอง
..

2

การพิจารณาที่สำคัญ: คุณควรตัดสินใจว่าเพียงพอแล้ว เพราะถ้าคุณลงไปในโพรงกระต่ายเพื่อพยายาม จำกัด วงให้สมบูรณ์มันจะซับซ้อนมากขึ้น

ใช้ป้ายกำกับทั่วไปเช่น "คุณได้เลือก n รายการ" สิ่งนี้อ่านผิดถ้ามีการเลือกเพียงหนึ่งรายการ วิธีแก้ปัญหาที่น่าเกลียด แต่ในทางปฏิบัติคือการเขียนว่า "คุณได้เลือกแล้ว n รายการ" แต่ถ้าคุณต้องการที่จะทำอย่างถูกต้องคุณต้องมีสองข้อความที่แตกต่างกันขึ้นอยู่กับ n หากคุณพยายามทำสิ่งนี้ในหลาย ๆ ที่มันจะซับซ้อนอย่างรวดเร็วเนื่องจากภาษาต่าง ๆ มีไวยากรณ์ที่แตกต่างกัน บางภาษามีการผันคำกริยาที่แตกต่างกันสำหรับหนึ่งสองและหลายรายการเป็นต้น ด้วยเหตุนี้คนในความรู้มักจะบ่นว่ากรอบการแปลที่มีอยู่ไม่เพียงพอ

แต่คุณต้องเลือกการต่อสู้ของคุณและตัดสินใจว่าระดับความซับซ้อนนั้นเพียงพอ สำหรับหลาย ๆ วัตถุประสงค์ไลบรารีการโลคัลไลเซชันมาตรฐานสำหรับการจัดรูปแบบตัวเลขและวันที่ควรเพียงพอ


นี่คือการแก้ไขโดย ICU (MessageFormat) ข้อเสียคือการยอมรับของ ICU ในหลายภาษายังคงอ่อนแอ อย่างไรก็ตามผู้พัฒนายังคงต้องการสร้างข้อความอย่างถูกวิธี มันเป็นมากกว่าแง่มุมทางวิศวกรรมของมัน userguide.icu-project.org/formatparse/messages
noderman

สิ่งนี้ได้รับการแก้ไขโดยฟังก์ชันngettext ที่มีให้ใช้อย่างแพร่หลายใน GNU gettext แต่คลาส MessageFormat จะปรากฏขึ้นเพื่อแก้ปัญหาพิเศษบางอย่างที่ ngettext ไม่ได้
hvd

2

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

ภาษาที่ทันสมัยส่วนใหญ่ใช้คุณสมบัติบางอย่างหรือทั้งหมดของโครงการเหล่านี้ แต่ถึงแม้ว่าพวกเขาจะไม่ทำ แต่การอ่านเกี่ยวกับโครงการเหล่านี้จะทำให้คุณมีความคิดที่ดีว่าควรมองหาอะไร

http://site.icu-project.org

http://cldr.unicode.org

ปรับปรุง

เครื่องมือสำรวจ CLDR ให้การเข้าถึงทุกรูปแบบ ซึ่งจะแสดงวิธีจัดรูปแบบตัวเลขในบางภาษาและภูมิภาค ตัวอย่างเช่นโปรตุเกส (โปรตุเกส):

http://st.unicode.org/cldr-apps/v#/pt_PT/Number_Formatting_Patterns/

และถ้าคุณต้องการตรวจสอบข้อมูลทั้งหมด (และอาจใช้) คุณสามารถดาวน์โหลด CLDR ในรูปแบบ JSON จาก GitHub:

https://github.com/unicode-cldr/cldr-json#cldr-json

ข้อมูลเพิ่มเติมเกี่ยวกับการดาวน์โหลดที่นี่:

http://cldr.unicode.org/index/downloads


ขอบคุณสำหรับการป้อนข้อมูล แต่ตอนนี้ฉันสนใจตัวเลขเป็นส่วนใหญ่ :)
Machado

แน่ใจ ฉันเพิ่งแก้ไขคำตอบเพื่อรวมลิงก์ไปยังเครื่องมือสำรวจซึ่งคุณสามารถ จำกัด การค้นหาของคุณให้แคบลง
noderman

ฉันพยายามเปลี่ยนบราซิลเพื่อตรวจสอบความแตกต่าง แต่ดูเหมือนจะไม่เปิดใช้งานการสร้างภาพสำหรับสิ่งนั้น: st.unicode.org/cldr-apps/v#/pt_BR/Number_Formatting_Patternsไม่เช่นนั้นเครื่องมือจะดูค่อนข้างดี
Machado

นั่นเป็นเพราะบราซิลเป็นภาษารูต เครื่องมือสำรวจนั้นใช้สำหรับการเปลี่ยนแปลงข้อมูล CLDR ดังนั้นรากจำเป็นต้องมีบัญชีพิเศษ คุณสามารถไปที่ GitHub และรับข้อมูลทั้งหมดโดยตรง: github.com/unicode-cldr/cldr-numbers-modern/tree/master/mainเฉพาะบราซิลอยู่ที่นี่: github.com/unicode-cldr-numbers-modern/ blob / master / main / pt / …
noderman

0

ในขณะที่ฉันมีความสุขกับคำตอบทั้งหมดที่นี่ฉันไม่พอใจกับแต่ละคำตอบแยกกันเพื่อทำเครื่องหมายว่าเป็นคำตอบที่ถูกต้อง

จนถึงตอนนี้เป็นสิ่งที่เราควรทราบเมื่อทำการแปลหมายเลข:

สำหรับมนุษย์ :

  • ตัวคั่นหลักพันจะไม่คั่นด้วยหลักพัน ดูกรณีอินเดียในคำถาม;
  • อักขระหลายพันและทศนิยมนั้นแตกต่างกันไปตามวัฒนธรรม ในภาษาเยอรมันหลายพันคนถูกแบ่งโดยใช้ช่องว่างตัวอย่างเช่นในภาษาอังกฤษมันเป็นคำสั่งและในภาษาโปรตุเกสมันเป็นจุด
  • เราไม่มีข้อมูลหากมีความแตกต่างที่เกี่ยวข้องระหว่างภาษาจากซ้ายไปขวาและจากขวาไปซ้าย
  • ระบุชุดของการแปลที่รองรับเฉพาะและทำให้ชัดเจนสำหรับผู้ใช้ของคุณ
  • อนุญาตให้ผู้ใช้ของคุณเปลี่ยนการแปลเริ่มต้นเป็นหนึ่งในการแปลที่รองรับและพวกเขาจะมีความสุขและส่งเค้กให้คุณขอบคุณเพราะคุณเป็นพระเจ้าที่ใจดี :);

สำหรับคอมพิวเตอร์ :

  • โปรดจำไว้ว่าเครื่องไม่ผ่อนปรนและควรได้รับการจัดรูปแบบเดียวกันเสมอในขณะที่การทำให้เป็นอนุกรมและการทำให้เป็นตัวเลขที่ไม่ต่อเนื่องกัน
  • ติดกับรูปแบบเดียวสำหรับมัน
  • ใช้รูปแบบที่จำเป็นขั้นต่ำที่เป็นไปได้ หลีกเลี่ยงการแยกเป็นพัน ๆ ส่วนทศนิยมควรเพียงพอสำหรับการทำให้เป็นอนุกรมและการทำให้เป็นอนุกรม

สำหรับนักพัฒนา :

  • (ตามที่แนะนำโดย @hyde ด้านล่าง): ใช้ไลบรารีที่มีอยู่สำหรับการแปล
  • หากคุณสามารถทำได้ให้ใช้ผู้ทดสอบดั้งเดิมและระบุกรณีทดสอบการแปลเป็นภาษาท้องถิ่น / สากลหรือมิฉะนั้นจะเชื่อถือห้องสมุด
  • โปรดจำไว้ว่าการแปลเป็นปัญหาส่วนใหญ่แก้ไข ทุกภาษาที่สำคัญมีห้องสมุดท้องถิ่นหรือภายนอกที่สามารถ จำกัด จำนวนวันที่และเวลา;

1
รายการที่ขาดหายไป: สำหรับนักพัฒนา: ใช้ไลบรารีที่มีอยู่สำหรับการโลคัลไลเซชัน หากคุณสามารถทำได้ให้ใช้ผู้ทดสอบดั้งเดิมและระบุกรณีทดสอบการแปลเป็นภาษาท้องถิ่น / สากลหรือมิฉะนั้นจะเชื่อถือห้องสมุด
ไฮด์
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.