PDA

توجه ! این یک نسخه آرشیو شده میباشد و در این حالت شما عکسی را مشاهده نمیکنید برای مشاهده کامل متن و عکسها بر روی لینک مقابل کلیک کنید : چگونه می توان برنامه های asp.net بین المللی ایجاد کرد ؟



آبجی
15th February 2010, 12:47 AM
اینترنت در آغاز توسط انگلیسی زبانان بکار گرفته شد، اما با گسترش نفوذ اینترنت در جهان تعداد افراد غیر انگلیسی زبانی که از این رسانه استفاده می کنند افزایش یافته است و با توجه به جمعیت زیاد کشورهای آسیایی و اروپایی که کاربر اینترنت می باشند و می خواهند با هم کار کنند ، نیاز است که سایت هایی با زبان ها و فرهنگ های مختلف ایجاد کرد تا افراد غیر همزبان با ما نیز بتوانند از آن استفاده کنند . به هر حال انجام این عمل کار بسیار خوبی می باشد اما پیاده سازی آن مشکلاتی را برای برنامه نویسان وب سایت ایجاد می کند.
چهار چوب .NET شامل ویژگی های مختلفی برای کمک به ایجاد وب سایت های بین المللی می باشد . خیلی از این خصیصه ها بر روی همه نوع از برنامه ها اعم از Windows Form ها و یا ASP.NET قابل اجرا می باشند . اگرچه ASP.NET در ترجمه محتوا نمی تواند به شما کمکی کند اما می تواند در مدیریت محتوایی که یک بار ترجمه شده است به شما کمک کند . در این سری مقالات قصد داریم شما را با ویژگی هایی که برای ایجاد وب سایت های بین المللی در ASP.NET وجود دارد آشنا کنیم .
در این مقالات از یک وب سایت نمونه که امکان دسترسی به مقالات خبری را می دهد استفاده می شود . در این سایت بازدیدکنندگان می توانند زبان مورد نظر خود را از یک لیست کشویی انتخاب نمایند و مقالات مورد نظرشان را در صورت وجود در آن زبان مشاهده نمایند . در این وب سایت از ویژگی های محلی سازی .NET (.NET Localization) برای قرار دادن محتوای از قبل ترجمه شده با توجه به زبان انتخاب شده در جای خود و نمایش آن به کاربر استفاده می شود . برای این منظور در .NET مجموعه ای بسیار مفید برای کمک به شما فراهم شده است که زمان زیادی برای شما صرفه جویی می کند .زیرا جنبه های بسیار زیادی در محلی سازی وجود دارد که شما باید برای انجام یک پروژه موفق مد نظر داشته باشید
ملاحظاتی درباره زبان و فرهنگ
در هنگام ایجاد یک وب سایت مسایلی وجود دارد که در هر فرهنگ و زبانی بگونه ای متفاوت می باشند که باید به آنها توجه کرد .این مسایل شامل موارد زیر می باشند :


محتوای پایگاه داده . بخش اعظم اطلاعات شامل اخبار ، مقالات ، مشخصات محصولات و مانند آن اغلب در پایگاه داده ها قرار می گیرند . اگرچه خیلی از سایت ها این مطالب را در فایل های HTML نگه داری می کنند .
گرافیک . به واقع هر سایتی برای خود مشخصه های گرافیکی دارد که خیلی از بخش های آن با تغییر زبان تغییر نمی کنند . ولی مطمئناً هر عکسی که شامل متن باشد نیازمند بین المللی سازی می باشد و یا مممکن است تصویری شامل سمبل هایی باشد که در زبان های مختلف معانی متفاوتی داشته باشند .
منابع متنی . که شامل اعداد و مطالب ثابت سایت مثل جمله حق نشر ، صفحه خوش آمدگویی ورودی سایت و غیره می باشد . اکثر وب سایت ها این مطالب را در صفحات جداگانه اعم از HTML و یا aspx نگه داری می کنند .
تاریخ .در فرهنگ های مختلف تاریخ به شکل های متفاوتی نمایش داده می شود . برای مثال تاریخ ” اول دسامبر ۲۰۰۴ ” در انگلستان به فرم “۰۴/۱۲/۱ ” و در آمریکا به فرم “۰۴/۱/۱۲ ” نمایش داده می شود . بنابراین نمایش تاریخ به فرم صحیح برای کاربران با فرهنگ های مختلف بسیار مهم می باشد .
علاوه بر این چهار حوزه گفته شده ، مسایل دیگری نیز وجود دارد که باید آنها را نیز در کار در نظر گرفت .این مسایل شامل واحدهای پولی ، فرمت های محلی برای نوشتن اعداد ، مرتب سازی و بزرگی و کوچکی حروف در زبان هایی مختلف و واحدهای اندازه گیری می باشد .

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


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

نگاشت محتوا به کلاس ها
در وب سایت نمونه ای که در طی این مقالات ایجاد خواهیم کرد مقالات خبری را در چندین زبان مختلف ترجمه و نگه داری می کنیم و با توجه به زبان انتخاب شده توسط بازدید کننده نمایش داده می شود . در این سایت متن مقالات ، صفحات و تاریخ و تصاویر با توجه به فرهنگ آن زبان نمایش داده می شود .
همانگونه که مرسوم است سایت خبری ما نیز مقالاتش را در پایگاه داده ذخیره می کند زیرا در این روش ایجاد یک رابط مدیریتی برای ویرایشگران و روزنامه نگاران ساده می باشد . اولین گام در ایجاد این برنامه ساختن یک رابط کاربر برای نمایش شرح اخبار می باشد . مشکلی که در این کار نهفته است این است که کدام نسخه زبانی از مقاله باید نمایش داده شود. در اینجا نیازمندی های ساده این سایت گفته شده است :


در این سایت محتوای هر مقاله در چهار زبان مختلف ذخیره می گردد .
کاربران زبان مورد نظرشان را از بین زبان های : English-UK ، French-France ، Chinese-China و Japanese-Japan انتخاب می کنند .
زبان پیش فرض English-UK می باشد .
در این سایت مقالات خبری در صورت وجود با توجه به زبان انتخاب شده نمایش داده می شود .
هر مقاله شامل یک شناسه منحصر بفرد ، عنوان ، متن مقاله و تاریخ انتشار می باشد .
از آنجاییکه این فقط یک نمونه برای آشنایی با بین المللی سازی می باشد بنابراین هیچ واسطی برای فرستادن ، ویرایش و حذف مقالات وجود ندارد و داده های آزمایشی به صورت مستقیم در پایگاه داده SQL Server درج خواهد شد .

در این سایت کلاسی به نام Article وجود دارد که توسط آن نمونه ای از مقاله در یک زبان معین ارائه می شود . در ابتدای فایل این کلاس (Article.cs ) فضای نام های مورد نیاز زیر را قرار می دهیم .
using System.Data;
using System.Globalization;
فضای نام System.Data کلاس DataSet را فراهم می کند و فضای نام System.Globalization کلاس هایی را که برای محلی سازی اطلاعات از آنها استفاده می شود را فراهم می کند که مهمترین آنها کلاس CultureInfo می باشد ، این کلاس نماینگر یک فرهنگ می باشد و از آن برای مشخص کردن فرهنگی که برای نمایش محتوا باید بکار برده شود استفاده می شود .
کلاس Article یک سری اعضای خصوصی (private ) دارد که برای نگه داری شناسه ، عنوان ، متن مقاله و تاریخ انتشار و فرهنگ ( هر نمونه از Article بخشی از محتوا را در یک فرهنگ مشخص نمایش می دهد ) بکار رفته در آن استفاده می شوند .
private int articleID;
private string articleTitle = “”;
private string articleBody = “”;
private DateTime articlePublicationDate;
private CultureInfo articleCulture;
سپس تعدادی پروپرتی برای این فیلدهای خصوصی وجود دارد که محتوای این فیلدها را بر روی صفحه برای هر مقاله انتخاب شده نمایش می دهد :
public string Title
{
get { return articleTitle; }
}
public string Body
{
get { return articleBody; }
}
public DateTime PublicationDate
{
get { return articlePublicationDate; }
}
public CultureInfo Culture
{
get { return articleCulture; }
}
public int ArticleID
{
get { return articleID; }
}
حال در پایگاه داده SQL Server 2000 یک دید (view) به نام ArticleDetail ایجاد می کنیم که به مانند تصویر شماره یک می باشد .

http://www.irandevelopers.com/wp-content/uploads/2009/02/aaaa.jpg

تصویر شماره یک
هر ردیف از دیتاست این دید نمایانگر یک نسخه از یک مقاله در یک زبان مشخص می باشد و هر نسخه شامل شناسه مقاله ، تاریخ ، عنوان مفاله و رشته مشخص کننده فرهنگ می باشد .
توجه : اگرچه هم SQL Server 2000 و هم Access از استاندارد یونی کد پشتیبانی می کنند اما شما ممکن است که نیاز داشته باشید تا کامپیوترتان را برای نمایش کاراکترهای زبان های مختلف پیکربندی کنید ؛ برای این کار باید پشتیبانی از زبان های خارجی را در Windows نصب کرده باشید .
کلاس Article یک سازنده اورلود شده دارد که یک شناسه از نوع integer را برای مشخص کردن شناسه مقاله و یک شی از نوع System.Globalization.CultureInfo که نمایانگر فرهنگ بکار رفته در آن مقاله می باشد را می گیرد و یک شی از نوع Article بر می گرداند .
public Article(int articleID, CultureInfo culture)
{
}
حال پرس و جوی SQL زیر را در سازنده قرار می دهیم تا با استفاده از دو آرگومان سازنده ، ترجمه مرتبط با مقاله خواسته شده را بازیابی کند .
string Sql = “SELECT * FROM ArticleDetail WHERE ArticleID=” + articleID + ” AND LanguageID=’” + culture.Name + “‘”;
سازنده مقدار پرس و جوی SQL را به یک متد استاتیک کمکی به نام GetDataSet() می فرستد تا در آن سطرهای مرتبط برگردنده شوند .
using System;
using System.Data;
using System.Data.SqlClient;
using System.Web;
namespace Multilingual
{
public class Database
{
public static DataSet GetDataSet(string Sql)
{
DataSet DS = new DataSet();
string myPhysicalPath =
HttpContext.Current.Request.PhysicalApplicationPat h;
string connectionString =
“Server=optimism;Database=sqlservername;
UID=sqlserveraccountname;PWD=mypassword;”;
SqlConnection myConnection =
new SqlConnection(connectionString);
SqlDataAdapter myDataAdapter =
new SqlDataAdapter(Sql, myConnection);
DataSet myDataSet = new DataSet();
myDataAdapter.Fill(myDataSet);
return myDataSet;
}
}
}
بنابراین ، کلاس Article یک مقاله را بوسیله ایجاد یک عبارت SQL و فرستادن آن به متد GetDataSet() از شی DataBase بازیابی می کند .
DataSet dataSet = Database.GetDataSet(Sql);
در صورتیکه پرس و جو هیچ سطری از دید را برنگرداند پس اینچنین مقاله ای در آن فرهنگ خاص موجود نمی باشد ، در این صورت بلاک کد بعدی یک پرس و جوی جدید را برای جستجوی نسخه انگلیسی مقاله که همان نسخه پیش فرض می باشد را اجرا می کند .
if (dataSet.Tables[0].Rows.Count == 0)
{
Sql = “SELECT * FROM ArticleDetail WHERE ArticleID=” + articleID + ” AND
LanguageID=’” + “en-gb” + “‘”;
dataSet = Database.GetDataSet(Sql);
}
حال در صورتیکه پس از اجرای عبارت SQL دوم نیز هیچ مقاله ای با آن مشخصات پیدا نشد استثنای زیر اجرا می گردد .
if (dataSet.Tables[0].Rows.Count == 0)
{
Exception exception = new Exception(”Article not available”);
throw exception;
}
و در صورتیکه نتیجه ای برگردانده شود سازنده مقادیر اعضای خصوصی را در آنها قرار می دهد . که این اعضا شامل عنوان ، متن مقاله ، تاریخ انتشار و فرهنگ آن می باشد .
DataTable dt = dataSet.Tables[0];
articleTitle = dt.Rows[0]["Title"].ToString();
articleBody = dt.Rows[0]["Body"].ToString();
articlePublicationDate = DateTime.Parse
(dt.Rows[0]["PublicationDate"].ToString());
articleCulture = CultureInfo.
CreateSpecificCulture(dt.Rows[0]["LanguageID"].ToString());
}
در خط اخر سازنده متد CreateSpecificCulture() قرار دارد که برای ایجاد یک شی جدید CultureInfo مورد استفاده قرار می گیرد از این شی برای بیان فرهنگ مقاله استفاده می شود . متد CreateSpecificCulture() رشته ای که نام فرهنگ می باشد مانند “en-GB ” را می گیرد و شی CultureInfo را که دربرگیرنده اکثر مشخصات فرهنگی یک زبان می باشد را بر می گرداند .

آبجی
15th February 2010, 12:47 AM
نمایش محتوا با استفاده از کنترل سرور
در این برنامه برای نمایش مقالات بر روی صفحه از کنترل های سرور استفاده می شود .این کنترل سرور یک پروپرتی دارد که از آن برای نشان دادن شماره مقاله استفاده می شود . این کنترل به صورت خودکار فرهنگ صحیح را در هنگام نمایش مقاله انتخاب می کند . کلاس کنترل سرور با تعریف یک فیلد متغیر خصوصی برای نگه داری شماره شناسه مقاله و یک پروپرتی برای تغییرات مقدار آن شروع می شود .

using System.Globalization;
using System.Threading;

public class ArticleControl : System.Web.UI.Control
{
private int articleID;
public int ArticleID
{
get { return articleID; }
set { articleID = value; }
}
با استفاده از متد CreateChildControl() این کنترل سرور تگ های HTML صفحات را ایجاد می کنیم . ابتدا فرهنگی که قرار است صفحات با توجه به آن ایجاد شوند را با اجرای شی CurrentUICulture که از کلاس Thread در فضای نام System.Threading بدست می آید استخراج می شود .

protected override void CreateChildControls()
{
CultureInfo culture =
Thread.CurrentThread.CurrentUICulture;
متد CreateChildControl() سازنده کلاس Article را فراخوانی می کند و مقدار culture و شناسه مقاله را به آن می دهد و شی Article را برای نمایش بر روی صفحه ایجاد می کند .

Article myArticle = new Article(articleID, culture);
شی myArticle صفحه را با ایجاد یک سری شی LiteralControl رندر می کند .

LiteralControl literal;
literal = new LiteralControl(”<h1>” +
myArticle.Title + “</h1>”);
Controls.Add(literal);
literal = new LiteralControl(”<b><i>” +
myArticle.PublicationDate.ToLongDateString() +
“</i></b><br /><br />”);
Controls.Add(literal);
literal = new LiteralControl(myArticle.Body +
“<br />”);
Controls.Add(literal);
}
حال با استفاده از این کنترل سرور درج کردن مقاله در صفحه ساده می باشد ، برای مثال:

<%@ Page language=”c#” %>
<%@ Register TagPrefix=”NewsSite”
Namespace=”Multilingual.Controls”
Assembly=”Multilingual” %>
<html>
<body>
<NewsSite:ArticleControl runat=”Server”
id=”ArticleCtrl” ArticleID=”1″ />
</body>
</html>
با استفاده از طراحی سه لایه برای این سایت منطق برنامه (Program Logic) در اشیا عملیاتی(Business) نگه داری می شود و فایل های .aspx برای واسط و لی اوت در نظر گرفته می شود . رهنمود @Register در فرم وب مشخص می کند که .NET در کجا باید به دنبال کنترل بگردد . در این مورد رهنمود @Register مشخص می کند که کلاس مورد نظر در فضای نام Multilingual.Controls قرار دارد . شما تگ <NewsSite:ArticleControl> را به همراه پروپرتی ArticleID آن در صفحه درج می کنید و در صورتیکه مقاله ای با آن شناسه وجود نداشته باشد استثنایی رخ می دهد . تصویر زیر نتیجه کدهای بالا می باشد . و برای مشاهده مقالات در زبان های مختلف شما می بایست شناسه مقاله را در رشته پرس و جو تغییر دهید . فرهنگ نمایش صفحه از thread ی که کدهای صفحه در آن اجرا می شوند گرفته می شود . همچنین شما می توانید مقدار فرهنگ را در رهنمود @Page با استفاده از پروپرتی Culture تغییر دهید .
http://www.irandevelopers.com/wp-content/uploads/2009/02/aaaa1.jpg
تصویر مقاله نمایش داده شده
برای تغییر پروپرتی Culture در اینجا می باید ویژگی های Culture و UICulture را در خط اول تغییر دهید .

<%@ Page language=”c#” Culture=”fr-FR” UICulture=”fr-FR” %>
بعد از انجام این تغییر همان مقاله را این بار به زبان فرانسه مشاهده خواهید کرد . باید توجه داشته باشید که فقط عنوان و متن مقاله با تغییر زبان تغییر نکرده است ، بلکه فرمت نمایش تاریخ نیز با توجه به فرمت نمایش تاریخ در کشور فرانسه تغییر کرده است . در ادامه خواهید دید که چگونه به صورت پویا می توان تنظیمات فرهنگ را تغییر داد .
http://www.irandevelopers.com/wp-content/uploads/2009/02/bbbb.jpg
همان مقاله به زبان فرانسوی

پروپرتی UICulture آنچنان فرق زیادی با Culture ندارد و از Culture برای نمایش اطلاعات فرهنگی زبان مورد نظر استفاده می شود و از UICulture برای مشخص کردن چگونگی نمایش واسط کاربری استفاده می شود . توجه داشته باشید که در صورتیکه فرهنگ صفحه مشخص نباشد یک استثنا رخ می دهد و اگر شما کد فرهنگی را وارد کرده باشید که ترجمه ای به آن زبان برای آن مقاله وجود نداشته باشد آنگاه مقاله پیش فرض که به زبان انگلیسی می باشد نمایش داده خواهد شد .
تا اینجا شما فقط می توانید با استفاده از رهنمود @Page و ایجاد تغییرات به صورت دستی در آن ، مقاله ها را در فرهنگ های مورد نظر مشاهده نمایید . در ادامه درباره چگونگی ایجاد واسط کاربری که با استفاده از آن کاربر بتواند فرهنگ مورد نظر خود را انتخاب کند بحث خواهد شد .
روش ایجاد واسط کاربری برای انتخاب زبان
همان گونه که مشاهده کردید می توان با استفاده از رهنمود @Page فرهنگ نمایش صفحه را برای همه کاربران به یک شکل از پیش تعیین شده تنظیم کرد . اما در این برنامه نیاز است تا تنظیمات فرهنگی هر کاربر نگه داری شود . به این ترتیب که کاربر وقتیکه به سایت متصل شد زبان مورد نظر خود را انتخاب کند و نتیجه این انتخاب در جلسه(Session) مربوط به آن کاربر بر روی سرور ذخیره شود . بنابراین این سایت نیاز به یک لیست کشویی دارد که در آن نام زبان های مورد حمایت سایت لیست شده باشند و کاربر با انتخاب زبان مورد نظر خود ، نام این زبان در یک کوکی پایدار که شامل مقدار رشته فرهنگ می باشد ذخیره گردد و بدین گونه در بازدیدهای آینده کاربر صفحات درخواستیش را به همان زبانی که قبلاً انتخاب کرده مشاهده کند .
متد Application_BeginRequest() در فایل global.asax.cs از مقدار کوکی استفاده می کند و ASP.NET این متد را برای هر درخواست فراخوانی می کند . این متد مقدار کوکی را می خواند و مشخصه فرهنگی آن thread را به طور صحیح تنظیم می کند . کد صفحه نیز تنظیمات را برای نمایش مقاله در فرهنگ مناسبش انجام می دهد . ابتدا در صورتیکه کوکی شامل رشته فرهنگ بود آن رشته را مشخص می کنیم .

protected void Application_BeginRequest(Object sender, EventArgs e)
{
string culturePref;
if (Request.Cookies["CulturePref"] != null)
{
culturePref = Request.Cookies["CulturePref"].Value;
}
سپس یک بلاک try-catch با استفاده از مقدار کوکی ، فرهنگ آن thread را تنظیم می کند . اداره کردن خطا برنامه را در مقابل مقادیر غیر مجاز کوکی محافظت می کند .

try
{
Thread.CurrentThread.CurrentCulture =
CultureInfo.CreateSpecificCulture(culturePref);
}
catch
{
Thread.CurrentThread.CurrentCulture =
new CultureInfo(”en-GB”);
}
Thread.CurrentThread.CurrentUICulture =
Thread.CurrentThread.CurrentCulture;
}
خط آخر این متد مقدار CurrentUICulture را برابر مقدار CurrentCulture قرار می دهد . زیرا در این برنامه نیازی به متفاوت بودن این دو مقدار با هم نمی باشد .
در کنترل سرور بعدی یک واسط ایجاد می شود تا بازدید کنندگان با استفاده از آن زبانشان را انتخاب نمایند ( همچنین مقدار فرهنگ را در کوکی تنظیم نماید) . در این کنترل نام چهار زبان مورد حمایت در این سایت در یک لیست کشویی قرار می گیرد که این لیست در یک فرم قرار دارد که این فرم یک فرم سمت سرور نمی باشد ( در این فرم صفتrunat=”server” وجود ندارد .) زیرا در هر صفحه می خواهیم فقط از یک فرم سمت سرور استفاده نماییم . همه صفحات این وب سایت شامل یک انتخابگر زبان می باشند بنابراین از فرم استاندارد HTML استفاده می کنیم .به این ترتیب فرم داده ها را به یک صفحه به نام cultureChooser.aspx که متد Page_load() آن شامل کد زیر می باشد می فرستد .

CultureInfo culture =
CultureInfo.CreateSpecificCulture
(Request.QueryString["CultureChoice"].ToString());
HttpCookie cookie = new HttpCookie
(”CulturePref”, culture.Name);
cookie.Expires = DateTime.Now.AddYears(100);
Response.Cookies.Add(cookie);
string referrer = Request.UrlReferrer.ToString();
Response.Redirect(referrer);
هدف اصلی در استفاده از این کد در متد Page_load() این صفحه ذخیره کردن مقدار فرهنگ در یک کوکی می باشد . اما این کد کاربر را نیز به صفحه ای که از آن آمده است برمی گرداند که این کار برای کاربر شبیه یک نوسازی ساده صفحه می باشد که بعد از آن صفحه را به زبان انتخاب شده می بیند .
پس از افزودن کنترل سرور انتخاب فرهنگ و نوسازی صفحه یک لیست کشویی بر روی صفحه دیده می شود که می توان با استفاده از آن زبان مورد نظر را انتخاب کرد .

<NewsSite:CultureControl runat=”Server” id=”CultureCtrl”>
</NewsSite:CultureControl>

آبجی
15th February 2010, 12:48 AM
محلی سازی سایر منابع متنی
علاوه بر ذخیره مقالات در پایگاه داده، می بایست مقادیر ثابت سایت مثل پیام خوش آمد گویی و جمله حق نشر را نیز محلی سازی کرد . برای این کار از فایل های منبع (resx) استفاده می شود . شما می توانید این فایل های منبع را هم در Visual Studio .NET ایجاد کنید و هم فایل متنی آن را ایجاد کنید و سپس آن را تبدیل به فایل resx کنید . همچنین می توانید فایل های منبع را با استفاده از برنامه نویسی و استفاده از کلاس System.resources.ResourceWriter ایجاد نمایید .
در این مثال فایل منبع زبان انگلیسی Resources.resx می باشد .فایل های .resx فایل های منبع می باشند ، این فایل ها به فرم XML هستند و به راحتی می توان آنها را ویرایش کرد . از آنجاییکه این فایل ها به فرم قابل تشخیص برای انسان می باشند می توان مقادیر آنها را به طور مستقیم ترجمه کرد .این فایل ها می توانند شامل اشیا پشت سرهمی مانند اطلاعات متنی باشند . سایت نمونه ما شامل رشته های منبع برای پیام خوش آمدگویی ، جمله حق نشر و متنی که در بالای لیست کشویی نوشته می شود می باشد . در تصویر زیر شما می توانید این فلیل را ببینید .

http://www.irandevelopers.com/wp-content/uploads/2009/02/aaaa2.jpg
فایل Resources.resx

این فایل شامل فیلد های مقدار (value) ، توضیح (comment) و نام (name) می باشد که از فیلد comment برای توضیح مختصری درباره هدف این مقدار استفاده می شود .کد با استفاده از مقدار فیلد name رشته مورد نظر را از این فایل دریافت می کند .
در Visual Studio .NET فایل منبع زبان پیش فرض در داخل اسمبلی اصلی نگه داری می شود . حال برای ایجاد یک فایل منبع برای زبان فرانسه می بایست یک فایل منبع به نام Resources.fr.resx ایجاد کرد . نامگذاری این فایل به همین صورت گفته شده مهم می باشد زیرا Visual Studio .NET از این نام برای نگه داری ارتباط منطقی بین فایل ها و فرستادن این اطلاعات برای کامپایلر استفاده می کند . در این مورد از “ fr “ برای مشخص کردن اینکه این فایل نسخه فرانسوی فایل Resources.resx می باشد استفاده می شود .نسخه فرنسوی فایل منبع فقط شامل دو رشته می باشد که در ادامه خواهیم دید که چگونه برنامه رشته مفقود را اداره می کند .
شما می توانید روند ایجاد فایل منبع را برای زبان های مختلف تکرار نمایید . در صورتیکه اکنون پروژه را بسازید و شاخه bin سایت را مشاهده کنید چیزهای جالبی می بینید .
فایل منبع اولیه که انگلیسی می باشد (resources.resx) در اسمبلی اصلی قرار دارد . Visual Studio .NET سه زبان دیگری که این سایت از آنها حمایت می کند و ما برای آنها فایل منبع ساخته ایم را همراه با اسمبلی خودشان ایجاد می کند . و هر کدام را در پوشه های جداگانه قرار می دهد و از مشخصه فرهنگی آنها برای نامگذاری آنها استفاده می کند . به شکل زیر توجه کنید .

http://www.irandevelopers.com/wp-content/uploads/2009/02/bbbb1.jpg
تصویر ساختار پوشه bin ایجاد شده برای پروژه


بعد از کامپایل منابع ، شما می توانید از طریق کدنویسی به این منابع دسترسی داشته باشید و رشته مناسب را برای فرهنگ مورد استفاده انتخاب کنید . برای انجام این کار یک کنترل سرور دیگر به نام SiteTextControl ایجاد می کنیم که می توان آن را در هر کجا از صفحه که می خواهیم محلی سازی انجام دهیم اضافه کرد ؛ این کنترل سرور یک پروپرتی عمومی برای قرار دادن نام رشته ای مانند “Copyright” که می خواهیم به آن دسترسی داشته باشیم دارد .

public string Name
{
get { return textName; }
set { textName = value; }
}
متد CreateChildControl() که برای ایجاد تصویر گرافیکی کنترل مورد استفاده قرار می گیرد در این مورد فقط متن منبع مربوطه را بدون هیچ تگHTML ی می نویسد . برای بازیابی متن می بایست یک نمونه از کلاس System.Resources.ResourceManager را ایجاد کرد تا از طریق آن به فایل های منبع دسترسی پیدا کنیم . برای مقدار دهی این شی باید نام فایل منبعی که می خواهیم از آن استفاده کنیم را به همراه ارجاعی به اسمبلی در حال اجرا به آن بدهیم تا بداند که در کجا باید به دنبال رشته های منبع بگردد .

ResourceManager res = new ResourceManager
(”Multilingual.Resources”,
Assembly.GetExecutingAssembly());

برای بدست آوردن مقدار رشته منبع باید متد GetString() را صدا زده و پارامتر textName را که بوسیله پروپرتی Name کنترل سرور آن را ست کرده ایم به این متد بدهیم .

string text = res.GetString(textName);

در نهایت یک کنترل literal باری نگهداری رشته منبع و افزودن آن به ساختار کنترل صفحه ایجاد می کنیم .

LiteralControl literal = new LiteralControl(text);
Controls.Add(literal);
توجه داشته باشید که لازم نیست فرهنگ را در کد مدیریت کرد . چهارچوب .NET این کار را برای شما انجام می دهد . زیرا فرهنگ thread قبلاً در Application_BeginRequest() تنظیم شده است . برای مثال برای افزودن جمله حق نشر به صفحه مقاله ، کنترل SiteTextControl را به صفحه اضافه کنید و نام منبع مورد نظر را برای نمایش مقاله با استفاده از پروپرتی Name مشخص کنید .

<NewsSite:SiteTextControl runat=”Server”
id=”CopyrightMessage” Name=”Copyright” />
پس از افزودن کنترل و نوسازی صفحه مقاله جمله حق نشر ظاهر خواهد شد . در صورتیکه شما فرهنگ را با استفاده از لیست کشویی تغییر دهید ، کنترل جمله حق نشر را با توجه به زبان انتخاب شده نمایش می دهد .
در این مقاله شما با نحوه استفاده از ویژگی های اصلی محلی سازی در چهارچوب .NET که شامل شی CultureInfo و فایل های منبع می باشد آشنا شدید . شما همچنین روش تغییر تنظیمات فرهنگ را در سطح صفحه مشاهده کردید و با روش درج کردن محتوای محلی در صفحه چه با استفاده از پایگاه داده و چه با استفاده از فایل منبع آشنا شدید .

استفاده از تمامی مطالب سایت تنها با ذکر منبع آن به نام سایت علمی نخبگان جوان و ذکر آدرس سایت مجاز است

استفاده از نام و برند نخبگان جوان به هر نحو توسط سایر سایت ها ممنوع بوده و پیگرد قانونی دارد