ใครช่วยให้ข้อมูลเพิ่มเติมเกี่ยวกับความแตกต่างระหว่างCulture
และUICulture
ภายใน. NET framework ได้ไหม พวกเขาทำอะไรและใช้อะไรเมื่อไหร่?
ใครช่วยให้ข้อมูลเพิ่มเติมเกี่ยวกับความแตกต่างระหว่างCulture
และUICulture
ภายใน. NET framework ได้ไหม พวกเขาทำอะไรและใช้อะไรเมื่อไหร่?
คำตอบ:
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
คุณจะตั้ง
CultureInfo
วัตถุทั้งหมดเพียงเพื่อกำหนดไฟล์ทรัพยากรที่ a string
จะเพียงพอ? (เช่นLanguage
ทรัพย์สินของFrameworkElement
)
Culture and UICulture
ค่าคือคู่ของสตริงสองตัวอักษรตัวแรกใช้สำหรับกำหนดภาษาและอันที่สองสำหรับกำหนดขอบเขต ตัวอย่าง:
en-GB
นี่en
แสดงถึงEnglish
และGB
แสดงถึงGreat Briton
en-US
นี่en
แสดงถึงEnglish
และUS
แสดงถึงUnited States
ใช้Culture
สำหรับฟังก์ชันที่ขึ้นกับวัฒนธรรมเช่นวันที่เวลา และใช้UICulture
สำหรับการโหลดไฟล์ทรัพยากรที่ถูกต้อง
เป็นเพียงเรื่องเล็กน้อยที่ต้องพิจารณานอกเหนือจากคำอธิบายที่ยอดเยี่ยมของ @ Vache: คุณสามารถตั้งค่าทั้ง UICulture และ Culture ได้ที่ (ระดับหน้าและระดับแอปพลิเคชัน)
หากต้องการตั้งค่าในระดับแอปพลิเคชันเพียงเพิ่มเซสชันโลกาภิวัตน์ใน web.config
เช่น <globalization uiCulture="es" culture="es-MX" />
และหากต้องการตั้งค่าที่ระดับหน้าซึ่งเป็นการดีที่จะเพิ่มในหน้าเฉพาะ (แต่ละหน้า) ให้ตั้งค่าแอตทริบิวต์วัฒนธรรมและ UICulture ภายใน @ page directive
เช่น <%@ Page UICulture="es" Culture="es-MX" %>
คุณสมบัติ UICulture อาจเปลี่ยนแปลงสำหรับแต่ละเว็บเบราว์เซอร์ในขณะที่วัฒนธรรมคงที่
ค่าวัฒนธรรมสามารถตั้งค่าเป็นวัฒนธรรมเฉพาะเท่านั้นเช่น en-US หรือ en-GB สิ่งนี้ป้องกันข้อกำหนดในการระบุสัญลักษณ์สกุลเงินที่ถูกต้องเพื่อใช้สำหรับ en โดยที่ en-US และ en-GB มีสัญลักษณ์สกุลเงินที่แตกต่างกัน ผู้ใช้สามารถกำหนดวัฒนธรรม UI และวัฒนธรรมในเบราว์เซอร์ของตน