2012-11-25 3 views
12

Wie kann ich die Kultur der Ui automatisch basierend auf dem Benutzerbrowser einstellen? Alles, was ich darüber gefunden habe, ist Globalize.culture("pt-BR"); Aber es setzt pt-BR als Standard und ich möchte das nicht standardmäßig festlegen! Ich möchte das nur einstellen, wenn der Benutzer pt-BR ist! Wie kann ich das tun? Und die Validator-Methoden, wie kann ich sie für eine bestimmte Kultur festlegen?Set uiCulture automatisch basierend auf Browser akzeptieren Sprache

Antwort

18

In einem ASP.NET MVC ist der web.config der richtige Ort. Es gibt eine kurze Zusammenfassung, der erste Ausschnitt zeigt, wie z. pt-BR Kultur gezwungen

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

Wenn die Anwendung bereit ist, die Kultur vom Client (Browser) zu akzeptieren, sollten Einstellungen seinen

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

Die obige Einstellung wird eine Sprache in Client-Browser ausgewählt (zB cs-CZ in meinem Fall). Wenn keine definiert ist, werden die Systemeinstellungen verwendet. Abschluss Schnipsel zeigt, wie Client zu ermöglichen, setzen und sollte Kultur senden, aber in dem Fall, dass keine Sprache vorgewählt, außer Kraft gesetzt, das System mit einem anderen Standardwert Einstellung pt-BR

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

Erweitern: Kultureinstellungen für jQueryvalidator und numerische Eingabe

Hinweis: ich bin definitiv kein Experte in jQuery und Globalisierung Techniken. Dies ist beispielsweise, wie ich validator tue richtig einstellen beliebige numerische Eingabe

Rasierer anzeigen Teil (X() ist eine Abkürzung für new HtmlString()) zu verarbeiten:

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

jQuery Teil (benutzerdefinierte Methoden für min und 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; 
}); 

Und dann wertet jQuery.validator Eingabewerte für cs-CZ: 10 000,00 korrekt sowie de-DE: 10,000.00.

+0

Aber das Ändern dieses Einflusses in jquery-Validatoren (die Validierungen bleiben gleich), muss ich die Kultur mit Globalize.js ändern. – MuriloKunze

+0

Ok, ich weiß nicht, Globalize.js. Um JS-Sachen zu behandeln, verwende ich dynamisch generierte JS-Variablen wie: 'var defaultCulture =" @ (CultureInfo.CurrentCulture.Name) "'; und dann JS-Komponenten wie '$ .datepicker.regional [defaultCulture || ']; '.Aber meine Antwort war zu erklären, wie Client-Kultur verwendet werden kann, wie Sie gefragt ... Es könnte Standard sein, aber mit Client überschreiben, wenn –

+0

Ja, danke. Aber ich muss wissen, wie man mit globalisieren und den Validierungen auch arbeitet. – MuriloKunze

1

Sie müssen das Skript von der Webseite (oder Master-Seite) schreiben:

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

Das ist es. Beachten Sie, dass ich CurrentCulture anstelle von CurrentUICulture verwendet habe, da dies zum Formatieren verwendet werden sollte. Wenn Sie die Übersetzungen benötigen (was ich nicht tun würde, da dies die Lokalisierbarkeit beeinträchtigen würde), benötigen Sie Ihr Original CurrentUICulture.

Verwandte Themen