Domanda

Sto appena iniziando a localizzare un'applicazione ASP.NET MVC. La maggior parte delle stringhe verrà definita nei file di risorse e recuperata tramite Assistenti per la localizzazione di Matt . Altre stringhe devono essere archiviate in un database.

La mia domanda: Devo impostare CurrentUICulture all'inizio della pipeline della richiesta e utilizzarlo in tutta l'applicazione, oppure utilizzare direttamente Request.UserLanguages ??[0] quando necessario?

In questo momento sto pensando che dovrei impostare CurrentUICulture in Application_BeginRequest . L'implementazione sarebbe simile a questa:

protected void Application_BeginRequest(object sender, EventArgs e)
{
    var cultureName = HttpContext.Current.Request.UserLanguages[0];
    Thread.CurrentThread.CurrentUICulture = new CultureInfo(cultureName);
}

È il posto migliore per impostare CurrentUICulture ed è Request.UserLanguages ??[0] il posto migliore per ottenere tali informazioni?


Aggiornamento:

Il post di Ariel mostra che questo può essere definito senza codice, usando web.config

<system.web>
  <!--If enableClientBasedCulture is true, ASP.NET can set the UI culture and culture for a Web page automatically, based on the values that are sent by a browser.-->
  <globalization enableClientBasedCulture="true" culture="auto:en-US" uiCulture="auto:en"/>
È stato utile?

Soluzione

Ecco un esempio che utilizza un HttpModule:

http: //weblogs.manas .com.ar / smedina / 2008/12/17 / internazionalizzazione-in-aspnet-mvc /

Altre opzioni, creare una classe Controller di base e implementare lì la logica di localizzazione. Oppure usa un attributo filtro azione, ma dovrai ricordarti di aggiungerlo su ogni controller o combinare questo approccio con la classe Controller di base.

Altri suggerimenti

Request.UserLanguages ??[0] non può che essere un suggerimento sulla lingua che gli utenti desiderano vedere. La maggior parte degli utenti non sa dove cambiare la lingua del browser.

Un altro punto: non assicurarsi che Request.UserLanguages ??[0] sia una lingua valida. Può anche essere nullo. (Non sono sicuro di quali robot ci siano)

Di solito hai un Selettore lingua nella pagina. Una volta che un utente ha selezionato una lingua lì, viene memorizzato in un cookie, sessione o URL. Mi piace usare l'URL perché penso che sia carino.

Se un utente vede la tua pagina senza aver impostato una lingua sulla tua pagina, dovresti verificare se Request.UserLanguages ??[0] è una lingua supportata e impostare Thread.CurrentThread.CurrentUICulture.

Uso un filtro per impostare Thread.CurrentThread.CurrentUICulture. Va bene finché nessun altro filtro sta usando Thread.CurrentThread.CurrentUICulture. Altrimenti dovresti impostare il giusto ordine di esecuzione per i filtri.

Uso anche l'helper Matts e finora ha funzionato molto bene.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top