Apa perbedaan antara properti CurrentCulture dan CurrentUICulture dari CultureInfo di .NET?

359

Di .NET ada CultureInfokelas di System.Globalizationnamespace. Ia memiliki dua properti yang serupa, keduanya mengembalikan nilai CultureInfotipe: CurrentCulturedan CurrentUICulture.

Apa perbedaan di antara mereka?

Yang mana yang harus saya gunakan kapan dan mengapa?

percikan
sumber
28
Ingatlah bahwa Microsoft, dalam kebijaksanaannya, tidak memisahkan budaya UI dari Bahasa Inggris AS dan Inggris (Inggris) atau bahasa Inggris lainnya. Tidak ada MUI untuk bahasa Inggris, yang berarti CurrentUICultureakan selalu menjadi en-US pada mesin berbahasa Inggris, terlepas dari CurrentCulture, yang dapat diatur untuk melokalkan Pengaturan Regional.
nicodemus13
11
Iya. Saya di Inggris dan menemukan CurrentCulture'en-GB', tetapi CurrentUICulture'en-US'.
Kolonel Panic
Baru saja menemukan artikel ini menjelaskan ini secara terperinci: github.com/jbe2277/waf/wiki/CurrentCulture-vs.-CurrentUICulture
RinoTom

Jawaban:

347

CurrentCultureadalah representasi .NET dari lokal pengguna default sistem. Ini mengontrol angka default dan format tanggal dan sejenisnya.

CurrentUICulture mengacu pada bahasa antarmuka pengguna default, pengaturan yang diperkenalkan pada Windows 2000. Ini terutama mengenai bagian pelokalan / terjemahan UI aplikasi Anda.

Opsi regional apa pun yang dikonfigurasikan oleh sistem akan memiliki nilai "Lancar" di aplikasi .NET Anda.

Sering kali keduanya sama. Tetapi pada sistem saya mereka akan berbeda: Saya lebih suka angka dan tanggal saya dalam format Jerman, jadi CurrentCultureitu akan Jerman, tetapi saya juga lebih suka semua aplikasi saya dalam bahasa Inggris, jadi itu CurrentUICultureakan menjadi bahasa Inggris.

Ada artikel bagus tentang topik ini: Menyortir semuanya: Mengapa kami memiliki CurrentCulture dan CurrentUICulture

Tomalak
sumber
5
Sebenarnya ini mungkin menjadi alternatif yang baik untuk penjelasan mendalam: forums.asp.net/post/1080435.aspx
Michael12345
@ Michael12345 Terima kasih atas petunjuknya. Saya telah memperbarui tautannya. Posting yang Anda tautkan juga layak, mungkin bahkan lebih baik.
Tomalak
5
Itu adalah nama yang mengerikan, karena CurrentUICulture benar-benar berarti CurrentLanguageCulture dan CurrentCulture benar-benar berarti CurrentDataCulture.
Pxtl
2
@Pxtl: Saya akan memilih CurrentFormattingCulture daripada CurrentDataCulture . Namun, perhatikan bahwa ini mungkin tidak jelas terpisah seperti yang disarankan oleh nama Anda. Sebagai contoh, saya berpendapat format tanggal panjang ( D) dapat berisi beberapa "bahasa": en-USpengembalian "Jumat, 6 April 2018", sedangkan ru-RUpengembalian "6 апреля 2018 г.".
ATAU Mapper
107

Ini adalah trik sederhana yang saya gunakan untuk mengingat yang harus digunakan:

(date, currency, double).tostring = CurrentCulture

resource.fr-CA.resx file = currentUICulture
foxontherock
sumber
Jika komentar dari nicodemus13 dan Kolonel Panic dapat dipercaya, sepertinya bagian kedua dari trik Anda tidak akan berhasil.
ATAU Mapper
15

Cara yang baik untuk membuat perbedaan selain penjelasan yang bagus yang dilakukan oleh sesama pengguna, dan aspek penting dalam pengembangan aplikasi web adalah sebagai berikut:

  • CurrentCulturemewakili pengaturan server web. Misalnya, jika aplikasi web ASP.NET Anda dihosting di Jerman, nilai CutlureInfo.CurrentCulturekemungkinan besar adalah de-DE. Dengan demikian, .ToString()pemformatan default untuk IFormattabletipe akan menggunakan format Jerman default, atau yang telah ditetapkan pada OS server sebagai default.

  • CurrentUICulturedapat ditangkap dari agen pengguna, dan dapat mewakili budaya antarmuka pengguna dari klien yang terhubung ke situs web. Sebagai contoh, jika Anda memuat bahwa website dari Rusia, pengaturan lokal Anda ditetapkan untuk menggunakan bahasa Rusia, dan agen pengguna Anda mengirimkan pengaturan lokal Anda ke server (Opera dan IE melakukan ini secara otomatis, tidak yakin untuk Chrome dan FireFox), yang CurrenUICultureakan mewakili ru-RU. Ini akan menyebabkan sumber daya apa pun seperti string terlokalisasi yang diambil melalui ResourceManager atau ekspresi lokalisasi dalam file ASP.NET aspx / ascx berada dalam bahasa Rusia (jika terjemahan tersedia).

Ivaylo Slavov
sumber
13

Perbedaan:

  1. CurrentCultureadalah untuk memformat tanggal dan mata uang sambil CurrentUICulturemenggunakan bahasa / terjemahan. Ini akan digunakan ResourceManageruntuk mencari sumber daya berdasarkan budaya.
  2. Namespace CurrentCulturekelas System.Globalizationsementara CurrentUICultureberasal dari System.Threading.
  3. CurrentCulturetetap di berbagai permintaan dalam sesi sementara CurrentUICultureperlu diatur dengan setiap permintaan.

Kemiripan:

Keduanya adalah System.Globalization.CultureInfocontoh.

Matas Vaitkevicius
sumber
8

Perlu dicatat bahwa CurrentUICulturemendukung lokal spesifik non-negara seperti 'en' (budaya netral) sedangkan CurrentCultureHANYA mendukung lokal spesifik negara seperti 'en-GB'. Pengaturan CurrentCultureke budaya netral akan melempar ArgumentException.

Saya berasumsi bahwa ini adalah karena format seperti tanggal dan mata uang lebih kuat terkait dengan negara itu sendiri, tetapi bahasa yang ditampilkan sering dipertukarkan antar negara.

Sebris87
sumber