ความแตกต่างระหว่างวัฒนธรรมและ UICulture คืออะไร?


126

ใครช่วยให้ข้อมูลเพิ่มเติมเกี่ยวกับความแตกต่างระหว่างCultureและUICultureภายใน. NET framework ได้ไหม พวกเขาทำอะไรและใช้อะไรเมื่อไหร่?

คำตอบ:


148

Cultureมีผลต่อวิธีการนำเสนอข้อมูลที่ขึ้นกับวัฒนธรรม (วันที่สกุลเงินตัวเลขและอื่น ๆ ) นี่คือตัวอย่างบางส่วน:

var date = new DateTime(2000, 1, 2);
var number = 12345.6789;

Thread.CurrentThread.CurrentCulture = new CultureInfo("de-DE");
Console.WriteLine(date); // 02.01.2000 00:00:00
Console.WriteLine(number.ToString("C")); // 12.345,68 €

Thread.CurrentThread.CurrentCulture = new CultureInfo("fr-CA");
Console.WriteLine(date); // 2000-01-02 00:00:00
Console.WriteLine(number.ToString("C")); // 12 345,68 $

Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US");
Console.WriteLine(date); // 1/2/2000 12:00:00 AM
Console.WriteLine(number.ToString("C")); // $12,345.68

วัฒนธรรมยังส่งผลต่อการแยกวิเคราะห์อินพุตของผู้ใช้ในลักษณะเดียวกัน:

const string numberString = "12.345,68";
decimal money;

Thread.CurrentThread.CurrentCulture = new CultureInfo("de-DE");
money = decimal.Parse(numberString); // OK!

Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US");
money = decimal.Parse(numberString); // FormatException is thrown, TryParse would return false

ระวังกรณีที่การแยกวิเคราะห์ประสบความสำเร็จแต่ผลลัพธ์ไม่เป็นอย่างที่คุณคาดหวัง

const string numberString = "12.345";
decimal money;

Thread.CurrentThread.CurrentCulture = new CultureInfo("de-DE");
money = decimal.Parse(numberString); // 12345

Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US");
money = decimal.Parse(numberString); // 12.345, where the . is a decimal point

UICultureมีผลต่อไฟล์ทรัพยากรใด (Resources. lang .resx) จะถูกโหลดโดยแอปพลิเคชันของคุณ

ดังนั้นเพื่อให้โหลดทรัพยากรเยอรมัน (ข้อความที่แปลภาษาสมมุติ) คุณจะตั้งUICultureกับวัฒนธรรมเยอรมันและเพื่อแสดงการจัดรูปแบบเยอรมัน (โดยไม่ส่งผลกระทบใด ๆ เกี่ยวกับทรัพยากรที่มีการโหลด) Cultureคุณจะตั้ง


39
ซึ่งหมายความว่าคุณสามารถมีป้ายกำกับภาษาอังกฤษและ UI (UICulture ภาษาอังกฤษ) และสกุลเงินนอร์เวย์วันที่เวลาและการจัดรูปแบบตัวเลข (วัฒนธรรมนอร์เวย์) ในแง่ของ Windows ให้คิดว่าชุดภาษานั้นติดตั้งไว้สำหรับเมนูและกล่องโต้ตอบ (UICulture) แต่ทำงานโดยใช้การตั้งค่าภูมิภาคของนอร์เวย์ (วัฒนธรรม)
Lasse V. Karlsen

2
เพื่อเน้นความหมายของสิ่งนี้: แม้ว่าคุณจะไม่รองรับภาษาของผู้ใช้ แต่ให้แน่ใจว่าคุณสนับสนุนวัฒนธรรมของพวกเขาสำหรับการจัดรูปแบบ! ฉันเคยเห็นข้อผิดพลาดที่ทำให้แอปกลับมาเป็น "en-US" ทั้งในแง่วัฒนธรรมและภาษาเมื่อจำเป็นต้องใช้ภาษาสำรองเท่านั้น
ToolmakerSteve

1
อะไรคือจุดสำคัญในการใช้CultureInfoวัตถุทั้งหมดเพียงเพื่อกำหนดไฟล์ทรัพยากรที่ a stringจะเพียงพอ? (เช่นLanguageทรัพย์สินของFrameworkElement)
Wouter

2

Culture and UICulture

ค่าคือคู่ของสตริงสองตัวอักษรตัวแรกใช้สำหรับกำหนดภาษาและอันที่สองสำหรับกำหนดขอบเขต ตัวอย่าง:

en-GBนี่enแสดงถึงEnglishและGBแสดงถึงGreat Briton

en-USนี่enแสดงถึงEnglishและUSแสดงถึงUnited States

ใช้Cultureสำหรับฟังก์ชันที่ขึ้นกับวัฒนธรรมเช่นวันที่เวลา และใช้UICultureสำหรับการโหลดไฟล์ทรัพยากรที่ถูกต้อง


0

เป็นเพียงเรื่องเล็กน้อยที่ต้องพิจารณานอกเหนือจากคำอธิบายที่ยอดเยี่ยมของ @ Vache: คุณสามารถตั้งค่าทั้ง UICulture และ Culture ได้ที่ (ระดับหน้าและระดับแอปพลิเคชัน)

หากต้องการตั้งค่าในระดับแอปพลิเคชันเพียงเพิ่มเซสชันโลกาภิวัตน์ใน web.config

เช่น <globalization uiCulture="es" culture="es-MX" />

และหากต้องการตั้งค่าที่ระดับหน้าซึ่งเป็นการดีที่จะเพิ่มในหน้าเฉพาะ (แต่ละหน้า) ให้ตั้งค่าแอตทริบิวต์วัฒนธรรมและ UICulture ภายใน @ page directive

เช่น <%@ Page UICulture="es" Culture="es-MX" %>


-4

คุณสมบัติ UICulture อาจเปลี่ยนแปลงสำหรับแต่ละเว็บเบราว์เซอร์ในขณะที่วัฒนธรรมคงที่

ค่าวัฒนธรรมสามารถตั้งค่าเป็นวัฒนธรรมเฉพาะเท่านั้นเช่น en-US หรือ en-GB สิ่งนี้ป้องกันข้อกำหนดในการระบุสัญลักษณ์สกุลเงินที่ถูกต้องเพื่อใช้สำหรับ en โดยที่ en-US และ en-GB มีสัญลักษณ์สกุลเงินที่แตกต่างกัน ผู้ใช้สามารถกำหนดวัฒนธรรม UI และวัฒนธรรมในเบราว์เซอร์ของตน

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