วัฒนธรรมคงที่คืออะไร?


173

ใครช่วยยกตัวอย่างแสดงให้เห็นถึงการใช้งานวัฒนธรรมคงที่บ้างไหม? ฉันไม่เข้าใจว่าเอกสารอธิบายอะไร


14
มันเป็นภาษาอังกฤษ แต่ไม่ได้เกี่ยวข้องกับสถานที่ใด ๆ

คำตอบ:


132

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

ความสามารถในการใช้วัฒนธรรมเดียวกันในแต่ละครั้งมีความสำคัญมากในหลาย ๆ กระแสตัวอย่างเช่นการทำให้เป็นอนุกรม: คุณสามารถมีค่า 1,1 ในหนึ่งวัฒนธรรมและ 1.1 ในอีกหนึ่ง หากคุณจะพยายามวิเคราะห์ค่า "1,1" ในวัฒนธรรมที่สองการแยกวิเคราะห์จะล้มเหลว อย่างไรก็ตามคุณสามารถใช้วัฒนธรรมที่ไม่เปลี่ยนแปลงเพื่อแปลงตัวเลขเป็นสตริงและแยกวิเคราะห์ในภายหลังจากคอมพิวเตอร์เครื่องใดก็ได้ด้วยชุดวัฒนธรรมใด ๆ

// Use some non-invariant culture.
CultureInfo nonInvariantCulture = new CultureInfo("en-US");
Thread.CurrentThread.CurrentCulture = nonInvariantCulture;

decimal dec = 1.1m;
string convertedToString = dec.ToString();

// Simulate another culture being used,
// following code can run on another computer.
nonInvariantCulture.NumberFormat.NumberDecimalSeparator = ",";

decimal parsedDec;

try
{
    // This fails because value cannot be parsed.
    parsedDec = decimal.Parse(convertedToString);
}
catch (FormatException)
{
}

// However you always can use Invariant culture:
convertedToString = dec.ToString(CultureInfo.InvariantCulture);

// This will always work because you serialized with the same culture.
parsedDec = decimal.Parse(convertedToString, CultureInfo.InvariantCulture);

9
สำหรับสิ่งที่คุ้มค่านี่คือในSystem.Globalizationเนมสเปซ
Jim H.

1
สิ่งนี้จะใช้ได้เสมอเพราะคุณต่อเนื่องกับวัฒนธรรมเดียวกัน << สิ่งนี้ไม่สมเหตุสมผลสำหรับฉันฉันคิดว่าฉันเข้าใจผิดบางอย่าง ถ้าใช้CultureInfo.InvariantCultureผลงานเพราะคุณต่อเนื่องกับวัฒนธรรมเดียวกัน .... ถ้าอย่างนั้นมันก็ไม่เหมือนกับการใช้CultureInfo.CurrentCultureใช่มั้ย
Alisson

3
@Alisson หากคุณใส่แอนดรูโค้ดสองประโยคสุดท้ายลงในโฟลว์ดั้งเดิมฉันคิดว่ามันสมเหตุสมผลดีกว่า หากคุณเป็นอันดับใช้แล้วคุณจะรู้ว่าคุณก็จะสามารถที่จะแยกกลับไปทศนิยมโดยใช้CultureInfo.InvariantCulture CultureInfo.InvariantCultureหากคุณใช้CultureInfo.CurrentCultureการทำให้เป็นอันดับผู้ใช้ของคุณอาจมี "en-US" เป็นวัฒนธรรมปัจจุบัน ผู้ใช้รายถัดไปที่แยกวิเคราะห์กลับเป็นทศนิยมอาจมีวัฒนธรรมปัจจุบันที่ใช้ "," สำหรับตัวคั่น
David Specht

1
@Andrew บางทีฉันอาจจะหนาแน่น แต่ฉันไม่สามารถเข้าใจสิ่งที่คุณพูดได้หากไม่มีความคิดเห็นของเดวิด ฉันแก้ไขคำตอบของคุณให้ชัดเจน
jpaugh

111

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

โดยทั่วไปจะเป็นวัฒนธรรมเฉพาะที่เป็นเทียมและจะไม่เปลี่ยนแปลง


4
โดยเฉพาะคุณจะไม่ถูกจับโดยการใช้เครื่องหมายจุลภาคและจุดต่าง ๆ ในรูปแบบสตริงของตัวเลขหรือด้วยการแปลงตัวพิมพ์ใหญ่และตัวพิมพ์เล็ก
Steve Gilham

8
Yesss ... ปัญหาทั่วไปสำหรับ: * โปรแกรมเมอร์ชาวอเมริกันซึ่งคิดว่าคำนี้เป็นภาษาอังกฤษ;) จากนั้นลูกค้าชาวเยอรมันเขียน 1.000,00 ต่อ 1,000;) Ouch * แม้แต่ในภาษาเดียวกันสวิตเซอร์แลนด์และเยอรมันเช่นใช้ "" และ "," ด้วยวิธีต่างๆในตัวเลข ผลลัพธ์ -> ไฟล์กำหนดค่าเป็นขยะ ใช้ภาษาที่ไม่เปลี่ยนแปลงที่นั่น;)
TomTom

23
เพื่อเพิ่มความคิดเห็นของสตีฟ: มันเป็นวัฒนธรรมที่ใช้เมื่อคุณไม่สนใจว่าสิ่งต่าง ๆ จะดูอย่างไร (คุณไม่สนใจว่ามันใช้เครื่องหมายจุลภาคหรือคะแนนหรืออะไรก็ตามเพราะผู้ใช้จะไม่เห็นมัน) แต่คุณต้องการมันเสมอ ให้เหมือนกัน (เช่นเพราะคุณต้องสามารถอ่านในสิ่งที่คุณเขียน)
itowlson

7

มันใช้สำหรับสิ่งที่เหมือนกันโดยไม่คำนึงถึงวัฒนธรรม (ซึ่งไม่จำเป็นต้องแปลเป็นบางวัฒนธรรม X ให้เหมาะสม)

เป็นตัวอย่าง - https://msdn.microsoft.com/en-us/library/4c5zdc6a(v=vs.100).aspx เมื่อคุณเขียนไฟล์เฉพาะแอปที่ผู้ใช้ไม่ควรยุ่งเกี่ยวกับคุณควรใช้ InvariantCulture สำหรับวิธีการทั้งหมดที่ใช้ในพารามิเตอร์ทางวัฒนธรรม

โปรดทราบว่าตามเอกสารที่ลิงก์ไว้ด้านบน:

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


3
สิ่งนี้พูดถึงข้อพิสูจน์ว่า Invariant Culture นั้นมีจุดประสงค์เพื่อเป็นรูปแบบสื่อกลางเท่านั้นเช่นหากคุณกำลังแสดงเนื้อหาให้กับผู้ใช้ที่เป็นผลลัพธ์ของวัฒนธรรมที่ไม่เปลี่ยนแปลง (นั่นคือ 'ใน' วัฒนธรรมที่ไม่เปลี่ยนแปลง) คุณกำลังทำอยู่ มีบางอย่างผิดปกติและไม่เข้าใจวัฒนธรรมที่ไม่เปลี่ยนแปลง
mlhDev

3

วัฒนธรรมที่ไม่แปรเปลี่ยนคือความรู้สึกไวต่อวัฒนธรรม มันเกี่ยวข้องกับภาษาอังกฤษ แต่ไม่ได้มีประเทศ / ภูมิภาคใด ๆ

CultureInfo.InvariantCulture ดึงอินสแตนซ์ของวัฒนธรรมที่ไม่เปลี่ยนแปลง มันสามารถใช้ในเกือบทุกวิธีใน System.Globalization namespace ที่ต้องการวัฒนธรรม

วัตถุที่ส่งคืนโดยคุณสมบัติเช่น CompareInfo, DateTimeFormat และ NumberFormat ยังสะท้อนถึงการเปรียบเทียบสตริงและการจัดรูปแบบของวัฒนธรรมที่ไม่เปลี่ยนแปลง คุณสมบัติ InvariantCulture มีประโยชน์เมื่อคุณต้องการแสดงข้อมูลที่มีอยู่ในรูปแบบที่ไม่ขึ้นกับวัฒนธรรม

ตัวอย่างเช่นถ้าคุณต้องการแสดงตัวเลขหรือวันที่และเวลาในรูปแบบที่เป็นอิสระที่เฉพาะเจาะจงของวัฒนธรรมในปัจจุบันโปรแกรมที่คุณสามารถใช้CultureInfo.InvariantCulture


0

มันเป็นภาษาอังกฤษสากลที่ไม่เฉพาะเจาะจงสำหรับภูมิภาคทั่วไปและข้อมูลอื่น ๆ ที่เกี่ยวข้อง มันเหมือนภาษาของภาษาการเขียนโปรแกรมเอง คุณสามารถเชื่อถือได้ในการตั้งค่าปฏิทินสากล ในสถานการณ์ที่คุณต้องการสร้างชื่อคอนโทรลเลอร์, ชื่อ URL, ชื่อผู้รับมอบสิทธิ์ ... ฯลฯ และต้องการสิ่งต่าง ๆ ที่จะดำเนินการอย่างเป็นธรรมชาติและเป็นสากลในหมู่ผู้ใช้ทั้งหมด

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