Tạo ứng dụng đa ngôn ngữ với công nghệ .NET
Đây là một hướng dẫn đơn giản nhưng hữu ích để tạo ra một trang web đa ngôn ngữ với công nghệ ASP.NET. Sau khi hoàn thành thứ tự các bước bên dưới, bạn sẽ có thể để tạo ra một trang web với giao diện người dùng đa ngôn ngữ.
Bốn bước chính để tạo mộ ứng dụng đa ngôn ngữ
- Tạo điều khiển người dùng của chúng tôi chứa các biểu tượng điều khiển hiển thị ngôn ngữ hoặc DropDownList để thay đổi ngôn ngữ đang hiển thị.
- Tạo một lớp mới thừa kế từ lớp System.Web.Page và viết lại các phương thức OnPreInit(EventArgs e) and InitializeCulture().
- Tạo trang .aspx
- Phát sinh Local Resources cho trang này
1. Tạo điều khiển đa ngôn ngữ
Chúng ta cần phải tạo ra một điều khiển người dùng bao gồm 2 nút chứa hình ảnh, mỗi nút sẽ chứa hình ảnh đại diện cho ngôn ngữ của nó. Khi người dùng kích vào một nút bất kỳ, ngôn ngữ trên trang web sẽ được thay đổi đúng như bạn đã chọn. Điều đó cũng đúng khi trong trang web của bạn có chứa master page hoặc user control.
Thiết kế
// 2 Image Buttons (En-US,fr-FR)
< asp:ImageButton runat="server" ID="ImgBut_En" ImageUrl="~/Images/USALogo.png"><br / >
< asp:ImageButton runat="server" ID="ImgBut_Fr" ImageUrl="~/Images/FRLogo.png">
Mã lệnh
protected void Page_Load(object sender, EventArgs e)
{
HttpCookie cookie = Request.Cookies["CurrentLanguage"];
if (!IsPostBack && cookie != null && cookie.Value != null)
{
if (cookie.Value.IndexOf("en-") >= 0)
{
ImgBut_En.Enabled = false;
ImgBut_Fr.Enabled = true;
}
else
{
ImgBut_En.Enabled = true;
ImgBut_Fr.Enabled = false;
}
}
}
protected void ImgBut_En_Click(object sender, ImageClickEventArgs e)
{
HttpCookie cookie = new HttpCookie("CurrentLanguage");
cookie.Value = "en-US";
Response.SetCookie(cookie);
Response.Redirect(Request.RawUrl);
}
protected void ImgBut_Fr_Click(object sender, ImageClickEventArgs e)
{
HttpCookie cookie = new HttpCookie("CurrentLanguage");
cookie.Value = "fr-FR";
Response.SetCookie(cookie);
Response.Redirect(Request.RawUrl);
}
2. lớp BasePage
Chúng ta cần phải tạo ra một lớp kế thừa tất cả các chức năng của lớp System.Web.Page, và ghi đè lên một số phương thức như OnPreInit ( EventArgs e) và InitializeCulture ( ) .
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Globalization;
Public class BasePage : Page
{
protected override void InitializeCulture()
{
string lang = string.Empty;
HttpCookie cookie = Request.Cookies["CurrentLanguage"];
if (cookie != null && cookie.Value != null)
{
lang = cookie.Value;
CultureInfo Cul = CultureInfo.CreateSpecificCulture(lang);
System.Threading.Thread.CurrentThread.CurrentUICulture = Cul;
System.Threading.Thread.CurrentThread.CurrentCulture = Cul;
}
else
{
if (string.IsNullOrEmpty(lang)) lang = "en-US";
CultureInfo Cul = CultureInfo.CreateSpecificCulture(lang);
System.Threading.Thread.CurrentThread.CurrentUICulture = eg;
System.Threading.Thread.CurrentThread.CurrentCulture = eg;
HttpCookie cookie_new = new HttpCookie("CurrentLanguage");
cookie_new.Value = lang;
Response.SetCookie(cookie_new);
}
base.InitializeCulture();
}
}
Tại sao chúng ta ghi đè lên các phương thức này?
Câu trả lời là: Khi một trang bất kỳ nào được nạp chạy thì việc đầu tiên nó làm là gọi lớp System.Web.Page và khởi tạo ngôn ngữ hiển thị, cũng như các hiệu tiền tệ, định dạng số, và định dạng ngày...mà ta hay gọi chung là văn hóa (culture)
Vì vậy, khi chúng ta ghi đè lên lớp System.Web.Page cũng đồng nghĩa với việc chúng ta thay đổi văn hóa cho lớp này và cho tất cả các trang thừa kế nó.
3. Tạo trang .aspx
Hãy tạo một trang .aspx đơn giản với 2 label, textbox, Validators và một nút Submit
<%@ Page Language="C#" Theme="Default" AutoEventWireup="true"
CodeFile="LanguagePage.aspx.cs" Inherits="LanguagePage" %>
<%@ Register Src="~/UserControl/LanguageUserControl.ascx" TagName="LanguageUserControl"
TagPrefix="uc1" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div id="Header">
< uc1:LanguageUserControl runat="server" ID="Language">
<h2>
< asp:Label runat="server" ID="lbl_Language">
</h2>
</div>
<div id="Content">
<div class="Row">
<div class="label">
< asp:Label runat="server" ID="lbl_FirstName">< /asp:Label>
</div>
<div class="text">
< asp:TextBox runat="server" ID="txt_FirstName">< /asp:TextBox>
</div>
</div>
<div class="Row">
<div class="label">
< asp:Label runat="server" ID="lbl_LastName">< /asp:Label>
</div>
<div class="text">
< asp:TextBox runat="server" ID="txt_LastName">< /asp:TextBox>
</div>
</div>
< asp:Button runat="server" ID="Submit" OnClientClick="CheckLanguage();return false;">
</div>
</form>
<script>
function get_cookie(cookie_name) {
var results = document.cookie.match('(^|;) ?' + cookie_name + '=([^;]*)(;|$)');
if (results)
return (unescape(results[2]));
else
return null;
}
function CheckLanguage() {
if(get_cookie('CurrentLanguage') == "en-US")
alert('Language : US-English');
else
alert('Language : French-Francais');
}
</script>
</body>
</html>
4. Phát sinh Local Resources
Đây là bước cuối cùng, ngay bây giờ chúng ta phải tạo ra nguồn dữ liệu cho các ngôn ngữ khác nhau .
- Mở trang .aspx ở tab Design
- Sử dụng Tools->Generate Local Resource, và lưu trang.aspx lại
- Bạn sẽ thấy thư mục App_LocalResourses được tạo ra.trong thư mục này sẽ chứa file có phẩn mở rộng .resx
- Hãy chép các file này thành các file ngôn ngữ khác tương ứng ví dụ Page.aspx.vi-VN.resx
- Mở file mới này và thay đổi dữ liệu bằng ngôn ngữ tương ứng
» Tin mới nhất:
» Các tin khác: