.NET'te CultureInfo'nun CurrentCulture ve CurrentUICulture özellikleri arasındaki fark nedir?


359

.NET'te ad alanında CultureInfosınıf vardır System.Globalization. Her iki CultureInfotürün de değerlerini döndüren iki benzer özelliğe sahiptir : CurrentCultureve CurrentUICulture.

Onların arasındaki fark ne?

Hangisini ne zaman ve neden kullanmalıyım?


28
Microsoft'un bilgeliklerinde ABD İngilizcesi ve (İngiliz) İngiliz veya diğer İngilizlerin UI kültürlerini ayırmadığını unutmayın. İngilizce için MUI yoktur, yani Bölgesel Ayarları yerelleştirmek için ayarlanabilecek her CurrentUICulturene olursa olsun, İngilizce bir makinede her zaman en-US CurrentCultureolacaktır.
nicodemus13

11
Evet. İngiltere'deyim ve bulmak CurrentCulture'en-GB', ancak CurrentUICulture'en-US'.
Albay Panik

Bu makaleyi ayrıntılı olarak açıklayan bu makaleyi buldum: github.com/jbe2277/waf/wiki/CurrentCulture-vs.-CurrentUICulture
RinoTom

Yanıtlar:


347

CurrentCulturesistemin varsayılan kullanıcı yerel ayarının .NET temsilidir. Bu, varsayılan sayı ve tarih formatını ve benzerini kontrol eder.

CurrentUICulture Windows 2000'de tanıtılan bir ayar olan varsayılan kullanıcı arabirimi dilini belirtir. Bu öncelikle uygulamanızın kullanıcı arayüzü yerelleştirme / çeviri bölümü ile ilgilidir.

Sistemin sahip olması için yapılandırılan bölgesel seçenekler ne olursa olsun, .NET uygulamanızdaki "Geçerli" değerler olacaktır.

Çoğu zaman ikisi de aynıdır. Ama benim sistemimde farklı olacaklardı: Sayılarımı ve tarihlerimi Alman formatında tercih ediyorum, bu yüzden CurrentCultureAlman olurdu, ama aynı zamanda tüm uygulamalarımı İngilizce olarak tercih ediyorum, yani CurrentUICultureİngilizce olacaktı.

Konuyla ilgili güzel bir makale var: Hepsini sıralama Dışarı: Neden CurrentCulture ve CurrentUICulture'a sahibiz?


5
Aslında bu derinlemesine açıklama için iyi bir alternatif olabilir: forums.asp.net/post/1080435.aspx
Michael12345

@ Michael12345 İpucu için teşekkürler. Bağlantıyı güncelledim. Bağlantı verdiğiniz yazı da iyi, belki daha da iyi.
Tomalak

5
O zaman bu korkunç isimler, CurrentUICulture gerçekten CurrentLanguageCulture ve CurrentCulture gerçekten CurrentDataCulture anlamına geldiğinden.
Pxtl

2
@Pxtl: CurrentDataCulture yerine CurrentFormattingCulture tercih ediyorum . Yine de, bunların adlarınızın bile önerdiği kadar ayrık olmayabileceğini unutmayın. Örneğin, uzun tarih biçiminin ( ) oldukça "dil" içerebileceğini savunuyorum : 6 Nisan 2018 Cuma " döndürür , oysa " 6 апреля 2018 г. "döndürür. Den-USru-RU
VEYA Haritacı

107

Hangisini kullanacağımı hatırlamak için kullandığım basit bir numara:

(date, currency, double).tostring = CurrentCulture

resource.fr-CA.resx file = currentUICulture

Eğer nicodemus13 ve Albay Panic tarafından yapılan yorumlara güvenilecekse, hilenizin ikinci kısmı işe yaramaz gibi görünüyor.
VEYA Haritacı

15

Diğer kullanıcılar tarafından yapılan güzel açıklamalara ek olarak bir fark yaratmanın iyi bir yolu ve web uygulaması geliştirmenin önemli bir yönü şunlardır:

  • CurrentCultureweb sunucusunun kurulumunu temsil eder. Örneğin, ASP.NET web uygulamanız Almanya'da barındırılıyorsa, değeri CutlureInfo.CurrentCulturebüyük olasılıkla olur de-DE. Böylece, varsayılan .ToString()biçimlendirme IFormattabletürleri varsayılan Alman formattings veya Varsayılan olarak sunucu OS üzerinde kurulmuştur olanları kullanmak.

  • CurrentUICulturekullanıcı aracısından yakalanabilir ve web sitesine bağlanan istemcinin kullanıcı arayüzü kültürünü temsil edebilir. Eğer Rusya'dan bu web sitesini yüklemek Örneğin, yerel ayarları Rus dilini kullanmak üzere ayarlanan ve kullanıcı aracısı sunucuya (Opera ve IE emin Chrome ve Firefox için otomatik olarak yapmak) için yerel ayarları gönderir CurrenUICultureolur temsil eder ru-RU. Bu, ResourceManager aracılığıyla alınan yerelleştirilmiş dizeler veya ASP.NET aspx / ascx dosyalarındaki yerelleştirme ifadeleri gibi kaynakların Rusça olmasını sağlar (çeviriler varsa).


13

farklılıklar:

  1. CurrentCultureCurrentUICulturedil / çevirilerle giderken tarihlerin ve para biriminin biçimlendirilmesi içindir . ResourceManagerKültür tarafından kaynak aramak için kullanılacaktır .
  2. CurrentCultureSınıfın ad alanı System.Globalizationise CurrentUICulturegelir System.Threading.
  3. CurrentCultureoturumdaki farklı istekler arasında kalıcı olurken CurrentUICulture, her istekle birlikte ayarlanması gerekir.

Likeness:

İkisi de System.Globalization.CultureInfoörnek.


8

Bu fazlalaştı CurrentUICultureoysa destekleri olmayan ülkelere özgü 'tr' (Nötr kültürler) gibi yerel ayarlar CurrentCultureSADECE ülkeye özel 'en-GB' gibi yerel ayarlar destekler. Ayar CurrentCulturenötr kültürüne bir atacağım ArgumentException.

Bunun tarihler ve para birimi gibi biçimlerin ülkenin kendisiyle daha güçlü bir şekilde bağlantılı olduğunu, ancak görüntülenen dilin genellikle ülkeler arasında değiştirilebildiğini varsayıyorum.

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.