Frage

Ich habe angefangen, mit ihm meine einfachen Website ASP.NET MVC Konvertierung nur herum zu verwirren. Ich habe eine Funktion Schalter Sprache gibt, die im Grunde die Session [ „Sprache“] setzt auf eine andere Sprache und aktualisiert die Seite. Bitte korrigieren Sie mich, wenn dies besser gemacht werden könnte, aber ich habe zwei Controller für diese und die Einstellung der Sitzung dort gemacht. Das Problem ist, das Routing am Ende. Kann ich die Seite in irgendeiner Art und Weise ordentlich zu aktualisieren, oder kann ich die aktuelle Aktion und Umleitung es das? Oder ist dies ein Szenario für Ajax?

Dankbar für Beratung!

War es hilfreich?

Lösung

gibt es keinen Grund, warum Sie die Session-Variablen verwenden? Eine üblichere Lösung ist, den Sprachcode in der Route enthält, d.h. blah.com/en/info oder blah.com/jp/info (für Englisch und Japanisch)

Wenn Sie diese jede Seite auf der Website haben könnten Links zu jeder Sprache enthalten. wenn Sie eine öffentlich zugängliche Website schreiben, würde dies auch machen es einfacher für Google indizieren alle Ihre Inhalte.

In diesem Artikel wird erklärt, wie die Sprache, in der Domäne gehört, das heißt. en.blah.com oder jp.blah.com: http://blog.maartenballiauw.be/post/2009/05/20/ASPNET-MVC-Domain-Routing.aspx

AKTUALISIERT:. Hier ist eine einfach Beispiel einschließlich der Sprachcode in der URL-Route

Ändern Sie die Standardroute einen Sprachparameter umfassen:

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

Fügen Sie Link für jede Sprache zu Ihrer 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>    

Diese werden als Links machen zurück auf die Seite sind Sie auf -. Nur mit der Sprache geändert

Andere Tipps

Ansatz folgend funktioniert gut für mich:

Ich bin mit Cookies und meinen eigenen Motor für die Lokalisierung Alles was Sie brauchen einige Link auf der Seite setzen, die zu so etwas wie dieses umleitet:

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("/");
    }

}

}

Wenn Sie in diesem Motor interessiert sind, lassen Sie mich wissen.

Hier einfache Lösung, wie die Auswahl in URL anders zu ermöglichen.

gibt es einen Controller für das Sprachenmanagement

    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);
    }

}

Sie können es separat aufrufen

new LocalesController().Index("fa");
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top