امروزه سایت ها چند زبانه در اینترنت از اهمیت فراوانی برخوردادر هستند ، علاوه بر اینکه بازدیدکنندگان خود را وسعت داده اید کار موتور های جستجو را نیز برای جستجو راحت تر کرده اید .
در سایت های استاتیک (ایستا) ایجاد یک سایت چند زبانه بسیار مشکل بوده و کل سایتی که طراحی کرده اید را باید کپی کرده و آن را ترجمه نمایید ، علاوه براین برای تغییر هر قسمت زمان زیادی از شما گرفته خواهد شد .
خوشبختانه در Asp.NET امکانات بسیار جالبی برای ایجاد یک سایت چند زبانه در نظر گرفته شده است .
نکات زیر برای یک سایت چند زبانه نیاز است :

  • ظاهر سایت برای زبان های راست به چپ (RTL) و چپ به راست (LTR)
  • متن های ثابت سایت (مانند کلمات : تایید ، انصراف و....)
  • متن های داینامیک سایت که از بانک اطلاعات بازخوانی خواهد شد .
  • دکمه تغییر زبان

برای شروع کار یک پروژه به نام MultyLanguage ایجاد نمایید ، یک بانک اطلاعاتی نیز برای ذخیره محتوای سایت ایجاد نمایید .
یک پوشه به نام Theme ایجاد نموده و دو پوشه دیگر به نام های RTL و LTR نیز به این پوشه اضافه کنید ، داخل این پوشه ها تم های سایت شما قرار خواهد گرفت .
بنابراین بنده یک پوشه دیگر به نام Theme1 به هر یک از این پوشه ها اضافه کردم و داخل هر کدام یک فایل Css قرار دادم که چینش سایت را مشخص می نماید .
خوب حال به سراغ بخش دوم یعنی متن های ثابت سایت می روید ، این بخش را توسط GlobalResource ها انجام خواهیم داد .
برای اینکار وارد منوی WebSite و سپس Add Asp.NET Folder و سپس App_GlobalResources را انتخاب نمایید ، با انتخاب این گزینه یک پوشه با این نام به پروژه شما اضافه خواهد شد .
بر روی این پوشه کلیک راست نموده و گزینه Add New Item را انتخاب نمایید ، از لیست آیتم های موجود آیتم Resource File را انتخاب کرده (Resource.resx) و دکمه Add را بفشارید .
حال دوباره این عمل را تکرار کرده و سه فایل Resource دیگر با نام Resource.fa.resx و Resource.en.resx و Resource.ar.resx به ترتیب برای زبان های فارسی ،انگلیسی و عربی اضافه نمایید .
یکی از فایل اضافه شده (مثلا Resource.fa.resx) را باز نمایید این فایل دارای یک جدول با سه ستون Name و Value و Comment می باشد .

به عنوان مثال مقادیر زیر وارد این جدول نمایید :

و برای فایل Resource.en.resx نیز مقادیر زیر :

و به همین ترتیب برای فایل زبان عربی...


خوب حال به سراغ قسمت سوم یعنی بانک اطلاعاتی می رویم ، یک جدول به نام TBLContents به بانک اطلاعاتی خود به صورت زیر اضافه کنید .

و به عنوان مثال رکورد های زیر را اضافه نمایید :

خوب حال کمی کد نویسی می کنیم .
فایل Global.asax را به پروژه اضافه کنید ، فضا نام های زیر را اضافه نمایید :

<%@ Import Namespace="System.Globalization" %> <%@ Import Namespace="System.Threading" %> و در رویداد Application_BeginRequest به صورت زیر کد نویسی کنید :



protected void Application_BeginRequest(object sender, EventArgs e)

{

if (Request.Cookies["mylang"] == null)

{

HttpCookie mylang = new HttpCookie("mylang");

mylang.Value = "fa";

mylang.Expires = DateTime.Now.AddYears(1);

Response.Cookies.Add(mylang);



}



Thread.CurrentThread.CurrentUICulture = new CultureInfo(Request.Cookies["mylang"].Value);

Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(Request.Cookies["mylang"].Value);



}





کد های فوق کوکی mylang را چک می کند ، اگر این کوکی وجود نداشته باشد آنرا ایجاد کرده و مقدار پیشفرض fa را وارد آن می کند ، این بخش زبان پیشفرض سایت شما را تعیین می کند ، شما میتوانید آنرا به en یا ... تغییر دهید .
در خط ها بعد زبان پیشفرض سیستم تعیین می گردد ، این کدها GlobalResource مرتبط را بارگزاری می نماید .
کار ما با فایل Global.asax تمام است .
یک فایل به نام Hello.aspx به پروژه اضافه نمایید ، قبل از هر چیز لینک Css را اضافه نمایید :



[COLOR=#000000][FONT=Times New Roman][COLOR=#0c2342][FONT=Tahoma]
<head runat="server">



<link href="Theme/RTL/Theme1/StyleSheet.css" mce_href="Theme/RTL/Theme1/StyleSheet.css" rel="stylesheet" type="text/css" runat="server"

id="MyCss" />



</head>


[/FONT][/COLOR][/FONT][/COLOR]



ذقت نمایید که خاصیت runat را برابر server قرار داده و یک id (مثلا MyCss) برای آن تعیین نمایید .
در متد Page_Load کد زیر را وارد نمایید :


protected void Page_Load(object sender, EventArgs e)  

{

MyCss.Href = "Theme/" + GetGlobalResourceObject("resource", "SiteDir") + "/Theme1/StyleSheet.css";

}





متد GetGlobalResourceObject مقدار SiteDir را از GlobalResource جاری دریافت می کند ، بنابراین تم مربوط به RTL یا LTR لود خواهد شد .
البته شما میتوایند مقدار Theme1 را نیز از کوکی یا دیتابیس یا هرجای دیگر بخوانید ، که خارج از بحث این مقاله است .
حال به سراغ صفحه Hello.aspx می رویم ، یک Label برای نمایش پیام خوش آمدگویی به صفحه اضافه کنید ، طبق تصویر زیر وارد خاصیت Expressions شده و خاصیت Text آن را به فایل resource و گزینه Welcome بایند می کنیم :

و به همین ترتیب برای دکمه تایید .
حال میخواهیم با کلیک بر روی دکمه تایید اطلاعات زبان جاری از بانک اطلاعاتی دریافت و داخل صفحه نمایش داده شود :
در رویداد مربوط به کلیک شدن دکمه تایید ، کد های مربوط به دریافت اطلاعات از بانک را به صورت زیر می نویسم :


protected void btnSubmit_Click(object sender, EventArgs e)  

{

using (SqlConnection objCon = new SqlConnection(ConfigurationManager.ConnectionStrings["Con"].ConnectionString))

{

using (SqlCommand objCmd = new SqlCommand("select Contents From TBLContents Where Lang=@Lang", objCon))

{

objCmd.Parameters.AddWithValue("@Lang", Request.Cookies["mylang"].Value);



objCon.Open();



object objScaler = objCmd.ExecuteScalar();

if (objScaler != null)

LblContent.Text = objScaler.ToString();



objCon.Close();

}

}

}





در کد فوق اطلاعات از بانک اطلاعاتی با شرط بر روی زبان دریافت و در لیبل نمایش داده می شود .
تنها چیزی که باقی مانده دکمه های تغییر زبان است ، سه عدد LinkButton به صفحه اضافه کنید ، خاصیت CommandArgumant را برابر زبان مورد نظر قرار دهید (fa ، en ، ar) و رویداد Command هر سه را به یک ساب روتین متصل کنید (البته میتوانید به دلخواه خود این قسمت را کد نویسی کنید) :



protected void LnkLang_Command(object sender, CommandEventArgs e)

{



HttpCookie mylang = new HttpCookie("mylang");

mylang.Value = e.CommandArgument.ToString();

mylang.Expires = DateTime.Now.AddYears(1);

Response.Cookies.Add(mylang);



Response.Redirect("~/Hello.aspx");

}





کد فوق یک کوکی با همان نام ایجاد کرده و زبان جدید را جایگزین می نماید .

[برای نمایش لینک باید عضو شوید. ]