Subscribe Now

Trending News

Bài viết

ASP.NET, Lập trình

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

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

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 English và Vietnamese, 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
    • Vietnameselanguage.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ị Name và Value 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.

Download Source: http://www.mediafire.com/file/tbc92nacno649jj/ASPNetMultiLanguage.zip/file

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

Bài viết liên quan

Theo dõi
Thông báo của
guest

1 Bình luận
Mới nhất
Cũ nhất Được bỏ phiếu nhiều nhất
Phản hồi nội tuyến
Xem tất cả bình luận
d123
d123
3 năm trước

ấy gù