Autor Beitrag
Rico913
Hält's aus hier
Beiträge: 1



BeitragVerfasst: Mi 26.04.23 12:13 
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:
ausblenden 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:
ausblenden 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 user profile iconTh69: Titel geändert ("Punk" -> "Punkt" ;- ).
Moderiert von user profile iconTh69: Code- durch C#-Tags ersetzt
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19272
Erhaltene Danke: 1740

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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 user profile iconTh69: C#-Tags hinzugefügt
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4764
Erhaltene Danke: 1052

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Mi 26.04.23 15:53 
Ähnlich habe ich meine Antwort in seinem Crosspost myCSharp.de: Punk(t)-Komma Problem bei Multilanguage formuliert.
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4700
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: 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).