Pregunta

He comenzado la conversión de mi sitio web sencillo a ASP.NET MVC, sólo para perder el tiempo con él. Tengo una característica del lenguaje interruptor de encendido allí que, básicamente, establece el [ "lenguaje"] Sesión a otro idioma y actualiza la página. Por favor, corríjanme si esto se podría hacer mejor, pero he hecho dos controladores para este y el establecimiento de la sesión en ese país. El problema es el encaminamiento al final. Pude actualizar la página de alguna manera ordenada, o puedo conseguir la acción actual y re-ruta a eso? ¿O se trata más de un escenario para el Ajax?

Agradecido por consejo!

¿Fue útil?

Solución

¿Hay alguna razón por la que está utilizando la variable de sesión? una solución más común es incluir el código de idioma en la ruta, es decir blah.com/en/info o blah.com/jp/info (para Inglés y japonés)

Si lo ha hecho cada página en el sitio podría contener enlaces a cada idioma. si usted está escribiendo un sitio de acceso público esto también haría más fácil para Google para indexar todo su contenido.

Este artículo explica cómo incluir el idioma en el dominio, es decir. en.blah.com o jp.blah.com: http://blog.maartenballiauw.be/post/2009/05/20/ASPNET-MVC-Domain-Routing.aspx

ACTUALIZADO:. Aquí hay un sencilla ejemplo de incluir el código de idioma en la ruta URL

Cambiar la ruta por defecto para incluir un parámetro de idioma:

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

Añadir enlaces para cada idioma a su 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>    

Estos se hacen como enlaces de vuelta a la página que está en -. Sólo con el lenguaje cambia

Otros consejos

Tras enfoque funciona bien para mí:

Estoy utilizando cookies y mi propio motor para la localización Todo lo que tienen que poner un poco de enlace en la página que va a redirigir a algo como esto:

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 está interesado en este motor, que me haga saber.

Aquí es una solución simple cómo habilitar la selección diferente en la URL.

hay un controlador para la gestión de idiomas

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

}

se le puede llamar por separado

new LocalesController().Index("fa");
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top