Question

J'ai commencé à convertir mon site Web simple à ASP.NET MVC, juste pour mess avec elle. J'ai une fonction de changement de langue là-bas qui définit essentiellement la session [ « langue »] à une autre langue et actualise la page. S'il vous plaît me corriger si cela pourrait se faire mieux, mais je l'ai fait deux contrôleurs pour cela et mettre la session là-dedans. Le problème est le routage à la fin. Pourrais-je rafraîchir la page d'une manière nette, ou puis-je obtenir l'action en cours et réacheminer à cela? Ou est-ce plus un scénario pour l'Ajax?

Thankful des conseils!

Était-ce utile?

La solution

est-il une raison pour laquelle vous utilisez la variable de session? une solution plus courante consiste à inclure le code de langue dans la voie, à savoir blah.com/en/info ou blah.com/jp/info (pour l'anglais et japonais)

si vous avez fait chaque page sur le site pourrait contenir des liens vers chaque langue. si vous écrivez un site accessible au public ce serait également plus facile pour Google d'indexer tous vos contenus.

Cet article explique comment inclure la langue dans le domaine, par exemple. en.blah.com ou jp.blah.com: http://blog.maartenballiauw.be/post/2009/05/20/ASPNET-MVC-Domain-Routing.aspx

MISE À JOUR:. Voici un simple, par exemple d'inclure le code de langue dans la route URL

Changer la route par défaut pour inclure un paramètre de langue:

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

Ajouter des liens pour chaque langue à votre 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>    

Ceux-ci rendent comme des liens vers la page que vous êtes sur -. Que la langue a changé

Autres conseils

Après approche fonctionne bien pour moi:

J'utilise les cookies et mon propre moteur pour la localisation Tout ce que vous devez mettre un lien sur la page qui va rediriger vers quelque chose comme ceci:

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

}

}

Si vous êtes intéressé par ce moteur, laissez-moi savoir.

solution simple Voici comment activer la sélection différente dans l'URL.

il y a un contrôleur pour la gestion des langues

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

}

vous pouvez appeler séparément

new LocalesController().Index("fa");
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top