ข้อแตกต่างระหว่างคุณสมบัติ CurrentCulture และ CurrentUICulture ของ CultureInfo ใน .NET คืออะไร


358

ใน. NET มีCultureInfoคลาสในSystem.Globalizationเนมสเปซ มันมีสองคุณสมบัติที่คล้ายกันทั้งคืนค่าของCultureInfoประเภทและCurrentCultureCurrentUICulture

ความแตกต่างระหว่างพวกเขาคืออะไร?

ฉันควรใช้อันใดเมื่อใดและเพราะเหตุใด


28
โปรดทราบว่า Microsoft ในด้านปัญญาของพวกเขาจะไม่แยกวัฒนธรรม UI ของภาษาอังกฤษแบบสหรัฐอเมริกาและ (อังกฤษ) ภาษาอังกฤษหรือภาษาอังกฤษอื่น ๆ ไม่มี MUI สำหรับภาษาอังกฤษซึ่งหมายความว่าCurrentUICultureจะเป็น en-US บนเครื่องภาษาอังกฤษเสมอโดยไม่คำนึงถึงสิ่งCurrentCultureใดซึ่งสามารถตั้งค่าเพื่อ จำกัด การตั้งค่าภูมิภาค
nicodemus13

11
ใช่. ฉันอยู่ในสหราชอาณาจักรและพบว่าCurrentCulture'en-GB' แต่CurrentUICultureเป็น 'en-US'
พันเอก Panic

เพิ่งพบบทความนี้อธิบายรายละเอียดนี้: github.com/jbe2277/waf/wiki/CurrentCulture-vs.-CurrentUICulture
RinoTom

คำตอบ:


346

CurrentCultureเป็นตัวแทน NET. ของสถานที่ผู้ใช้เริ่มต้นของระบบ สิ่งนี้จะควบคุมจำนวนและการจัดรูปแบบวันที่ที่เป็นค่าเริ่มต้นและสิ่งที่คล้ายกัน

CurrentUICulture อ้างถึงภาษาส่วนต่อประสานผู้ใช้ที่เป็นค่าเริ่มต้นซึ่งเป็นการตั้งค่าที่นำมาใช้ใน Windows 2000 ส่วนใหญ่เกี่ยวกับส่วนการแปลภาษาท้องถิ่น / การแปล UI ของแอพของคุณ

ตัวเลือกภูมิภาคใดก็ตามที่ระบบกำหนดให้มีจะเป็นค่า "ปัจจุบัน" ในแอป. NET ของคุณ

บ่อยครั้งที่พวกเขาทั้งคู่เหมือนกัน แต่ในระบบของฉันพวกเขาจะแตกต่างกัน: ฉันชอบตัวเลขและวันที่ของฉันในรูปแบบเยอรมันดังนั้นCurrentCultureจะเป็นภาษาเยอรมัน แต่ฉันก็ชอบแอปพลิเคชันทั้งหมดของฉันในภาษาอังกฤษด้วยดังนั้นCurrentUICultureจะเป็นภาษาอังกฤษ

มีบทความที่ดีในหัวข้อ: การเรียงลำดับทั้งหมด: ทำไมเราจึงมีทั้ง CurrentCulture และ CurrentUICulture


5
อันที่จริงนี่อาจเป็นทางเลือกที่ดีสำหรับคำอธิบายในเชิงลึก: ฟอรัม.asp.net/post/1080435.aspx
Michael12345

@ Michael12345 ขอบคุณสำหรับคำใบ้ ฉันอัพเดทลิงค์แล้ว ลิงก์ที่คุณโพสต์ไปนั้นดีเช่นกันอาจจะดีกว่า
Tomalak

5
นี่เป็นชื่อที่แย่มากเนื่องจาก CurrentUICulture หมายถึง CurrentLanguageCulture และ CurrentCulture จริงๆหมายถึง CurrentDataCulture
Pxtl

2
@Pxtl: ฉันเลือกสำหรับCurrentFormattingCultureมากกว่าCurrentDataCulture อย่างไรก็ตามโปรดทราบว่าสิ่งเหล่านี้อาจไม่ได้แยกจากกันอย่างเห็นได้ชัดแม้กับชื่อของคุณที่แนะนำ ตัวอย่างเช่นฉันขอโต้แย้งรูปแบบวันที่แบบยาว ( D) อาจมี "ภาษา" อยู่บ้าง: en-USส่งคืน "วันศุกร์ที่ 6 เมษายน 2018" ในขณะที่ru-RUส่งคืน "6 апреля 2018 г. "
หรือผู้ทำแผนที่

107

นี่เป็นเคล็ดลับง่าย ๆ ที่ฉันใช้เพื่อจดจำว่าควรใช้ตัวไหน:

(date, currency, double).tostring = CurrentCulture

resource.fr-CA.resx file = currentUICulture

หากความคิดเห็นจากnicodemus13และพันเอก Panicนั้นน่าเชื่อถือดูเหมือนว่าส่วนที่สองของกลอุบายของคุณจะไม่ทำงาน
หรือผู้ทำแผนที่

15

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

  • CurrentCultureหมายถึงการตั้งค่าของเว็บเซิร์ฟเวอร์ ตัวอย่างเช่นถ้าแอพลิเคชันเว็บของคุณ ASP.NET เป็นเจ้าภาพในเยอรมนี, ค่าของจะมากที่สุดอาจจะเป็นCutlureInfo.CurrentCulture de-DEดังนั้นการ.ToString()จัดรูปแบบเริ่มต้นสำหรับIFormattableประเภทจะใช้การจัดรูปแบบภาษาเยอรมันเริ่มต้นหรือประเภทที่ได้รับการตั้งค่าบนเซิร์ฟเวอร์ระบบปฏิบัติการเป็นค่าเริ่มต้น

  • CurrentUICultureสามารถบันทึกได้จากตัวแทนผู้ใช้และอาจแสดงถึงวัฒนธรรมส่วนต่อประสานผู้ใช้ของลูกค้าที่เชื่อมต่อกับเว็บไซต์ ตัวอย่างเช่นถ้าคุณโหลดเว็บไซต์ที่จากรัสเซีย, การตั้งค่าในท้องถิ่นของคุณมีการกำหนดให้ใช้ภาษารัสเซียและตัวแทนผู้ใช้ของคุณจะส่งการตั้งค่าสถานที่ของคุณไปยังเซิร์ฟเวอร์ (Opera และ IE ทำเช่นนี้โดยอัตโนมัติไม่แน่ใจสำหรับ Chrome และ Firefox) ที่CurrenUICultureจะ ru-RUแทน สิ่งนี้จะทำให้ทรัพยากรใด ๆ เช่นสตริงที่แปลแล้วถูกดึงผ่าน ResourceManager หรือนิพจน์การแปลในไฟล์ ASP.NET aspx / ascx เป็นภาษารัสเซีย (หากมีการแปล)


13

แตกต่าง:

  1. CurrentCultureสำหรับการจัดรูปแบบของวันที่และสกุลเงินในขณะที่ CurrentUICultureไปกับภาษา / การแปล มันจะถูกใช้โดยResourceManagerการค้นหาทรัพยากรโดยวัฒนธรรม
  2. namespace ของ CurrentCultureชั้นอยู่ในSystem.Globalizationขณะที่ มาจากCurrentUICultureSystem.Threading
  3. CurrentCultureจะยังคงอยู่ในคำขอที่แตกต่างกันในเซสชั่นในขณะที่CurrentUICultureจะต้องมีการตั้งค่ากับทุกคำขอ

อุปมา:

พวกเขาทั้งสองเป็นSystem.Globalization.CultureInfoกรณี


8

เป็นที่น่าสังเกตว่าสถานที่ที่CurrentUICultureรองรับประเทศที่ไม่ใช่ประเทศเช่น 'en' (วัฒนธรรมที่เป็นกลาง) ในขณะที่CurrentCultureสนับสนุนสถานที่เฉพาะประเทศเช่น 'en-GB' เท่านั้น การตั้งค่าCurrentCultureวัฒนธรรมที่เป็นกลางจะทำให้ArgumentExceptionกับวัฒนธรรมที่เป็นกลางจะโยน

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

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