ASP.NET MVC: quando impostare Thread.CurrentThread.CurrentUICulture?
-
06-07-2019 - |
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"/>
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.