Artikel ini akan dimulai dengan konsep dasar globalisasi dan lokalisasi sumber daya di Asp.net, dan menjelaskan langkah-langkah dan metode untuk mencapai globalisasi dan lokalisasi di Asp.net1.1 dan Asp.net2.0.
satu. Konsep dasar
1. Mengapa melokalisasi sumber daya?
Situs kami dapat dilihat oleh orang-orang dari berbagai negara dan wilayah di seluruh dunia, dan orang-orang di setiap negara dan wilayah memiliki karakteristik bahasa dan budayanya sendiri. Ambil contoh tanah air kita yang besar. Tiongkok Daratan menggunakan bahasa Mandarin Sederhana, sedangkan Hong Kong, Makau, dan Taiwan menggunakan bahasa Mandarin Tradisional. Selain itu, setiap negara memiliki format ekspresi yang berbeda untuk mata uang, angka, kalender, dan informasi lainnya. Negara kita sebagian besar menggunakan format tahun, bulan, dan hari, sedangkan Amerika Serikat menggunakan format bulan, hari, dan tahun. Perbedaan seperti ini memang banyak, jadi saya tidak akan memberikan banyak contoh. Untuk memberikan pengalaman pengguna yang lebih baik kepada pengunjung situs web kami, kami harus memberikan solusi global. Selama pengguna memilih bahasa dan wilayahnya, situs akan menampilkan informasi halaman sesuai dengan bahasa dan kebiasaan budayanya lokalisasi.
2. Budaya, budaya tetap, budaya non-spesifik, nama budaya khusus budaya
mengikuti standar RFC 1766 dan berada dalam format "<kodebahasa2>-<kodenegara/wilayah2>", di mana <kodebahasa2> berasal dari ISO 639-1 kode dua huruf kecil, <country/regioncode2> adalah kode dua huruf besar yang berasal dari ISO 3166. Misalnya, bahasa Inggris AS adalah "en-US". Jika kode bahasa dua huruf tidak tersedia, kode tiga huruf yang berasal dari ISO 639-2 digunakan; misalnya, kode tiga huruf "div" digunakan untuk wilayah di mana bahasa Dhivehi digunakan. Beberapa nama budaya memiliki sufiks yang menentukan simbol tulisan; misalnya, "-Cyrl" menunjukkan simbol tulisan Sirilik, dan "-Latn" menunjukkan simbol tulisan Latin. Contoh:
Nama Budaya | Pengidentifikasi | Budaya Bahasa - Negara |
zh-CN | 0x0804 | Cina - Cina |
zh-TW | 0x0404 | Cina - Taiwan |
zh-CHS | 0x0004 | Cina Sederhana |
zh-CHT | 0x |
7C |
04 | Mandarin Tradisional | |
en | 0x0009 | Bahasa Inggris |
en - US | 0x0409 | Bahasa Inggris - Amerika Serikat | en
- | GB | 0x0809 |
uz | - | UZ - Cyrl |
0x0843 | Uzbek (Sirilik) - Uzbekistan uz-UZ-Latn 0x0443 | Uzbek (Latin) - Uzbekistan |
Budaya tetap tidak sensitif terhadap budaya. Anda dapat menggunakan string kosong ("") untuk menentukan budaya tetap berdasarkan nama atau pengidentifikasi budaya 0x007F. Contoh budaya invarian diwakili oleh properti InvariantCulture dari kelas CultureInfo. Budaya tetap hanya dikaitkan dengan bahasa Inggris, bukan negara mana pun. Ini dapat digunakan di hampir semua metode dalam namespace "globalisasi" yang memerlukan budaya. Jika program Anda melakukan perbandingan string atau operasi pengubahan huruf, program tersebut harus menggunakan InvariantCulture untuk memastikan bahwa apa pun budaya yang ditetapkan oleh sistem, perilaku akan dilakukan sesuai dengan budaya tetap bahasa Inggris yang diwakili oleh InvariantCulture. Namun, budaya tetap harus digunakan hanya oleh proses yang memerlukan hasil yang tidak bergantung pada budaya (seperti layanan sistem); jika tidak, hasil yang diperoleh mungkin salah secara bahasa atau tidak sesuai secara budaya. Contoh: CultureInfo Invc = New CultureInfo("");
CultureInfo Invc = CultureInfo.InvariantCulture; Kedua baris kode ini memiliki efek yang sama, tujuannya adalah untuk mendapatkan instance budaya yang invarian.
Misalnya, Anda sekarang ingin menjalankan metode dateTime.ToString() pada instance DateTime dateTime. Metode ini sebenarnya menggunakan CurrentCulture dari thread Anda saat ini sebagai budaya default, dan mengubah instance tanggal menjadi bentuk string yang sesuai berdasarkan budaya ini. Jadi jika kita tidak memerlukannya untuk melakukan operasi ToString sesuai dengan thread atau budaya sistem saat ini, maka kita harus menggunakan metode ini dateTime.ToString("G", CultureInfo.InvariantCulture) atau dateTime.ToString("G" , DateTimeFormatInfo.InvariantInfo) .
Budaya netral adalah budaya yang dikaitkan dengan suatu bahasa tetapi tidak dengan negara. Budaya tertentu adalah budaya yang diasosiasikan dengan bahasa tertentu dan negara tertentu. Misalnya, “en” adalah budaya netral, sedangkan “en-US” adalah budaya tertentu. Perhatikan bahwa "zh-CHS" (Tionghoa Sederhana) dan "zh-CHT" (Tionghoa Tradisional) bersifat netral budaya.
Budaya memiliki struktur hierarki, yaitu induk dari budaya tertentu adalah budaya non-spesifik, dan induk dari budaya non-spesifik adalah Budaya Invarian. Properti Induk dari kelas CultureInfo akan mengembalikan budaya non-spesifik yang terkait dengan budaya spesifik. Jika sumber daya spesifik budaya tidak ada pada sistem atau tidak tersedia, sumber daya non-kultur spesifik akan digunakan; jika sumber daya non-kultur spesifik juga tidak tersedia, sumber daya yang tertanam dalam rakitan utama akan digunakan.
3. Menerapkan tipe, properti, dan metode umum untuk pelokalan.
Kelas CultureInfo mewakili informasi tentang budaya tertentu, termasuk nama budaya, sistem penulisan, dan kalender yang digunakan, serta informasi tentang operasi umum (seperti format tanggal dan penyortiran string). Menyediakan akses ke objek informasi budaya tertentu. Secara umum ada dua cara untuk membuat instance kelas CultureInfo, sebagai berikut:
CultureInfo budaya = CultureInfo.CreateSpecificCulture (nama);
CultureInfo culture = new CultureInfo(name);
Perbedaan antara keduanya adalah dengan menggunakan metode pertama, Anda hanya dapat membuat instance CultureInfo dari budaya tetap atau budaya tertentu. Jika nama adalah string kosong, instance budaya tetap akan dibuat. Jika nama adalah budaya non-spesifik, instance CultureInfo khusus budaya default yang terkait dengan nama akan dibuat. Metode kedua adalah membuat instance CultureInfo dari budaya yang ditentukan berdasarkan namanya, yang dapat bersifat tetap, non-spesifik, atau spesifik budaya.
Properti CurrentCulture dari kelas Thread digunakan untuk mendapatkan atau mengatur budaya thread saat ini. Itu harus diatur pada budaya tertentu. Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US"); Jika Thread.CurrentThread.CurrentCulture = new CultureInfo("en ");
Properti CurrentUICulture dari kelas Thread digunakan untuk mendapatkan atau mengatur budaya saat ini yang digunakan oleh manajer sumber daya untuk menemukan sumber daya spesifik budaya pada waktu proses. Manajer sumber daya di sini dapat dikaitkan dengan kelas ResourceManger.
Thread.CurrentThread.CurrentUICulture = new CultureInfo("en");
Thread.CurrentThread.CurrentUICulture = new CultureInfo("en-US");
Kelas ResourceManger dapat menemukan sumber daya khusus budaya, menyediakan sumber daya pengganti ketika sumber daya yang dilokalkan tidak ada, dan mendukung serialisasi sumber daya. Konstruktor ResourceManager yang umum digunakan adalah ResourceManager publik(string, Majelis). Artinya adalah menginisialisasi instance baru dari kelas ResourceManager, yang mencari file sumber daya dari Majelis tertentu menggunakan nama root yang ditentukan. Yang disebut nama root adalah, misalnya, nama root dari file sumber daya bernama "MyResource.en-US.resources" adalah "MyResource". Namespace dapat ditambahkan ke ekspresi nama root, seperti "MyWebSite.Resource.UserFolder.MyResource". Majelis dapat berupa Majelis tempat halaman yang perlu memanggil file sumber daya berada, seperti typeof(MyPage).Assembly. Metode GetString dari kelas ResourceManager digunakan untuk mendapatkan nilai kunci yang ditentukan dalam file sumber daya. Contoh: Ketika properti CurrentUICulture dari thread telah disetel, ikuti metode berikut.
ResourceManager rm = ResourceManager baru("item", Majelis.GetExecutingAssembly());
String str = rm.GetString("welcome");
Jika Anda ingin mendapatkan resource sesuai dengan budaya yang ditentukan, tulislah sebagai berikut:
ResourceManager rm = ResourceManager baru("item", Majelis.GetExecutingAssembly());
CultureInfo ci = Thread.CurrentThread.CurrentCulture;
String str = rm.GetString("selamat datang",ci);
dua. Untuk menerapkan lokalisasi sumber daya di Asp.net1.1,
Anda harus terlebih dahulu membuat folder Sumber Daya di proyek situs web WebTest, dan menyimpan file sumber daya yang umum untuk seluruh proyek di folder ini. Misalnya, kami telah membuat tiga file sumber daya berikut: MyResource.en.resx, MyResource.en-US.resx, MyResource.zh-CN.res. Ada dua pasangan nilai kunci di setiap file sumber daya, nilai kuncinya adalah Negara Bagian dan Alamat. Panggil file sumber daya di halaman MyPage.aspx yang perlu menggunakan file sumber daya, seperti yang ditunjukkan di bawah ini:
Thread.CurrentThread.CurrentCulture= CultureInfo.CreateSpecificCulture("zh-CN");
Thread.CurrentThread.CurrentUICulture = Thread.CurrentThread.CurrentCulture;
ResourceManager rm = ResourceManager baru("WebTest.Resource.MyResource", typeof (MyPage).Assembly);
Label1.Teks = rm.GetString("Negara");
Label2.Text = rm.GetString("Address");
Nah, saat ini Label1 dan Label2 akan menampilkan "state" dan "address" sesuai ketentuan pada file MyResource.zh-CN.resx. Di atas adalah metode pelokalan yang paling dasar dan sederhana. Ada beberapa masalah yang tersembunyi di sini. Mari kita selesaikan dan optimalkan metode ini satu per satu.
1. Cara mendapatkan budaya default pengguna
adalah melalui pengaturan di opsi "Properti" -> "Bahasa" browser pengguna.
CultureInfo cultureInfo = CultureInfo.CreateSpecificCulture(Permintaan.UserLanguages[0]);
Thread.CurrentThread.CurrentCulture = info budaya;
Thread.CurrentThread.CurrentUICulture = cultureInfo;
Umumnya, CurrentCulture dan CurrentUICulture diatur untuk memiliki budaya yang sama. Tentu saja, keduanya juga bisa berbeda. Misalnya, Anda menentukan bahwa CurrentCulture adalah en-US dan CurrentUICulture adalah zh-CN. Efeknya adalah mata uang, tanggal, dan informasi lain pada halaman ditampilkan dalam format Bahasa Inggris Amerika, dan pengelola sumber daya akan memperoleh konten yang perlu diperoleh dari file sumber daya dari MyResource.zh-CN.resx mengajukan.
Jika halaman situs Anda tidak menyediakan fungsi bagi pengguna untuk memilih bahasa, maka halaman tersebut akan ditampilkan sesuai dengan budaya yang ditetapkan oleh browser pengguna secara default, sehingga Anda dapat meletakkan kode di atas dalam metode Application_BeginRequest di Global.asax. file cs. Dengan cara ini setiap kali pengguna membuat permintaan untuk suatu halaman, program kami akan mengatur budayanya terlebih dahulu.
2. Mengingat pengaturan lokal pengguna
Pengaturan atau pilihan lokal browser dapat diingat sepanjang sesi. Namun operasi ini tidak dapat dilakukan dalam metode Application_BeginRequest di file Global.asax.cs, karena sesi masih tidak tersedia pada saat itu. Jika situs Anda tidak menyediakan fungsi bagi pengguna untuk memilih bahasa, maka Anda tidak perlu mengingat pengaturan regional pengguna, cukup atur pada metode Application_BeginRequest di file Global.asax.cs seperti dijelaskan di atas pertunjukan. Hal ini terutama untuk menghindari konflik di mana pengguna tiba-tiba mengubah pengaturan bahasa di browser di tengah jalan, namun situs web tetap menampilkan konten halaman kepada pengguna sesuai dengan budaya yang tersimpan dalam sesi tersebut.
Jika Anda telah menyebutkan fungsi membiarkan pengguna memilih bahasa, maka jelas Anda perlu menggunakan sesi di halaman program untuk mencatat pilihan budaya pengguna. Karena setiap permintaan dari klien ke segmen server, segmen server akan membuka thread baru untuk diproses dan direspon. Jika program Anda tidak mengingat pilihan pelanggan, program hanya akan merespons dengan budaya default.
3. Bagaimana cara manajer sumber daya menemukan file sumber daya yang sesuai untuk budaya tertentu?
Saat melakukan operasi nilai, yaitu saat menjalankan metode GetString dari kelas ResourceManager, manajer sumber daya akan mencari file sumber daya yang sesuai sesuai dengan properti CurrentUICulture dari thread saat ini. Ada beberapa situasi:
(1). Misalnya, jika budaya yang sesuai dengan CurrentUICulture adalah en-US, periksa dulu apakah MyResource.en-US.resx ada. Jika ada, ambil nilainya, jika tidak ada, periksa apakah MyResource.en.resx ada.
(2). Misalnya, budaya yang sesuai dengan CurrentUICulture adalah en, karena en adalah budaya non-spesifik, maka pertama-tama cari tahu apakah file sumber daya MyResource.en-US.resx dari budaya spesifik en-US terkait dengannya. secara default ada. Jika ya, ambil nilainya darinya; jika tidak ada, periksa apakah MyResource.en.resx ada.
(3). Misalnya, jika budaya yang sesuai dengan CurrentUICulture adalah en-GB, cari dulu file sumber daya MyResource.en-GB.resx. Jika tidak ada, periksa apakah MyResource.en.resx ada itu ada, dapatkan nilainya dari itu; Jika tidak ada, periksa apakah file sumber daya MyResource.en-US.resx dari budaya spesifik default en-US yang terkait dengan en ada ada saat ini, tetapi MyResource.en-CA.resx ada, program akan tetap mengeluarkan pengecualian bahwa file sumber daya yang sesuai tidak dapat ditemukan.
Oleh karena itu, kita dapat meringkas bahwa ketika thread saat ini CurrentUICulture sesuai dengan budaya tertentu, manajer sumber daya terlebih dahulu mencari file sumber daya yang sesuai dengan budaya spesifik ini. Jika tidak ditemukan, ia akan mencari file sumber daya non-budaya itu belum Temukan, lalu cari file sumber daya budaya default yang terkait dengan asosiasi non-budaya spesifiknya. Ketika CurrentUICulture thread saat ini sesuai dengan budaya non-spesifik, manajer sumber daya terlebih dahulu memeriksa apakah file sumber daya khusus budaya default yang sesuai dengan budaya non-spesifik ada -budaya tertentu ada, dan memberikan pengecualian jika tidak ada juga.
4. Bagaimana menghadapi budaya yang tidak memberikan dukungan lokalisasi?
Jika situs tidak menyediakan file sumber daya yang sesuai untuk mendukung budaya default pengguna, maka CurrentUICulture dari thread saat ini harus dikonversi ke budaya default situs Anda, seperti en-US atau zh-CN. Ada dua peluang untuk konversi:
Salah satunya adalah ketika Anda mendapatkan Request.UserLanguages[0], bandingkan dengan preset budaya yang didukung di file konfigurasi. Jika dipastikan tidak didukung, segera atur CurrentUICulture sebagai budaya default.
Yang kedua adalah menggunakan struktur coba tangkap untuk menangkap pengecualian MissingManifestResourceException saat menggunakan metode GetString ResourceManager untuk mendapatkan nilai, pertama-tama atur CurrentUICulture ke budaya default, lalu gunakan GetString untuk mendapatkan nilai lagi.
5. Tetapkan budaya default situs dan uiCulture melalui Web.config
<globalisasi requestEncoding='utf-8' responEncoding='utf-8' uiCulture='zh-CN' culture='en-US'/>
Seperti yang ditunjukkan di atas: Ditentukan bahwa budaya default situs adalah en-US (harus merupakan budaya tertentu di sini), dan uiCulture adalah zh-CN.
Tentu saja, Anda juga dapat mengaturnya halaman demi halaman di tag Halaman setiap halaman: <@Page Culture="zh-CN" UICulture="en">. Terlepas dari bagaimana web.config diatur di sini, halaman akan ditampilkan sesuai dengan pengaturan tag Halaman.
tiga. Menerapkan lokalisasi sumber daya di Asp.net2.0
Asp.net2.0 menyediakan metode implementasi yang lebih beragam untuk lokalisasi sumber daya. Saya akan fokus di sini pada perbedaan dari Asp.net1.1.
1. Setting budaya default situs dan uiCulture melalui Web.config
sudah dibahas di Asp.net1.1 menggunakan file web.config untuk mengatur budaya situs, namun di Asp.net2.0 lebih fleksibel. Biasanya, Anda ingin semua halaman di situs Anda menyesuaikan dengan budaya yang sama. Cukup tetapkan nilai "otomatis" di seluruh situs ke atribut UICulture dan Culture (budaya) dari elemen globalisasi di web.config seperti yang ditunjukkan di bawah ini. Perhatikan bahwa nilai "otomatis" ini tidak digunakan di Asp.net1.1 yang diterima. <globalisasi uiCulture="auto" culture="auto" /> Arti dari auto adalah ASP.NET memperoleh pengaturan budaya pilihan pengguna dengan memeriksa header HTTP yang dikirim oleh browser, dan menggunakan budaya ini untuk mengatur budaya default dari situs. Yaitu, properti CurrentUICulture dan CurrentCulture dari thread saat ini.
Selain pengaturan otomatis, Anda juga dapat menentukan budaya default situs untuk Asp.net: <globalisasi uiCulture="auto:zh-CN" culture="auto:zh-CN" /> Catatan: Ini hanya mungkin jika ASP. .NET tidak dapat Menemukan header HTTP untuk menentukan budaya pilihan pengguna. Misalnya, jika tidak ada pengaturan budaya di "Properti" -> "Bahasa" browser dan benar-benar kosong, budaya default yang disetel setelah otomatis akan berlaku.
Setelah globalisasi dikonfigurasi di web.config, aplikasi Anda tidak perlu menulis kode apa pun. CurrentUICulture dan CurrentCulture dari thread akan mendapatkan pengaturan budaya sesuai dengan nilai atribut uiCulture dan culture yang ditetapkan dalam elemen globalisasi. Jika globalisasi tidak dikonfigurasi, CurrentUICulture dan CurrentCulture thread akan ditetapkan secara default ke en-US.
2. Gunakan file Web.config untuk melacak pilihan wilayah pengguna.
Di Asp.net1.1, situs-situs yang menyediakan pemilihan wilayah umumnya menggunakan sesi untuk mencatat pilihan pengguna sehingga setiap kali pengguna membuat permintaan ke situs tersebut, Semua konten tampilan dilokalkan sesuai dengan budaya yang dipilih oleh pengguna. Metode lain yang disediakan di Asp.net2.0 adalah dengan menggunakan file web.config untuk melacak pilihan budaya pengguna.
Anda dapat mendukung identifikasi anonim budaya pengguna dengan menambahkan properti profil berbasis string yang disebut LanguagePreference ke file web.config Anda. Harap perhatikan bahwa atribut yang diaktifkan dari elemen anonimIdentifikasi harus "benar", jika tidak, fungsi identifikasi anonim tidak akan tersedia.
<anonymousIdentification diaktifkan="benar"/>
<profil>
<properti>
<tambahkan nama="LanguagePreference" type="string" defaultValue="auto"allowAnonymous="true" />
</properti>
</profile>
Di bawah ini saya akan menjelaskan cara memprogram atribut LanguagePreference di Asp.net2.0. Pertama, Anda bisa menulis kelas PageBase, yang mewarisi dari System.Web.UI.Page dan berfungsi sebagai kelas dasar untuk semua kelas halaman di situs. Tujuannya sebenarnya sangat sederhana, yaitu mengekstrak beberapa proses pemrosesan umum di setiap halaman dan memasukkannya ke dalam kelas dasar untuk mengurangi duplikasi kode dan meningkatkan pemeliharaan. Kemudian tulis kode berikut di kelas PageBase: protected override void InitializeCulture()
{
base.InitializeCulture();
string LanguagePreference = ((ProfileCommon)ini.Konteks.Profile).LanguagePreference;
//Saat pengguna mengunjungi situs ini untuk pertama kalinya dan Profile.LanguagePreference kosong, identifikasi pengaturan bahasa browser pengguna
if(string.IsNullOrEmpty(Preferensi Bahasa))
{
if (ini.Konteks.Permintaan.Bahasa Pengguna!= null)
{
LanguagePreference = ini.Konteks.Permintaan.UserLanguages[0];
((ProfileCommon)Context.Profile).LanguagePreference = LanguagePreference;
}
}
kalau tidak
{
Thread.CurrentThread.CurrentUICulture = new CultureInfo(LanguagePreference);
Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(LanguagePreference);
}
}
Metode InitializeCulture dari kelas System.Web.UI.Page baru ditambahkan di Asp.net2.0. Metode ini menetapkan Budaya dan UICulture untuk thread saat ini. Siklus hidup halaman telah dirancang sedemikian rupa sehingga metode InitializeCulture berjalan sebelum Init dan Load halaman. Dalam kode di atas, pertama-tama gunakan ((ProfileCommon)this.Context.Profile).LanguagePreference; untuk mendapatkan nilai atribut profil LanguagePreference saat ini dan menentukan apakah atribut tersebut kosong, yaitu apakah pengaturan budaya telah disimpan untuk pengguna . Jika kosong, budaya pilihan pengguna diperoleh dari header Http dan disimpan melalui ((ProfileCommon)Context.Profile).LanguagePreference = LanguagePreference;. Jika tidak kosong berarti pengaturan budaya pengguna telah disimpan, kemudian gunakan budaya ini untuk mengatur properti CurrentUICulture dan CurrentCulture dari thread saat ini.
Jika <globalisasi uiCulture="auto" culture="auto" /> didefinisikan di Web.config, maka kode di atas dapat disederhanakan menjadi: protected override void InitializeCulture()
{
base.InitializeCulture();
string LanguagePreference = ((ProfileCommon)ini.Konteks.Profile).LanguagePreference;
if(!string.IsNullOrEmpty(LanguagePreference))
{
Thread.CurrentThread.CurrentUICulture = new CultureInfo(LanguagePreference);
Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(LanguagePreference);
}
kalau tidak
{
((ProfileCommon)Context.Profile).LanguagePreference = Thread.CurrentThread.CurrentCulture.Name;
}
}
Jika situs menyediakan fungsi yang memungkinkan pengguna memilih budaya, seperti menempatkan daftar pilihan bahasa di halaman master situs, maka pilihan budaya pengguna dapat diingat melalui pernyataan berikut:
dilindungi kekosongan lstLanguage_SelectedIndexChanged (pengirim objek, EventArgs e)
{
if (lstLanguage.SelectedValue != "Auto") //Opsi defaultnya adalah Otomatis
{
Profil.LanguagePreference = lstLanguage.SelectedValue;
}
kalau tidak
{
Profil.LanguagePreference = null;
}
Respon.Redirect(Request.Url.AbsolutePath);
}
Perhatikan baris kode Response.Redirect(Request.Url.AbsolutePath); karena kode penanganan event dijalankan setelah Page_Load, jika ingin halaman berubah dengan cepat, Anda harus melakukan operasi pengalihan.
Saat menggunakan file sumber daya untuk membuat file sumber daya global di situs
di Asp.net2.0
, VS.Net2005 akan secara otomatis membuat folder App_GlobalResources khusus untuk menyimpan file sumber daya global.Yang disebut file sumber daya global adalah file sumber daya yang digunakan oleh beberapa file halaman atau halaman master di situs. Misalkan kita membuat file bernama MyResource.resx dan MyResource.zh-cn.resx. Dalam program ini, kita dapat menggunakan kode berikut untuk mendapatkan nilai dalam file sumber daya: this.lblCountry.Text = Resources.MyResource.Country;
Dimana Negara adalah kunci dalam file sumber daya. Jelas ini jauh lebih mudah daripada mendapatkan nilai dari file sumber daya di Asp.net 1.1.
Ada dua masalah yang perlu diperhatikan di sini: Pertama, saat membuat grup file sumber daya dengan nama root yang sama, file tanpa identifikasi budaya harus dibuat, seperti MyResource.resx, yang lain seperti MyResource.en-gb. zh-cn.resx dibuat sesuai kebutuhan. Jika MyResource.resx tidak dibuat dan hanya MyResource.zh-cn.resx yang dibuat, MyResource tidak akan muncul di bawah namespace Resources pada kode di atas, sehingga kompilasi kode di atas tidak dapat lolos. MyResource.resx harus menyimpan konten bahasa default situs jika file sumber daya yang dilokalkan yang cocok dengan CurrentUICulture thread saat ini tidak dapat ditemukan atau nilai kunci yang sesuai tidak dapat ditemukan di file sumber daya yang dilokalkan. Asp.net didasarkan pada kunci dalam file MyResource.resx. Jika kunci Negara tidak ada di MyResource.resx, tetapi kunci Negara ada di MyResource.zh-cn.resx, maka kode di atas juga akan melaporkan kesalahan saat kompilasi. Kedua, Asp.net tidak akan melaporkan pengecualian apa pun ketika tidak dapat menemukan sumber daya yang dilokalkan di area terkait. Asp.net akan secara otomatis memperoleh nilai dari file MyResource.resx, namun tidak akan mengubah CurrentUICulture dari thread saat ini.
Saat membuat file sumber daya lokal di situs, VS.Net2005 akan secara otomatis membuat folder App_LocalResources khusus untuk menyimpan file sumber daya lokal. Yang disebut file sumber daya lokal adalah file sumber daya yang digunakan untuk satu file halaman di situs. Metode penamaannya umumnya Default.aspx.resx dan Default.aspx.zh-cn.resx. Sekarang saya menambahkan tiga kunci Bahasa, lblNavigation.Text dan lblNavigation.ForeColor di file sumber daya Default. Diantaranya, saya menetapkan warna biru untuk lblNavigation.ForeColor dari Default.aspx.resx dan merah untuk lblNavigation.ForeColor dari Default.aspx.zh-cn.resx. Ada dua cara untuk mendapatkan konten dari file sumber daya lokal di Default.aspx di file halaman:
(1).
(2).
Hati-hati menggunakan simbol $ saat menggunakan cara pertama. Menggunakan metode kedua lebih fleksibel dan memungkinkan Anda menetapkan nilai untuk banyak properti kontrol sekaligus.
Masih ada masalah yang perlu diperhatikan di sini: file sumber daya lokal default halaman harus dibuat, seperti Default.aspx.resx diperlukan, dan Default.aspx.zh-cn.resx diperlukan. Jika Anda tidak membuat file sumber daya lokal default, tetapi menggunakan file sumber daya lokal di halaman, saat menggunakan metode pertama untuk mengikat, kesalahan kompilasi akan terjadi; saat menggunakan metode kedua untuk mengikat, tidak ada kesalahan kompilasi yang akan terjadi terjadi kesalahan, namun pengaturan properti ini tidak berpengaruh, seolah-olah tidak ditulis.
4. Menampilkan gambar yang dilokalkan
Menampilkan gambar yang dilokalkan juga merupakan fitur baru Asp.net2.0. Di Asp.net2.0, file sumber daya tidak terbatas pada kombinasi pasangan kunci-nilai tipe string. Gunakan fitur ini untuk melokalisasi gambar. Faktanya, apa yang disebut gambar yang dilokalkan tidak lebih dari menempatkan gambar yang disiapkan untuk wilayah berbeda ke dalam file sumber daya lokal yang berbeda. Misalnya, masukkan LitwareSlogan.jpg di MyResource.resx, dan masukkan LitwareSlogan.cn.jpg di MyResource.zh-cn.resx.
Ketika file sumber daya global dari versi lokal yang berbeda berisi versi file gambar yang dilokalkan, Anda dapat mengkustomisasi file pengendali bernama MyLocalImage.ashx untuk memuatnya secara kondisional berdasarkan preferensi bahasa pengguna. Kodenya adalah sebagai berikut.
Metode pemanggilan di halaman:
<asp:Image ID="Image1" runat="server" ImageUrl="~/ MyLocalImage.ashx" />
Cara menulis handler MyLocalImage.ashx:
public class MyLocalImage: IHttpHandler
{
public void ProcessRequest (konteks HttpContext)
{
konteks.Respon.ContentType = "gambar/png";
string LanaguageReference = ((ProfileCommon)context.Profile).LanguagePreference;
if (!string.IsNullOrEmpty(LanaguageReference))
{
Thread.CurrentThread.CurrentUICulture = new CultureInfo(LanaguageReference);
}
Bitmap bm = Sumber Daya.Litware.LitwareSlogan;
Gambar MemoryStream = MemoryStream baru();
bm.Simpan(gambar,Format Gambar.Png);
konteks.Respon.BinaryWrite(image.GetBuffer());
}
}
Kelas pengendali khusus yang didefinisikan dalam MyLocalImage.ashx menggunakan logika serupa yang Anda lihat sebelumnya dalam metode InitializeCulture khusus untuk menginisialisasi pengaturan CurrentUICulture untuk thread saat ini sebelum mengambil file gambar dari file sumber daya global. Anda mungkin bertanya-tanya mengapa CurrentUICulture dari thread saat ini telah disetel di kelas dasar halaman dan perlu diatur ulang di sini. Itu karena thread di sini bukan thread yang sama dengan thread yang diproses di kelas dasar. Setelah pengendali kustom menginisialisasi pengaturan CurrentUICulture dengan benar, ia dapat mengakses file gambar melalui kelas sumber daya MyResource.resx yang diketik dengan kuat. Maka tinggal menulis bit file gambar ke aliran respons HTTP.