Sebelumnya saya pernah menulis globalisasi dalam ASP.NET MVC khusus untuk data. Kali ini saya akan membahas tentang globalisasi dalam ASP.NET MVC khusus untuk label yang kita pakai dalam page atau form. Misalnya dalam gambar form berikut ini kita menginginkan agar label seperti Name, Email, Subject, dan Message bisa otomatis menyesuaikan dengan bahasa tertentu yang kita targetkan untuk kondisi tertentu. Misalnya kalau yang membaca orang Indonesia (bisa diketahui dari value tertentu yg dikirimkan browser ke server) maka otomatis label-label tersebut berbahasa Indonesia, otherwise bahasa yang dipakai Inggris.

Ide yg mungkin muncul pertama kali adalah menggabungkan antara globalisasi data dan label. Jadi label-label tersebut pun kita simpan dalam sebuah tabel di database secara multi bahasa. Ide ini tidak salah, bahkan saya ingat salah satu arsitek dari US yang pernah kerja bareng dengan saya di sebuah perusahaan global pernah membuat translation library yang cara kerjanya mirip-mirip. Kalau kita database-minded, cara itulah yang kelihatannya paling mudah dibandingkan dengan cara yang lainnya.
Namun ASP.NET MVC, juga tidak lepas dari framework ASP.NET yang sudah dibentuk bertahun-tahun yang lalu. Dalam ASP.NET terdapat sebuah mekanisme globalisasi yang juga cukup mudah digunakan. Cara kerjanya sederhana. Kita tambahkan sebuah resource file dalam project Visual Studio kita, dimana kita bisa membuat mapping key dan value yang menunjukkan teks beserta terjemahannya dalam culture tertentu. Kita bisa menempatkan file resource ini dalam folder Properties di project kita seperti terlihat dalam gambar berikut ini.
Dalam file Resource.resx kita bisa mengisi mapping key dan meaning-nya dalam bahasa tertentu. Dalam gambar berikut ini saya mengisi tabel mapping tersebut dengan bahasa english.
Nah, kemudian kita bisa membuat file Resource.id-ID.resx yang identik dengan file Resource.resx hanya saja kita mengisi value-value nya dengan bahasa Indonesia. Dengan demikian dalam project web tersebut kita punya dua tabel mapping bahasa yaitu english dan indonesia. Sekarang bagaimana menggunakannya dalam coding ASP.NET MVC?
Yang pertama mesti kita mengerti dalam hal globalisasi adalah CultureInfo. Ini adalah sebuah konsep dalam .NET yang mengumpulkan karakteristik culture dari sebuah budaya: misalnya bahasa, format angka, simbol mata uang, format tanggal, dan lain sebagainya. Konsep kedua, kita bisa memberikan nilai CultureInfo tertentu kepada sebuah thread. Dalam .NET, sebuah thread memiliki property CurrentCulture dan CurrentUICulture. Untuk membuat sebuah thread aware terhadap sebuah culture tinggal assign saja kedua property tersebut dengan sebuah object yang bertype CultureInfo. Coding untuk melakukan hal tersebut kurang lebih akan tampak seperti ini.
Thread.CurrentThread.CurrentCulture = new CultureInfo(controller.CultureId);
Thread.CurrentThread.CurrentUICulture = new CultureInfo(controller.CultureId);
Bagi yang terbiasa coding di Web Form mungkin sudah familiar dengan coding di atas. Di ASP.NET MVC pun tidak berbeda, sama saja. Kita bisa letakkan coding di atas di sebuah controller atau di sebuah base controller yang dijadikan parent class untuk semua controller kita. Kita tidak perlu harus meletakkan coding di atas di sebuah event (misalnya OnPreInit di Web Form), namun kita bisa meletakannya sesuai konteks di mana coding tersebut diperlukan. Misalnya dalam constructor di base controller.
Kemudian di View kita (Web Form view atau View User Control) kita bisa me-refer ke strongly-typed class Resource dan langsung menggunakan property-property yang namanya sama dengan key dari tabel mapping kita di atas.Seperti terlihat dalam gambar berikut ini.
Nah, globalisasi dalam ASP.NET MVC gampang bukan?