2012-11-25 12 views
12

Come posso impostare automaticamente la cultura dell'interfaccia utente in base al browser dell'utente? Tutto quello che ho trovato su questo è Globalize.culture("pt-BR"); Ma imposta pt-BR come predefinito e non voglio impostare questo di default! Voglio impostarlo solo se l'utente è pt-BR! Come posso fare questo? E i metodi di validazione, come posso impostarli per una cultura specifica?Impostare uiCulture automaticamente in base al browser accetta la lingua

risposta

18

In un MVC ASP.NET il web.config è il posto giusto. C'è un breve riepilogo, il primo snippet mostra, come potrebbe esserlo per es. pt-BR cultura costretto

<globalization 
    enableClientBasedCulture="false" 
    uiCulture="pt-BR" 
    culture="pt-BR" /> 

Se l'applicazione è pronta ad accettare la cultura dal client (browser), le impostazioni dovrebbero essere

<globalization 
    enableClientBasedCulture="true" 
    uiCulture="auto" 
    culture="auto" /> 

L'impostazione di cui sopra avrà un Lingua selezionato nel browser client (ad esempio, cs-CZ nel mio caso). Se nessuno è definito, verranno utilizzate le impostazioni di sistema. spettacoli frammento finali, come consentire ai client di impostare e inviare la cultura intesa, ma nel caso in cui non Lingua è pre-selezionato, ignorare l'impostazione con qualche altro valore predefinito pt-BR

<globalization 
    enableClientBasedCulture="true" 
    uiCulture="auto:pt-BR" 
    culture="auto:pt-BR" /> 

sistema estesi: impostazioni cultura per jQueryvalidator e input numerico

Nota: io non sono sicuramente un esperto di jQuery e globalizzazione tecniche. Questo è ad esempio come fare regolare validator di elaborare correttamente qualsiasi input numerico

rasoio Visualizza Parte (X() è una scorciatoia per new HtmlString()):

var defaultThousandSeprator = "@X(culture.NumberFormat.NumberGroupSeparator)"; 
var defaultDecimalSeprator = "@X(culture.NumberFormat.NumberDecimalSeparator)"; 

jQuery parte (metodi personalizzati per min e max)

$.validator.addMethod("min", function (value, element, param) 
{ 
    var num = value.replace(RegExp(" ", "g"), "") // remove spaces 
      .replace(RegExp('\\' + defaultThousandSeprator, "g"), "") // thousand separator 
      .replace(RegExp("\\" + defaultDecimalSeprator, "g"), "."); // fix decimals 
    return this.optional(element) || num >= param; 
}); 
$.validator.addMethod("max", function (value, element, param) 
{ 
    var num = value.replace(RegExp(" ", "g"), "") // remove spaces 
      .replace(RegExp('\\' + defaultThousandSeprator, "g"), "") // thousands 
      .replace(RegExp("\\" + defaultDecimalSeprator, "g"), "."); // decimals 
    return this.optional(element) || num <= param; 
}); 

E poi jQuery.validator viene valutata valori di ingresso per cs-CZ: 10 000,00 correttamente e en-US: 10,000.00.

+0

Ma cambiare questa influenza di doest'n in validatori jQuery (le convalide mantiene lo stesso), quindi ho bisogno di cambiare la cultura con Globalize.js. – MuriloKunze

+0

Ok, non conosco Globalize.js. Per gestire le cose JS, utilizzo variabili JS generate dinamicamente e.g .: 'var defaultCulture =" @ (CultureInfo.CurrentCulture.Name) "'; e quindi estendere componenti JS come '$ .datepicker.regional [defaultCulture || '']; '.Ma la mia risposta è stata spiegare come consentire l'utilizzo della cultura del cliente, come richiesto ... Potrebbe esserci un valore predefinito, ma sovrascritto con il client, se fornito –

+0

Sì, grazie. Ma ho bisogno di sapere come lavorare anche con la globalizzazione e le convalide. – MuriloKunze

1

è necessario scrivere la sceneggiatura dalla pagina web (o pagina master):

<script type="text/javascript"> 
    Globalize.culture("<% = CultureInfo.CurrentCulture.ToString() %>"); 
</script> 

Questo è tutto. Intendiamoci, che ho usato CurrentCulture invece di CurrentUICulture, in quanto questo è quello che dovresti usare per la formattazione. Se hai bisogno delle traduzioni (che non farei in questo modo perché danneggerebbe la localizzazione), avrai bisogno del tuo originale CurrentUICulture.

Problemi correlati