HOW 2 LEARN ASP.NET
نویسنده : delshad
تاریخ  : ۱۳۸۷/۱۲/۲۹
امتیاز :
بازدید : 4039
موضوع : ساخت سایت چند زبانه توسط GlobalResource
توضیحات : در این مقال نحوه ایجاد سایت های چندزبانه در Asp.NET توسط GlobalResource ها و Database به طور کامل توضیح داده شده است
     

امروزه سایت ها چند زبانه در اینترنت از اهمیت فراوانی برخوردادر هستند ، علاوه بر اینکه بازدیدکنندگان خود را وسعت داده اید کار موتور های جستجو را نیز برای جستجو راحت تر کرده اید .

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

خوشبختانه در 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 را اضافه نمایید :

<head runat="server">
   
    <link href="Theme/RTL/Theme1/StyleSheet.css" rel="stylesheet" type="text/css" runat="server"
        id="MyCss" />

</head>

 

ذقت نمایید که خاصیت 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");
    }


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

 

کار تمام است سایت چند زبانه شما حاضر است.

 میتوانید فایل پروژه را از اینجا دانلود نمایید .


 

 

 
امتیاز بدهید :

نویسنده : سیمین MANA_MBC@yahoo.com ۱۳۸۹ هفدهم مرداد
ایشاله خیر ببینی.. دست مریزاد سایتت عالی توضیحاتت بیست خسته نباشی
نویسنده : رضا aa@bb.com ۱۳۸۹ دوازدهم مرداد
سلام آقا دستت درد نكنه اين مقاله شما با اين تاپيتك كه درباره masterpage توي http://forum.how2learnasp.net/ShowTopic.aspx?Code=784 توضيح داديد خيلي كمك كرد خدا خيرتون بده :)
نویسنده : spvatan spvatan2007@yahoo.com ۱۳۸۹ نهم مرداد
با تشکر از مقالتون ، بعد از مدتی برخی از کاربران سایت من فقط قادرند سایت فارسی یا سایت انگلیسی را ببینند و لینک دیگری برای آنها کار نمیکند. امکان دارد بفرمایید علت این موضوع چیست؟
نویسنده : ali sa_sial@yahoo.com ۱۳۸۹ چهارم مرداد
ok!!! but
نویسنده : mahsa mahsa_jooje_talaee@yahoo.com ۱۳۸۹ بيست و ششم تير
متشكرم
نویسنده : مهدی no@spam.com ۱۳۸۹ هفدهم فروردين
نمی دونم چطوری تشکر کنم ... من داشتم برای مالتی لنگویج کردن پورتال هام یک کارهای وحشت ناکی انجام می دادم اتفاقی این مقاله رو دیدم ... از صمیم قلب براتون موفقیت روز افزون رو خواستارم ... a a.karimi.k@gmail.com : شما می تونین از ایده ریسورس فایل های داده شده در این مقاله به اضافه تکنیک URL Rewriting استفاده کنید خیلی بهتر توی یک تابع می تونید کالچر و ریسورس مربوطه رو فراخونی کنید
نویسنده : amin amin137122@yahoo.com ۱۳۸۸ بيست و سوم اسفند
نحوه ایجاد سایت
نویسنده : adeleh adeleh6323@yahoo.com ۱۳۸۸ بيست اسفند
خيلي عالي بود ممنون
نویسنده : nf fjfjf@f.m ۱۳۸۸ دوازدهم اسفند
fjfjfjfj
نویسنده : امید dimo_dobrob@yahoo.com ۱۳۸۸ سي دي
آقا بسیار عالی بود ممنون از آموزشتون. موفق باشید
نویسنده : a a.karimi.k@gmail.com ۱۳۸۸ نوزدهم دي
خیلی خوبه ولی یک مشکل وجود داره. تصور کنید یک کاربر در یک صفحه خواص دکمه تغییر زبان را می زند و Url آن صفحه را برای دوست می فرستد. دوستش زبان پیشفرض را خواهد دید در صورتی که منظور شخص فرستنده صفحه ای با زبان دیگر بوده است. به همین خاطر شاید بهتر باشد این مورد در QueryString هم پیاده شود.
نویسنده : mosi mowsleh@hotmail.com ۱۳۸۸ اول مهر
بسیار عالی ولی من اس کیو ال نداشتم و یک دیتا بیس با اکسس 2007 ساختم با همان مشخصات و در وب کانفیگ هم دیتا سورس رو تغییر دادم و هم در دکمه تایید اشیا و متغیر ها و نیم اسپیس ها را به OLEDB تغییر دادم ولی درست نشد ولی بهر حال دست درد نکنه خیلی عالی بود
نویسنده : ۱۳۸۸ شانزدهم تير
عالی بود
نویسنده : امین ملکوتی admin@amin-malakuti-project.ir ۱۳۸۸ بيست و يکم ارديبهشت
سلام خدمت علی اقا خوبم . خیلی عالی بود . به نظر من بهترین بود . واقعا سایت اموزشی خوبی دارید. امیدوارم همیشه موفق و شاد باشید .
نویسنده : mab mab_designer1@yahoo.com ۱۳۸۷ بيست و نهم اسفند
خیلی مفید بود...دستت طلا
نویسنده : سید محسن طباطبایی تبار mohsen.tba@gmail.com ۱۳۸۷ بيست و نهم اسفند
یک دنیا ممنون، عالی بود

 
نظر بدهید :
لطفا سوالات فنی خود را در تالار گفتگو www.forum.how2learnasp.net مطرح نمایید
نام :  
ایمیل :    
نظرات :
 
Xml rss feed

 

Valid CSS! Atom rss feed
Ali Delshad Official Site