Trong bài trước, mình đã giới thiệu cho các bạn một bài về Dynamic Theme. Bây giờ mình sẽ dựa trên mã nguồn lần trước đã làm để xây dựng website đa ngôn ngữ. Có rất nhiều cách để làm ứng dụng website đã ngôn ngữ, từ đơn giản đến phức tạp. Mình sẽ giới thiệu cách làm thật đơn giản để cho mọi người cùng tham khảo. Dưới đây là giao diện của ứng dụng:


Trong Dot Net FrameWork, có 2 đối tượng giúp ta làm việc này:
- ResourceManager (System.Resources.ResourceManager)
- CultureInfo (System.Globalization.CultureInfo)
Ứng dụng này mình sẽ chỉ làm 2 Ngôn ngữ, đó là tiếng việt và tiếng anh. Vì vậy, đầu tiên chúng ta sẽ tạo ra 2 lớp có đuôi .resx. Đó chính là Resource File. Một lớp chúng ta sẽ đặt tên là SiteMap.resx và lớp kia có tên là SiteMap.en-US.resx. Các bạn hãy để ý tên của 2 file trên nhé. Ở đây, File SiteMap.resx sẽ là file nguồn mặc định. Các giá trị nhập vào sẽ như sau:

Bạn chỉ cần quan tâm đến 2 cột: Name và Value. Còn dưới đây là file SiteMap.en-US.resx:

2 File có cùng tên, nhưng về giá trị thì 1 file mặc định sẽ là tiếng việt, còn file kia sẽ có giá trị là tiếng anh. Các bạn có thể tham khảo thêm về CultureInfo ở địa chỉ sau: http://msdn2.microsoft.com/en-us/library/system.globalization.cultureinfo.aspx .
Quay trở lại với ứng dụng, sau khi tạo ra 2 lớp trên, chú ý là phải đặt chúng ở trong thư mục App_GlobalResources nhé.
Chúng ta phải sử dụng 3 thư viện sau:
- System.Globalization
- System.Threading
- System.Resources
Trong Trang Page_Load ta chỉ cần viết lệnh sau:
ResourceManager rm;
CultureInfo ci;
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
Thread.CurrentThread.CurrentCulture = new CultureInfo("vi-VN");
rm = new ResourceManager("Resources.SiteMap", System.Reflection.Assembly.Load("App_GlobalResources"));
ci = Thread.CurrentThread.CurrentCulture;
LoadString(ci);
}
else
{
rm = new ResourceManager("Resources.SiteMap", System.Reflection.Assembly.Load("App_GlobalResources"));
ci = Thread.CurrentThread.CurrentCulture;
LoadString(ci);
}
}
Hàm LoadString ở đây có mục đích để thay đổi các giá trị của đối tượng:
public void LoadString(CultureInfo ci)
{
lblHeader1.Text = rm.GetString("Header1", ci);
lblHeader2.Text = rm.GetString("Header2", ci);
lblLang.Text = rm.GetString("Lang",ci);
lnkHome.Text = rm.GetString("Home", ci);
lnkAbout.Text = rm.GetString("About", ci);
lnkLink.Text = rm.GetString("Link", ci);
HyperLink1.Text = rm.GetString("Home", ci); ;
HyperLink2.Text = rm.GetString("About", ci);
HyperLink3.Text = rm.GetString("Link", ci);
Login1.LoginButtonText = rm.GetString("LoginButtonText",ci);
Login1.TitleText = rm.GetString("LoginTitle",ci);
Login1.UserNameLabelText = rm.GetString("LoginUser",ci);
Login1.PasswordLabelText = rm.GetString("LoginPass",ci);
Login1.RememberMeText = rm.GetString("LoginRemember",ci);
}
Ứng dụng đã cơ bản hoàn thành. Chỉ còn viết sự kiện cho các button để thay đổi ngôn ngữ là xong:
protected void ibtEnglish_Click(object sender, ImageClickEventArgs e)
{
Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US");
LoadString(Thread.CurrentThread.CurrentCulture);
}
protected void ibtVietNamese_Click(object sender, ImageClickEventArgs e)
{
Thread.CurrentThread.CurrentCulture = new CultureInfo("vi-VN");
LoadString(Thread.CurrentThread.CurrentCulture);
}
Trên đây chỉ là ứng dụng rất cơ bản và đơn giản với mục đích để giới thiệu là chính. Hy vọng các bạn sẽ nghiên cứu chuyên sâu hơn để có thể áp dụng vào thực tế. Các bạn có thể download mã nguồn tại đây.
Nguồn: ngocdv - zensoft
3Cdotcom “Dịch vụ hosting tốt nhất cho dữ liệu" www.hosting.net.vn