itsurge
چهارشنبه 03 اردیبهشت 1393, 12:24 عصر
سلام توی این اموزش می خوام بهتون یاد بدم چطور یک سایت رو چند زبانه کنید
من براتون کد پروژه رو می گذارم و روی کدهای نوشته شده توضیح میدم فکر کنم اینجوری بهتر باشه
به علت محدودیت حجم من این رو روی سایت دیگه آپلود کردم
لینک دانلود (http://www.uplooder.net/cgi-bin/dl.cgi?key=42e135b3c2b0d3f32723961664f3e2e2)
خوب برای شروع کار شما ابتدا یک پروژه mvc درست می کنید سپس فولدر App_GlobalResources رو به پروزه خود اضافه می کنید و بعد از آن یک Resource که Resource اصلی ما خواهد بود
حال ما یک کنترل به نام BaseController میسازیم که تنظیمات اصلی پروژه برای چند زبانی داخل آن قرار می گیرد و باید کلیه کنترل های دیگه ما از این کلاس ارث بری کنند
ما در این کنترل override متفاوتی داریم دانستن و ندانستن کدهای این کنترل اهمیت خاصی ندارد بجز این خط کد
// Force a valid culture in the URL
RouteData.Values["culture"] = cultureName.ToLowerInvariant(); // lower case too
که برای نمایش کد مخفف زبانی که دارید با هش کار می کنید در ادرس های سایتتون مثلا http://localhost:1662/en/home
خوب حالا ما یک فولدر معمولی به نام helper به پروژه اضافه می کنیم و کلاس Helper رو بهش اضافه می کنیم ما از این کلاس برای تغییر زبان و مدیریت زبان های سایت استفاده می کنیم
// Valid cultures
private static readonly List<string> _validCultures = new List<string> { "en-US", "fa", "fa-IR", "en" };
// Include ONLY cultures you are implementing
private static readonly List<string> _cultures = new List<string> {
"en", // first culture is the DEFAULT
"fa", // Iran NEUTRAL culture
"ar" // Arabic NEUTRAL culture
};
که برای معرفی زبان های سایت و کدهای مخفف مربوط استفاده می کنیم
ار این تابع
public static bool IsRighToLeft()
{
return System.Threading.Thread.CurrentThread.CurrentCultu re.TextInfo.IsRightToLeft;
}
برای تشخیص راست چین و چپ چین بودن سایت استفاده می کنیم این تابع بیشتر در مواقع فراخوانی css های متفاوت برای زبان های راست چین استفاده می شود
و توابع دیگه هم که کاملا مشخص هست چه کار می کند
سپس کنترل خود را اضافه میکنیم توجه کنید که کلیه کنترل هامون باید از کنترل BaseController ارث بری کن مثلا public class HomeController : BaseController
و در تمامی کنترل های خود باید تابع زیر رو داشته باشیم
public ActionResult SetCulture(string id)
{
string culture = id;
// Validate input
culture = CultureHelper.GetImplementedCulture(culture);
RouteData.Values["culture"] = culture; // set culture
return RedirectToAction("Index");
}
و اما حال نوبت ادرس دهی سایت مون هست یا همون RouteConfig که باید تغییر کند در صورتی که دوست داشته باشید کد مخفف زبان در url نشان داده شود
public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Default",
url: "{culture}/{controller}/{action}/{id}",
defaults: new {culture="fa", controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}
}
که توسط culture="fa" می تونیم بگید زبان ابتدایی سایتمون چی باشد من اینجا فارسی گذاشتم
و در پایان برای کلیه متن های سایت خود ابتدا در Resource و سپس در Resource زبان های دیگه می گذاریم و برای نمایش در view های خوب از این تک استفاده می کنیم
@Resources.Resource.Hi
خوب حال ما اگه بخواهیم به سایت خود مثلا زبان فارسی رو اضافه کنیم و یا هر زبان دیگه ای این مراحل رو پیش میریم
1-ابتدا Resource مربوط به اون زبان مثلا برای فارسی اسم Resource میشه Resource.fa
2-افزودن این زبان به کلاس Helper مثلا فارسی که به private static readonly List<string> _validCultures و private static readonly List<string> _cultures
من براتون کد پروژه رو می گذارم و روی کدهای نوشته شده توضیح میدم فکر کنم اینجوری بهتر باشه
به علت محدودیت حجم من این رو روی سایت دیگه آپلود کردم
لینک دانلود (http://www.uplooder.net/cgi-bin/dl.cgi?key=42e135b3c2b0d3f32723961664f3e2e2)
خوب برای شروع کار شما ابتدا یک پروژه mvc درست می کنید سپس فولدر App_GlobalResources رو به پروزه خود اضافه می کنید و بعد از آن یک Resource که Resource اصلی ما خواهد بود
حال ما یک کنترل به نام BaseController میسازیم که تنظیمات اصلی پروژه برای چند زبانی داخل آن قرار می گیرد و باید کلیه کنترل های دیگه ما از این کلاس ارث بری کنند
ما در این کنترل override متفاوتی داریم دانستن و ندانستن کدهای این کنترل اهمیت خاصی ندارد بجز این خط کد
// Force a valid culture in the URL
RouteData.Values["culture"] = cultureName.ToLowerInvariant(); // lower case too
که برای نمایش کد مخفف زبانی که دارید با هش کار می کنید در ادرس های سایتتون مثلا http://localhost:1662/en/home
خوب حالا ما یک فولدر معمولی به نام helper به پروژه اضافه می کنیم و کلاس Helper رو بهش اضافه می کنیم ما از این کلاس برای تغییر زبان و مدیریت زبان های سایت استفاده می کنیم
// Valid cultures
private static readonly List<string> _validCultures = new List<string> { "en-US", "fa", "fa-IR", "en" };
// Include ONLY cultures you are implementing
private static readonly List<string> _cultures = new List<string> {
"en", // first culture is the DEFAULT
"fa", // Iran NEUTRAL culture
"ar" // Arabic NEUTRAL culture
};
که برای معرفی زبان های سایت و کدهای مخفف مربوط استفاده می کنیم
ار این تابع
public static bool IsRighToLeft()
{
return System.Threading.Thread.CurrentThread.CurrentCultu re.TextInfo.IsRightToLeft;
}
برای تشخیص راست چین و چپ چین بودن سایت استفاده می کنیم این تابع بیشتر در مواقع فراخوانی css های متفاوت برای زبان های راست چین استفاده می شود
و توابع دیگه هم که کاملا مشخص هست چه کار می کند
سپس کنترل خود را اضافه میکنیم توجه کنید که کلیه کنترل هامون باید از کنترل BaseController ارث بری کن مثلا public class HomeController : BaseController
و در تمامی کنترل های خود باید تابع زیر رو داشته باشیم
public ActionResult SetCulture(string id)
{
string culture = id;
// Validate input
culture = CultureHelper.GetImplementedCulture(culture);
RouteData.Values["culture"] = culture; // set culture
return RedirectToAction("Index");
}
و اما حال نوبت ادرس دهی سایت مون هست یا همون RouteConfig که باید تغییر کند در صورتی که دوست داشته باشید کد مخفف زبان در url نشان داده شود
public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Default",
url: "{culture}/{controller}/{action}/{id}",
defaults: new {culture="fa", controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}
}
که توسط culture="fa" می تونیم بگید زبان ابتدایی سایتمون چی باشد من اینجا فارسی گذاشتم
و در پایان برای کلیه متن های سایت خود ابتدا در Resource و سپس در Resource زبان های دیگه می گذاریم و برای نمایش در view های خوب از این تک استفاده می کنیم
@Resources.Resource.Hi
خوب حال ما اگه بخواهیم به سایت خود مثلا زبان فارسی رو اضافه کنیم و یا هر زبان دیگه ای این مراحل رو پیش میریم
1-ابتدا Resource مربوط به اون زبان مثلا برای فارسی اسم Resource میشه Resource.fa
2-افزودن این زبان به کلاس Helper مثلا فارسی که به private static readonly List<string> _validCultures و private static readonly List<string> _cultures