ورود

View Full Version : آموزش: چند زبانه کردن سایت ها



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

itsurge
چهارشنبه 03 اردیبهشت 1393, 12:31 عصر
در ضمن برای سویچ بین زبان های مختلف کافی است کد مخفف اون زبان رو فراخونی کنی در ادرست مثلا فارسی میشه http://localhost:1662/fa/home (http://localhost:1662/en/home) و انگلیسی میشه http://localhost:1662/en/home

bitcob589
چهارشنبه 03 اردیبهشت 1393, 17:26 عصر
در ضمن برای سویچ بین زبان های مختلف کافی است کد مخفف اون زبان رو فراخونی کنی در ادرست مثلا فارسی میشه http://localhost:1662/fa/home (http://localhost:1662/en/home) و انگلیسی میشه http://localhost:1662/en/home
چگونه فراخوانی کنیم:متفکر:

itsurge
چهارشنبه 03 اردیبهشت 1393, 18:32 عصر
بعد از انجام این کار سایت شما چند زبانه خواهد بود و نیاز به فراخوانی نیست ولی اگه بخواهید بین چند زبان انتقال پیدا کنید لازم است اون کنترلی که می خواهید فراخونی کنید قبلش کد مخفف زبانش رو بزنید یعنی اگه کنترل home و متد index رو می خواهید فراخونی کنید فراخونی شما برای نمایش اون view در زبان فارسی میشه http://localhost:1662/fa/home (http://localhost:1662/en/home)/index وبرای زبان انگلیسی میشه http://localhost:1662/en/home/index