سؤال

لقد بدأت تحويل موقعي البسيط الخاص بي إلى ASP.NET MVC، فقط للبحث عنها. لدي ميزة لغة التبديل موجودة في الأساس تعيين الجلسة ["اللغة"] إلى لغة أخرى وتحديث الصفحة. يرجى تصحيح لي إذا كان يمكن القيام بذلك بشكل أفضل، لكنني جعلت وحدتي تحكم لهذه ووضع الجلسة هناك. المشكلة هي التوجيه في النهاية. هل يمكنني تحديث الصفحة بطريقة أنيقة، أم هل يمكنني الحصول على الإجراء الحالي وإعادة توجيهها إلى ذلك؟ أو هل هذا أكثر سيناريو لأجاكس؟

شاكرين للحصول على المشورة!

هل كانت مفيدة؟

المحلول

هل هناك أي سبب لماذا تستخدم متغير الجلسة؟ الحل الأكثر شيوعا هو تضمين رمز اللغة في الطريق، أي blah.com/en/info أو blah.com/jp/info (للغة الإنجليزية واليابانية)

إذا قمت بذلك، فقد تحتوي كل صفحة على الموقع على روابط لكل لغة. إذا كنت تكتب موقعا متاحا فيه علنا، فسيحقق ذلك أيضا من الأسهل في فهرسة Google على فهرسة كل المحتوى الخاص بك.

تشرح هذه المقالة كيفية تضمين اللغة في المجال، أي. en.blah.com أو jp.blah.com: http://blog.maartenballiauw.be/post/2009/05/20/aspnet-mvc-domain-routing.aspx.

تحديث: إليك بسيط مثال على تضمين رمز اللغة في طريق URL.

تغيير المسار الافتراضي لتضمين معلمة اللغة:

routes.MapRoute(
"Default", 
"{language}/{controller}/{action}/{id}", 
new { language = "en", controller = "Home", action = "Index", id = "" }
);

أضف روابط لكل لغة إلى MasterPage:

<li><%= Html.ActionLink(
    "Spanish", 
    ViewContext.RouteData.Values["action"].ToString(), 
    new { language = "es" })%></li>
<li><%= Html.ActionLink(
    "French", 
    ViewContext.RouteData.Values["action"].ToString(), 
    new { language = "fr" })%></li>
<li><%= Html.ActionLink(
    "English", 
    ViewContext.RouteData.Values["action"].ToString(), 
    new { language = "en" })%></li>    

ستجعل هذه كتروابط مرة أخرى إلى الصفحة التي تقوم بها - فقط مع تغير اللغة.

نصائح أخرى

النهج التالي يعمل بشكل جيد بالنسبة لي:

أنا أستخدم ملفات تعريف الارتباط ومحرك خاصي للتوطين كل ما تحتاجه لوضع بعض الرابط على الصفحة التي ستعيد توجيه إلى شيء مثل هذا:

public class LanguageController : Controller
{
    //
    // GET: /Language/

    public void Change(string id)
    {
        var cuka = new HttpCookie("lang", id + "");
        cuka.Expires = DateTime.Now.AddYears(10);
        System.Web.HttpContext.Current.Response.Cookies.Add(cuka);

        if (Request.UrlReferrer.IsNotNull())
            Response.Redirect(Request.UrlReferrer.AbsoluteUri);
        else
            Response.Redirect("/");
    }

}

}

إذا كنت مهتما بهذا المحرك، فأخبرني بذلك.

هنا حل بسيط كيفية تمكين اختيار مختلفة في عنوان URL.

هناك وحدة تحكم لإدارة اللغة

    public class LocalesController : Controller
{

    public ActionResult Index(string lang = "en_US")
    {
        Response.Cookies["CacheLang"].Value = lang;

        if (Request.UrlReferrer != null)
            Response.Redirect(Request.UrlReferrer.ToString());

        var message = Localization.Get("changedlng");

        return Content(message);
    }

}

يمكنك أن تسميها بشكل منفصل

new LocalesController().Index("fa");
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top