Có rất nhiều cách để làm ứng dụng website đa ngôn ngữ, từ đơn giản đến phức tạp.

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.

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: Khong nhin thay lien ket, Hay [Dang nhap] hoac [ Dang ky] de nhin thay lien ket .

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ụcApp_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:

PHP Code:

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_GlobalResourc es"));
ci = Thread.CurrentThread.CurrentCulture;

LoadString(ci);
}
else
{
rm = new ResourceManager("Resources.SiteMap", System.Reflection.Assembly.Load("App_GlobalResourc es"));
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:

PHP Code:
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:

PHP Code:
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);
}
lblHeader1, lblHeader2, Hyperlink... là những điều khiển chúng ta cần thay đổi khi ta chọn buttom ngôn ngữ nào, sau khi các bạn viết xong thì phải Build Website, sau đó nhấn F5 để test thử.