Pergunta

Eu comecei a converter meu site simples de ASP.NET MVC, só para mexer com ele. Eu tenho um recurso de linguagem interruptor lá que basicamente define o Session [ "linguagem"] para outra língua e refresca a página. Por favor, corrija-me se isso poderia ser feito melhor, mas eu fiz dois controladores para este e definindo a sessão lá. O problema é o roteamento no final. Eu poderia atualizar a página de alguma forma pura, ou posso obter o e re route-corrente Ação para isso? Ou isso é mais um cenário para Ajax?

Thankful para o conselho!

Foi útil?

Solução

há qualquer razão para que você está usando a variável de sessão? uma solução mais comum é incluir o código do idioma na rota, ou seja blah.com/en/info ou blah.com/jp/info (para Inglês e Japonês)

Se você fez isso todas as páginas do site pode conter links para cada idioma. se você estiver escrevendo um site acessível ao público, isso também tornaria mais fácil para o Google indexar todo o seu conteúdo.

este artigo explica como incluir o idioma no domínio, ou seja. en.blah.com ou jp.blah.com: http://blog.maartenballiauw.be/post/2009/05/20/ASPNET-MVC-Domain-Routing.aspx

ATUALIZADO:. Aqui está um simples exemplo de incluindo o código de linguagem na rota de URL

Alterar a rota padrão para incluir um parâmetro language:

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

Adicionar links para cada idioma ao seu 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>    

Estes serão renderizados como links para a página em que está -. Apenas com a linguagem mudou

Outras dicas

Na sequência boa abordagem funciona para mim:

Eu estou usando cookies e meu próprio motor para localização Tudo que você precisa colocar algum link na página que irá redirecionar para algo como isto:

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

}

}

Se você está interessado neste motor, deixe-me saber.

Aqui é solução simples como habilitar a seleção diferente na URL.

existe um controlador para a gestão idioma

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

}

Você pode chamá-lo separadamente

new LocalesController().Index("fa");
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top