Apa perbedaan antara Budaya dan UICulture?

126

Bisakah seseorang memberi saya sedikit lebih banyak informasi tentang perbedaan antara Culturedan UICulturedalam kerangka NET.? Apa yang mereka lakukan dan kapan harus menggunakan apa?

Niklas
sumber

Jawaban:

148

Culturemempengaruhi bagaimana data yang tergantung pada budaya (tanggal, mata uang, angka, dan sebagainya) disajikan. Berikut ini beberapa contoh:

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

Kultur juga memengaruhi penguraian input pengguna dengan cara yang sama:

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

Waspadalah terhadap kasus di mana parsing berhasil tetapi hasilnya tidak seperti yang Anda harapkan.

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

UICulturememengaruhi file sumber mana (Resources. lang .resx) yang akan dimuat oleh aplikasi Anda.

Jadi untuk memuat sumber daya Jerman (mungkin teks yang dilokalkan) Anda akan mengatur UICulturebudaya Jerman dan menampilkan pemformatan Jerman (tanpa dampak pada sumber daya mana yang dimuat) yang akan Anda atur Culture.

dee-see
sumber
39
Yang berarti Anda dapat memiliki label bahasa Inggris dan UI (bahasa Inggris UICulture), dan mata uang Norwegia, tanggal, waktu, dan pemformatan angka (Budaya Norwegia.) Dalam istilah Windows, anggap itu memiliki paket bahasa yang diinstal untuk menu dan kotak dialog (UICulture), tetapi berjalan dengan pengaturan regional norwegian (Budaya.)
Lasse V. Karlsen
2
Untuk menekankan implikasi ini: Bahkan jika Anda tidak mendukung bahasa pengguna, pastikan Anda mendukung budaya mereka, untuk memformat! Saya telah melihat kesalahan di mana aplikasi kembali ke "en-US" baik untuk budaya dan bahasa, ketika itu hanya perlu mundur untuk bahasa.
ToolmakerSteve
1
Apa gunanya menggunakan seluruh CultureInfoobjek hanya untuk menentukan file sumber daya di mana a stringakan cukup? (Misalnya Languageproperti dari FrameworkElement)
Wouter
2

Culture and UICulture

Nilai adalah pasangan string dua huruf, yang pertama adalah untuk mendefinisikan bahasa dan yang kedua untuk mendefinisikan wilayah. Contoh:

en-GBdi sini enmewakili Englishdan GBmewakiliGreat Briton

en-USdi sini enmewakili Englishdan USmewakiliUnited States

Gunakan Cultureuntuk fungsi tergantung Budaya seperti tanggal, waktu. dan UICultureuntuk pemuatan file sumber daya yang benar.

Senjata X
sumber
0

Hanya masalah kecil untuk dipertimbangkan selain penjelasan luar biasa @ Vache: Anda dapat mengatur UICulture dan Culture pada (level halaman dan level aplikasi).

Untuk mengaturnya pada level aplikasi, cukup tambahkan sesi globalisasi di web.config

misalnya <globalization uiCulture="es" culture="es-MX" />

Dan untuk mengaturnya pada level halaman, yang bagus untuk ditambahkan pada halaman (individual) tertentu, atur atribut Culture dan UICulture dalam direktif @ page

misalnya <%@ Page UICulture="es" Culture="es-MX" %>

Hooman
sumber
-4

Properti UICulture mungkin berubah untuk setiap browser Web, sedangkan Culture tetap konstan.

Nilai Budaya dapat diatur hanya untuk budaya tertentu, seperti en-US atau en-GB. Ini mencegah persyaratan untuk mengidentifikasi simbol mata uang yang benar untuk digunakan untuk en, di mana en-US dan en-GB memiliki simbol mata uang yang berbeda. Pengguna dapat mengatur budaya dan budaya UI di browser mereka.

Mohammed Nazer
sumber