ASP.NET MVC changement de langue, la façon de le mettre en œuvre?

j'ai commencé à convertir mon site Web simple en ASP.NET MVC, juste pour déconner avec ça. J'ai une fonction switch language qui règle la Session["language"] dans une autre langue et rafraîchit la page. Corrigez-moi s'il vous plaît si cela peut être fait mieux, mais j'ai fait deux contrôleurs pour ceci et la mise en place de la session là-bas. Le problème est le routage à la fin. Puis-je rafraîchir la page d'une manière ordonnée, ou Puis-je obtenir l'Action actuelle et la rediriger vers cela? Ou est-ce plus un scénario pour Ajax?

Merci pour le Conseil!

21
demandé sur miccet 2009-05-30 00:45:34

3 réponses

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

si vous avez fait ceci chaque page sur le site pourrait contenir des liens vers chaque langue. si vous rédigez un site accessible au public, il sera également plus facile pour google d'indexer tout votre contenu.

cet article explique comment inclure la langue dans le domaine, c'est à dire. 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 exemple de y compris le code de la langue dans l'URL de l'itinéraire.

modifier 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 page principale:

<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>    

ces liens vous ramèneront à la page où vous êtes - seulement avec la langue changée.

19
répondu russau 2009-05-31 00:31:01

L'approche suivante fonctionne bien pour moi:

j'utilise des cookies et mon propre moteur pour la localisation Tout ce que vous devez mettre un lien sur la page qui redirigera 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, faites-le moi savoir.

7
répondu omoto 2012-08-03 18:33:34

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

1
répondu Jakub Šturc 2017-05-23 12:02:27