Değişmez Kültür nedir?


173

Herkes Değişmez Kültürün kullanımını göstermek için bir örnek verebilir mi? Belgelerin ne anlattığını anlamıyorum.


14
İngilizce'dir, ancak herhangi bir konumla ilişkili değildir.

Yanıtlar:


132

Değişmez kültür, değişmeyeceği için yararlı olan özel bir kültürdür. Mevcut kültür bir kullanıcıdan diğerine, hatta bir çalıştırmadan diğerine değişebilir, böylece aynı kaldığına güvenemezsiniz.

Her seferinde aynı kültürü kullanabilmek, çeşitli akışlarda çok önemlidir, örneğin serileştirme: bir kültürde 1,1, diğerinde 1,1 değerine sahip olabilirsiniz. İkinci kültürde "1,1" değerini ayrıştırmaya çalışırsanız, ayrıştırma başarısız olur. Bununla birlikte, bir sayıyı bir dizeye dönüştürmek ve daha sonra herhangi bir kültür kümesine sahip herhangi bir bilgisayardan geri ayrıştırmak için değişmez kültürü kullanabilirsiniz.

// 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
Değeri için, bu System.Globalizationisim alanında.
Jim H.

1
Bu her zaman işe yarayacak çünkü aynı kültürle serileştirdiniz << bu benim için bir anlam ifade etmedi, sanırım bir şey yanlış anladım. CultureInfo.InvariantCultureAynı kültürle serileştirdiğiniz için çalışırsanız .... o zaman kullanmakla aynı şey değil CultureInfo.CurrentCulturemi?
Alisson

3
@Alisson Andrew'un son iki kod ifadesini orijinal akışına geri koyarsanız, bunun daha anlamlı olacağını düşünüyorum. Her zaman kullanarak serileştirirseniz, kullanarak CultureInfo.InvariantCultureher zaman ondalık sayıya ayrışabileceğinizi bilirsiniz CultureInfo.InvariantCulture. CultureInfo.CurrentCultureSerileştirmek için kullanırsanız , kullanıcınızın mevcut kültürü olarak "en-US" olabilir. Ondalık sayıya geri ayrıştıran bir sonraki kullanıcı, ayırıcı için "," kullanan geçerli bir kültüre sahip olabilir.
David Specht

1
@Andrew Belki yoğunum, ama David'in yorumu olmadan ne dediğini anlayamadım. Cevabınızı açık olarak düzenledim.
jpaugh

111

Tanımlanmış davranışa sahip İngilizceye dayanan sahte bir kültür. Örneğin, kullanıcı tarafından tanımlanmış kültürden bağımsız olarak okunup yazılabilmesi için yapılandırma dosyalarına bir şeyler yazmak harika.

Temel olarak yapay ve değişmeyecek özel bir kültürdür .


4
Özellikle, sayıların dize formlarındaki virgül ve noktaların farklı kullanımlarıyla veya tek harfli dönüşümlerle yakalanmayacaksınız.
Steve Gilham

8
Yesss ... için tipik bir sorun: * Kelimenin ingilizce olduğunu düşünen Amerikalı programcılar;) Ve sonra Alman müşteriler 1000 için 1.000,00 yazıyor;) Ah. * Aynı dilde bile, örneğin İsviçre ve Almanya "." ve "," olarak farklı şekillerde. Sonuç -> Yapılandırma dosyaları çöptür. Orada Değişmez Dil kullanın;)
TomTom

23
Steve'in yorumuna eklemek için: şeylerin nasıl göründüğünü umursamadığınızda kullanmak için kültür (virgül veya nokta veya başka bir şey kullanıp kullanmadığınızı umursamıyorsunuz, çünkü kullanıcı asla görmeyecek) ama her zaman ihtiyacınız var aynı olması için (örneğin, yazdıklarınızı okuyabilmeniz gerektiğinden).
itowlson

7

Kültürden bağımsız olarak aynı olan şeyler için kullanılır (uygun olması için bazı X kültürüne çevrilmesi gerekmez)

örnek olarak - https://msdn.microsoft.com/en-us/library/4c5zdc6a(v=vs.100).aspx . Kullanıcının uğraşmaması gereken uygulamaya özel bir dosya yazdığınızda, bir kültür parametresini alan tüm yöntemler için InvariantCulture kullanmalısınız.

Yukarıda bağlantılı dokümanlara göre:

Bununla birlikte, bir uygulama değişmez kültürü yalnızca bir dosyada saklanan verileri biçimlendirme ve ayrıştırma gibi kültürden bağımsız sonuçlar gerektiren işlemler için kullanmalıdır.


3
Bu, Değişmez Kültürün yalnızca bir ara format olması amaçlanan sonuçtan bahseder, yani kullanıcıya değişmez kültürün çıktısı olan şeyleri (yani değişmez kültürde ') görüntülüyorsanız, yanlış bir şey ve değişmez kültürü anlamıyorum.
mlhDev

3

Değişmez kültür kültüre duyarsızdır; İngilizce ile ilişkilidir, ancak herhangi bir ülke / bölge ile ilişkilendirilmez.

CultureInfo.InvariantCulture değişmez kültürün bir örneğini alır. Bir kültür gerektiren System.Globalization ad alanında hemen hemen her yöntemde kullanılabilir.

CompareInfo, DateTimeFormat ve NumberFormat gibi özellikler tarafından döndürülen nesneler, değişmez kültürün dize karşılaştırmasını ve biçimlendirme kurallarını da yansıtır. Görüntülemek istediğiniz zaman InvariantCulture özelliği kullanışlı geliyor verileri ısrar bir de kültür-bağımsız formatta.

Örneğin, bir sayıyı veya tarih saatini uygulamanın geçerli kültüründen bağımsız olarak belirli bir biçimde görüntülemek istiyorsanız, CultureInfo.InvariantCulture kullanabilirsiniz .


0

Bu, evrensel, basit, bölgeye özgü olmayan bir İngilizce dilidir ve diğer ilgili bilgilerdir. Programlama dilinin kendisi gibi. Evrensel bir takvim oluştururken ona güvenebilirsiniz; denetleyici adları, URL'ler, delege adları ... vb. oluşturmanız gerektiğinde. ve tüm kullanıcılar arasında doğal ve evrensel hareket edebilmek için gerekli şeylere ihtiyaç duyarlar.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.