2017-07-20 4 views
0

Wir haben eine Web.API-Anwendung, in der wir eine niederländische und englische Sprache unterstützen müssen. Dafür haben wir die Kultur als "nl" oder "en" basierend auf der Benutzeranforderung festgelegt.Wie unterstützt man verschiedene "NumberDecimalSeparator" in Web.API?

Aber wir haben das Problem in "NumberDecimalSeparator", weil für "en" ist es "." Und für "nl" ist es ",". Wenn der Benutzer nun Daten für die Sprache "nl" posten oder abrufen möchte, sollte der Wert als "," angezeigt und veröffentlicht werden, und für die Sprache "en" sollte er als "." Angezeigt/veröffentlicht werden.

Hat jemand eine Idee dazu? Wie können wir damit umgehen?

Ich benutze Linq Abfrage und ich muss versucht, Daten basierend auf Sprache wiederzugeben.

Vielen Dank im Voraus ..

Linq Abfrage als Gebrüll

var test = await (from x in db.instance.Where(x => x.ID == 36) 
        select new GeofenceAttributeModel() 
        { 
        Address = x.geofenceattribute != null ? x.geofenceattribute.Address : string.Empty, 
        Latitude = x.geofenceattribute != null && x.geofenceattribute.Latitude.HasValue ? x.geofenceattribute.Latitude : null, 
        Longitude = x.geofenceattribute != null && x.geofenceattribute.Longitude.HasValue ? x.geofenceattribute.Longitude : null, 
        RadiusInMtr = x.geofenceattribute != null ? x.geofenceattribute.RadiusInMtr.ToString() : string.Empty 
        }).FirstOrDefaultAsync(); 
+0

Ist https://stackoverflow.com/a/24721335/34092 oder https://forums.asp.net/t/1962812.aspx?Localization+in+web+Api Hilfe? – mjwills

+0

Danke .. Ja, ich habe die aktuelle Kultur und die aktuelle UI-Kultur dynamisch nach dem 2. Link gesetzt. Aber das Problem mit der Dezimalzahl, zum Beispiel, wenn ich in der Datenbank einen Wert wie 4.5 habe, dann muss ich es als 4,5 anzeigen, wenn NL-Sprache ausgewählt ist, und ich muss es in die LINQ-Abfrage behandeln. –

+0

Nummern haben kein Format. Sie werden nur formatiert, wenn Sie sie in eine Zeichenfolge konvertieren. Wenn Sie die Kultur richtig einstellen, erfolgt die Formatierung automatisch - unabhängig davon, ob LINQ oder ein anderes Element verwendet wird. – mjwills

Antwort

3

Willkommen auf die Globalisierung zu unterstützen.

Eine Faustregel: Verwenden Sie das aktuelle Gebietsschema nur, wenn es analysiert oder in der Benutzeroberfläche (z. B. Webbrowser) angezeigt wird.

In jedem anderen Fall (Speichern von Daten, Kommunikation zwischen Komponenten in Textformaten, einschließlich JSON oder XML-Körper von Beiträgen) verwenden Sie invariante Kultur. Auf der Serverseite sollte es völlig transparent sein, ob die Benutzeroberfläche Niederländisch oder Englisch oder eine andere Kultur verwendet.

Niemals Zahlen und Datetime-Werte mit der lokalen Kultur serialisieren; Wenn Sie Ihre Daten deserialisieren müssen, können Sie zum Beispiel nicht mehr sagen, ob ein Komma ein Dezimalzeichen oder ein Tausendertrennzeichen ist. In Ihrem Code verwendet RadiusInMtr.ToString() die lokale Kultur des Systems (Thread.CurrentThread.CurrentCulture). Es ist nur OK, wenn die Zeichenfolge in der Benutzeroberfläche angezeigt wird. Wenn Sie diese Zeichenfolge verwenden, um Daten an eine andere Komponente zu übertragen, verwenden Sie stattdessen ToString(CultureInfo.InvariantCulture). Und geben Sie die Kultur an, wenn Sie die Zeichenfolge ähnlich analysieren.

+0

Okay. Ich denke, ich muss mit der Formatierung von Zahlen auf Front-End-Ebene umgehen. Basierend auf der Sprache muss ich die Nummer analysieren und als "," oder "." und wenn ich eine Anfrage an den Server mache, muss ich zuerst "," zu "." und dann posten Sie es auf dem Server. –

Verwandte Themen