Laden...

Punk-Komma Problem bei Multilanguage

Erstellt von Rico913 vor einem Jahr Letzter Beitrag vor einem Jahr 477 Views
R
Rico913 Themenstarter:in
95 Beiträge seit 2020
vor einem Jahr
Punk-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:

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:

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?

4.939 Beiträge seit 2008
vor einem Jahr

Bei allen internen Konvertierungen (z.B. um Settings zu laden/speichern) solltest du explizit CultureInfo.InvariantCulture(editiert) als Parameter angeben - bloß nicht Komma in Punkt (oder umgekehrt) umwandeln:

xyz.ToString(CultureInfo.InvariantCulture);

Wenn du das vorher nicht bedacht hast, dann mußt du jetzt alle möglichen Stellen durchgehen.

PS: In deinem ersten Code setzt du in Zeile 12 immer LangCode = "de".

Und in deinem 2. Code verwendest du beides mal ImportFilter_DM3_setting(auch für temp_SER).

2.079 Beiträge seit 2012
vor einem Jahr

Du meinst CultureInfo.InvariantCulture 😃

NuGet Packages im Code auslesen
lock Alternative für async/await

Beim CleanCode zählen nicht die Regeln, sondern dass wir uns mit diesen Regeln befassen, selbst wenn wir sie nicht befolgen - hoffentlich nach reiflichen Überlegungen.