Đang tải dữ liệu...
ParkOur Việt

 Bản tin | Bài viết | Thư viện | Diễn đàn | Giới thiệu | Liên hệ | Tìm kiếm 
Trưng cầu ý kiến
Khi xây dựng ứng dụng trên .NET, bạn thích và hay thường sử dụng ngôn ngữ lập trình nào?
 
Tìm kiếm
Tìm kiếm nâng cao
Thống kê
Số người truy cập: 4.306.853
Số người trực tuyến: 96
Trang chủ .NET Việt Nam  >  Bài viết  >  Theo ngôn ngữ  >  ASP.NET / ASP.NET 2.0

MultiLanguages Website

Dương Nguyễn
.NET Việt Nam
   
12:29' AM - Thứ năm, 17/04/2008
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.

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:

MultiLanguage Website

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:

MultiLanguages Website

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);
}

Số lượt đọc:  702  -  Cập nhật lần cuối:  17/04/2008 12:29:28 AM
Bài mới:  
Xem mã của 1 trang aspnet
06/06/2008 07:03' PM
Giới thiệu ASP.NET
06/06/2008 07:01' PM
Mô hình MVC
01/06/2008 09:45' PM
Bài đã đăng:
 Trang chủ | Giới thiệu | Liên hệ BQT | Tìm kiếm