Autor Beitrag
Yankyy02
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 138
Erhaltene Danke: 21

Win 11 x64
C# (VS 2022 - Rider)
BeitragVerfasst: Do 02.04.20 13:51 
Hallo Gemeinde,

nach langem suchen und probieren möchte ich mich nun an euch wenden.
Ich habe folgendes Problem und zwar wird in einer MessageBox die falsche Anzeigesprache verwendet.
In meiner WPF-Desktop Application überschreibe ich die Startup-Methode folgendermaßen:

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
  protected override void OnStartup(StartupEventArgs e)
        {
            CultureInfo culture = CultureInfo.CreateSpecificCulture("de-DE");

            Thread.CurrentThread.CurrentUICulture = culture;
            Thread.CurrentThread.CurrentCulture = culture;

            CultureInfo.DefaultThreadCurrentCulture = culture;
            CultureInfo.DefaultThreadCurrentUICulture = culture;

            FrameworkElement.LanguageProperty.OverrideMetadata(
                typeof(FrameworkElement),
                new FrameworkPropertyMetadata(
                    XmlLanguage.GetLanguage(CultureInfo.CurrentCulture.IetfLanguageTag)));

            base.OnStartup(e);          
        }


Leider passiert es das auf unterschiedlichen Systemen die MessageBox mal mit Ja/Nein Buttons angezeigt wird und mal mit Yes/No.
Verständlicherweise möchte ich das durchgehend die Deutsche Sprache verwendet wird.

* Auf den Testsystemen ist jeweils die gleiche Region/Anzeigesprache/Tasturlayout gesetzt.
* Die Registrierung weißt unter allen Testsystemen den gleichen Wert für International/Locale auf.
* Das .Net Framework Language Pack in deutsch und in der richtigen Version ist auf den Testsystemen installiert.

Ich kann mir nicht erklären warum die Sprache bzw. die Buttons der MessageBox jeweils eine andere Sprache aufweisen.

Gibt es irgendwo noch versteckt eine Property die man setzen kann/muss um durchgehend und eventuell auch unabhängig von der verwendeten "Windows-Sprache" eine gewisse UI-Sprache durchzusetzen?

Danke vorab für eure Vorschläge!

_________________
the quiter you become, the more you are able to hear
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: Do 02.04.20 14:35 
Hallo,

die MessageBox ist ein System-Dialog und verwendet (für die Buttons) immer die eingestellte Sprache des Windows-Systems.

Für WinForms habe ich diesen Artikel Localizing System MessageBox gefunden (eigentlich müßte dieser dann auch, entsprechend angepaßt, für WPF so funktionieren).

Aber wofür benötigst du denn die MessageBoxen? Kannst du nicht einen eigenen Dialog erzeugen?
Yankyy02 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 138
Erhaltene Danke: 21

Win 11 x64
C# (VS 2022 - Rider)
BeitragVerfasst: Do 02.04.20 14:46 
Hallo und danke für deine Antwort,

es geht hier um eine simple Ja - Nein Abfrage und ja man könnte auch einen eigenen Dialog basteln aber wie man schon früh in der Programmierung lernt soll man nicht immer das Rad neu erfinden :wink:
und die vorhandene MessageBox eignet sich ja perfekt dafür.
Den Beitrag habe ich bereits gesehen und probiert ...... dennoch verstehe ich nicht warum es bei 3 gleichen Systemen zur unterschiedlichen Anzeigesprache kommt.
Dann kann ich mir das globale setzen der Spracheinstellung auch gleich sparen. (sofern ich nicht für unterschiedliche Sprachen eine UI anbiete)

Dafür hast du mich jetzt auf eine Idee gebracht .... das WPF Toolkit bietet ihre eigene Implementierung einer MessageBox ..... so sollte ich das Problem umgehen können ....

Was meinst du?

_________________
the quiter you become, the more you are able to hear
Yankyy02 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 138
Erhaltene Danke: 21

Win 11 x64
C# (VS 2022 - Rider)
BeitragVerfasst: Do 02.04.20 15:56 
Hat sich erledigt .... ich benutze Komponenten von DevExpress und darunter auch die DXMessageBox .... da läuft die Lokalisierung ein wenig anders jetzt klappts auf allen Systemen.
Die Frage bleibt aber dennoch warum es bei scheinbar identischen Systemen zu unterschiedlichen Sprachen kommt. :?:

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
    public class DxMessageBoxCustomLocalizer : DXMessageBoxLocalizer
    {
        public override string GetLocalizedString(DXMessageBoxStringId id)
        {
            switch (id)
            {
                case DXMessageBoxStringId.Yes:
                    return "Ja";
                case DXMessageBoxStringId.No:
                    return "Nein";
                case DXMessageBoxStringId.Cancel:
                    return "Abbrechen";
            }

            return base.GetLocalizedString(id);
        }
    }


ausblenden C#-Quelltext
1:
2:
3:
4:
  protected InfoDocumentViewModel()
        {
            DXMessageBoxLocalizer.Active = new DxMessageBoxCustomLocalizer();
        }

_________________
the quiter you become, the more you are able to hear