Entwickler-Ecke
WinForms - Punkt-Komma Problem bei Multilanguage
Rico913 - Mi 26.04.23 12:13
Titel: Punkt-Komma Problem bei Multilanguage
Hi,
ich habe ein umfangreiches Program zum Verarbeiten und Bemaßen von Bildern geschrieben und möchte es nun für unsere englisch-sprechenden Kollegen verfügbar machen.
Wenn ich nun die Kultur in der Program.cs, wie folgt ändere:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15:
| ResourceManager resMgm = new ResourceManager("user.settings", Assembly.GetExecutingAssembly()); string Lang = resMgm.GetString("Spracheinstellung"); string LangCode; if (Lang == "deutsch") { LangCode = "de"; } else { LangCode = "en"; } LangCode = "de"; CultureInfo myCultureInfo = new CultureInfo(LangCode); Thread.CurrentThread.CurrentCulture = myCultureInfo; Thread.CurrentThread.CurrentUICulture = myCultureInfo; |
habe ich das Problem, dass meine an den Stellen, wo Berechnungen durchgeführt oder Strings konvertiert werden, ich Probleme mit dem englischen Zahlenformat (Punkt statt Komma) bekomme und dies zu falschen Ergebnissen führt.
Ich hab es an einer Stelle so gelöst:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| string LangText = Properties.User.Default.Spracheinstellung; string LangCode; string temp_DM3; string temp_SER; if (LangText == "deutsch") { temp_DM3 = Properties.User.Default.ImportFilter_DM3_setting; temp_SER = Properties.User.Default.ImportFilter_DM3_setting; } else { temp_DM3 = Properties.User.Default.ImportFilter_DM3_setting.ToString().Replace(",", "."); temp_SER = Properties.User.Default.ImportFilter_DM3_setting.ToString().Replace(",", "."); } |
Aber, ich habe so viel Stellen im Programm, wo es zu einem Fehler kommen kann und ich jede einzelne finden und lösen muss.
Gibt es dafür eine elegantere, einfache Lösung? Oder vielleicht ein komplett anderen Ansatz?
Moderiert von Th69: Titel geändert ("Punk" -> "Punkt" ;- ).
Moderiert von Th69: Code- durch C#-Tags ersetzt
jaenicke - Mi 26.04.23 14:10
Hallo und :welcome: im Forum!
Für die Anzeige und Eingabe kannst du ja die Standardumwandlung nutzen.
Alles, was irgendwo gespeichert werden soll, muss in einem einheitlich definierten Format gespeichert werden. Dafür solltest du allerdings kein Replace verwenden, sondern die passende
CultureInfo an
ToString usw. übergeben. Wenn du keine zentrale Schnittstelle für dem Zugriff auf Einstellungen oder andere gespeicherte Daten hast, wirst du das überall anpassen müssen.
Moderiert von Th69: C#-Tags hinzugefügt
Ralf Jansen - Mi 26.04.23 17:23
Das sieht mir nach clientseitigem Code aus warum versuchst du da die Kultur über eigene Einstellungen zu ändern Windows hat da schon welche. Und die müssen nicht mal zur den Standardkulturen passen. Jeder kann an seinen Ländereinstellungen schrauben. Es macht Sinn auf einem Server wenn man da Threads an die clientseitige Kultur anpassen will, oder wenn man da eigene Threads startet und die Kultur des startenden Threads übernehmen will (das macht das Framework nicht selbst).
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2024 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!