Home Web design ASP.NET Code website đa ngôn ngữ (Multi Language) trong ASP.NET C#

Code website đa ngôn ngữ (Multi Language) trong ASP.NET C#

10 min read
0
0
66
Multi Language ASP.NET

Chào các bạn, mình xin chia sẻ cách để tạo một trang web đa ngôn ngữ (Multi Language) trong ASP.NET sử dụng ngôn ngữ lập trình C# và tài nguyên App_GlobalResources.

Bước 1: Tạo một Project Website ASP.NET

Bước 2: Thêm thư mục App_GlobalResources vào Project của bạn.

Bạn cần thêm App_GlobalResources vào thư mục gốc của Project, có thể xem hình mình minh họa sau:

Thêm thư mục App_GlobalResources

Nhấp chuột phải vào Project > Chọn Add > Add ASP.NET Folder > App_GlobalResources

Bước 3: Tạo file resource ngôn ngữ .resx

Ở đây mình tạo 2 file EnglishVietnamese, nếu các bạn cần nhiều ngôn ngữ, có thể tạo nhiều hơn.

Tạo file ngôn ngữ

Nhấp chuột phải vào App_GlobalResources > Chọn Add > Resources File > Đặt tên cho file

Các bạn có thể đặt tên file theo mẫu: name.language-culture.resx

  • name: là tên Project của bạn (cái này bạn thích đặt tên gì cũng được, sau gọi cho đúng là ok)
  • language-culture: loại ngôn ngữ
    • English: để mặc định là language luôn > name.language.resx
    • Vietnamese: language.vi-vn > name.language.vi-vn.resx
    • Các ngôn ngữ khác: (tương tự)

Bước 4: Định nghĩa giá trị NameValue trong file ngôn ngữ

File name.languase.resx
File name.languase.resx
File name.languase.vi-vn.resx
File name.languase.vi-vn.resx

Các bạn mở 2 file đã tạo ở bước 3 và định nghĩa giá trị như 2 hình trên

Bước 5: Tạo một class BasePage

Code như sau:

using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Threading;
using System.Web;

namespace Filter.Class
{
    public class BasePage : System.Web.UI.Page
    {
        protected override void InitializeCulture()
        {
            if(!string.IsNullOrEmpty(Request["lang"]))
            {
                Session["lang"] = Request["lang"];
            }
            string lang = Convert.ToString(Session["lang"]);
            string culture = string.Empty;
            if(lang.ToLower().CompareTo("vi") == 0 ||string.IsNullOrEmpty(culture))
            { 
                culture = "vi-VN";
            }
            if (lang.ToLower().CompareTo("en") == 0 || string.IsNullOrEmpty(culture))
            {
               culture = "en-US";
            }
            if(lang.ToLower().CompareTo("vi") == 0)
            {
                culture = "vi-VN";
            }
            Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(culture);
            Thread.CurrentThread.CurrentUICulture = new CultureInfo(culture);
            base.InitializeCulture();
        }
    }
}

Bước 6: Tạo một trang Default.aspx và thay đổi kế thừa sang class BasePage

VD về kế thừa:

Trước: public partial class Default : System.Web.UI.Page
Sau: public partial class Default : BasePage

Code Design:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="ASPNetMultiLanguage.Default" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title>Multi Language</title>
</head>
<body>
    <form id="form1" runat="server">
        <div>
            <a href="?lang=en" runat="server" id="linkEnglishLang">
                <asp:Literal ID="Literal1" runat="server" Text="<%$Resources:name.language, langEnglish%>" />
            </a>
            <a href="?lang=vi" runat="server" id="linkVietnameseLang">
                <asp:Literal ID="Literal2" runat="server" Text="<%$Resources:name.language, langVietnamese%>" />
            </a>
        </div>
        <div>
            <ul>
                <li><a href="#"><asp:Literal ID="Literal3" runat="server" Text="<%$Resources:name.language, mnuHome%>" /></a></li>
                <li><a href="#"><asp:Literal ID="Literal4" runat="server" Text="<%$Resources:name.language, mnuIntroduction%>" /></a></li>
                 <li><a href="#"><asp:Literal ID="Literal5" runat="server" Text="<%$Resources:name.language, mnuProduct%>" /></a<li><a href="#"><asp:Literal ID="Literal6" runat="server" Text="<%$Resources:name.language, mnuContactUs%>" /></a></li>
            </ul>
        </div>
    </form>
</body>
</html>

Thiết kế trang hiển thị với 2 đường link chuyển đổi ngôn ngữ và một số menu mẫu lấy dữ liệu từ file resources (các bạn nên sử dụng thẻ <asp:Literal> để lấy dữ liệu từ file resources)

Code Behind:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace ASPNetMultiLanguage
{
    public partial class Default : BasePage
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if(!string.IsNullOrEmpty(Convert.ToString(Session["lang"])))
            {
                if(Convert.ToString(Session["lang"]) == "en")
                {
                    linkVietnameseLang.Visible = true;
                    linkEnglishLang.Visible = false;
                }
                else
                {
                    linkEnglishLang.Visible = true;
                    linkVietnameseLang.Visible = false;
                }
            }
            else
            {
                linkVietnameseLang.Visible = false;
                linkEnglishLang.Visible = true;
            }
        }
    }
}

Code Behind có chức năng kiểm tra Session và chuyển đổi ngôn ngữ theo Session cho phù hợp.

Lời kết

Sau khi các bạn đã thực chính xác theo thứ tự các bước như trên, bạn sẽ có được một trang demo với 2 ngôn ngữ Anh và Việt, url chuyển đổi là “?lang=en” và “?lang=vi”, sử dụng Session rất đơn giản. Khi đã nắm rõ hoạt động, các bạn có thể mở rộng ra với nhiều ngôn ngữ hơn.

Chúc các bạn thành công! Multi Language Multi Language Multi Language

View demo   Download source

Load More Related Articles
Load More By Dong
Load More In ASP.NET