Làm Website đa ngôn ngữ với .NET

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. Dưới đây là giao diện của ứng dụng:
 

MultiLanguage Website

MultiLanguages Website

 

 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 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.

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ế.