Domanda

Ho cominciato a convertire il mio sito web semplice da ASP.NET MVC, solo per pasticciare con essa. Ho un caratteristica del linguaggio interruttore sul lì che stabilisce fondamentalmente il Session [ "linguaggio"] in un'altra lingua e aggiorna la pagina. Si prega di correggere se questo potrebbe essere fatto meglio, ma ho fatto due controller per questo e impostare la sessione in là. Il problema è l'instradamento alla fine. Potrei aggiornare la pagina in qualche modo pulito, o posso ottenere l'azione corrente e ri-instradamento fino che? O questo è più uno scenario per l'Ajax?

grato per un consiglio!

È stato utile?

Soluzione

v'è alcuna ragione per la quale si utilizza la variabile di sessione? una soluzione più comune è quella di includere il codice della lingua nel percorso, vale a dire blah.com/en/info o blah.com/jp/info (per inglese e giapponese)

se avete fatto questo ogni pagina del sito potrebbe contenere dei link ad ogni lingua. se si sta scrivendo un sito accessibile al pubblico questo sarebbe anche rendere più facile per Google per indicizzare tutti i contenuti.

questo articolo spiega come includere la lingua nel dominio, ad esempio. en.blah.com o jp.blah.com: http://blog.maartenballiauw.be/post/2009/05/20/ASPNET-MVC-Domain-Routing.aspx

AGGIORNAMENTO:. Ecco un semplice esempio di inserire il codice di lingua nel percorso URL

Modificare il percorso di default per includere un parametro di lingua:

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

Aggiungi link per ogni lingua al vostro 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>    

Questi renderanno come back link alla pagina si è in -. Solo con il linguaggio è cambiato

Altri suggerimenti

A seguito di approccio funziona bene per me:

Io sto usando i biscotti e il mio motore per la localizzazione Tutto quello che devi mettere un po 'link sulla pagina che reindirizza a qualcosa di simile:

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 siete interessati a questo motore, fatemi sapere.

Ecco soluzione semplice come abilitare la selezione diverso URL.

c'è un controller per la gestione delle lingue

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

}

si può chiamare separatamente

new LocalesController().Index("fa");
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top