System-Dialogtext in Englisch

MAC OSX spezifisches Forum
Beiträge, die plattformübergreifend sind, gehören ins 'Allgemein'-Forum.
Istvan42
Beiträge: 16
Registriert: 15.12.2019 16:59
Computerausstattung: MacOS Sonoma (M1), PureBasic 6.03 LTS (MacOS X - x64)

System-Dialogtext in Englisch

Beitrag von Istvan42 »

Hallo zusammen,

ich habe mit SaveFileRequester() einen Dialog erzeugt. Leider sind die Buttons und der System-Dialogtext (beispielsweise, wenn eine Datei schon existiert) in Englisch. Die Systemsprache ist aber Deutsch. Soweit ich verstanden habe, sollte die System-Dialoge in der User-Sprache sein, die im OS eingestellt sind. Das ist zumindest beim SaveFileRequester() nicht der Fall. Habe ich etwas übersehen oder kann man die Sprache der Systemdialoge irgendwo anpassen?

Beim Betriebsystem handelt es sich um Mac OSX (Catalina). Wenn ich versuche, die Systemsprache für PB in den Systemeinstellungen von OSX anzupassen wird mir angezeigt, dass PB nur die Systemsprache Englisch unterstütz. Sieht so aus, als ob es ein Problem zwischen dem OS und PB ist. Das würde bedeuten, dass der Systemdialog bei einer "deutschen" Anwendung dennoch in Englisch ist. Das wäre dann nicht besonders benutzerfreundlich.

Hat jemand noch ein Idee?

Existiert das Problem auch bei Windows oder Linux?

Grüße
Istvan42
ccode_new
Beiträge: 1214
Registriert: 27.11.2016 18:13
Wohnort: Erzgebirge

Re: System-Dialogtext in Englisch

Beitrag von ccode_new »

Hallo Istvan42,

wie das Ändern der Sprache beim Debuggen/ Ausführen mit der IDE geht weis ich nicht.

Aber du kannst die Sprache im Nachhinein ändern.

Anleitung:

1. Erstelle deine Anwendung (Compiler -> Executable erstellen)
2. Dein erstelltes Programm mit der rechten Maustaste anklicken
-> Ein Kontextmenü erscheint.
-> Dort wählst du: "Paketinhalt zeigen"
-> Danach öffnest du den Ordner "Contents"
-> Darin befindet sich die Datei: "Info.plist"
-> Diese Datei musst du jetzt editieren.
In diesem Feld: "Localization native development region" musst du jetzt "Germany" auswählen.
3. Alles Speichern
4. Dein Programm öffnen
5. Freuen das deine Dateidialoge jetzt in Deutsch angezeigt werden.
Betriebssysteme: div. Windows, Linux, Unix - Systeme

no Keyboard, press any key
no mouse, you need a cat
Istvan42
Beiträge: 16
Registriert: 15.12.2019 16:59
Computerausstattung: MacOS Sonoma (M1), PureBasic 6.03 LTS (MacOS X - x64)

Re: System-Dialogtext in Englisch

Beitrag von Istvan42 »

Hallo ccode_new,

vielen Dank für die schnelle Antwort. Ich werde es morgen mal testen. Hört sich aber für mich nach einer guten Lösung an. Wenn es im Debugger bzw. in der IDE auf Englisch ist, dann kann ich damit leben.

Gruß
Istvan42
MacOS Sonoma (M1), PureBasic 6.03 LTS (MacOS X - x64)
Istvan42
Beiträge: 16
Registriert: 15.12.2019 16:59
Computerausstattung: MacOS Sonoma (M1), PureBasic 6.03 LTS (MacOS X - x64)

Re: System-Dialogtext in Englisch

Beitrag von Istvan42 »

Hallo,

ich habe den empfohlenen Kniff ausprobiert. Bei den Datei-Dialogen funktioniert es. Bei einem MessageRequeseter leider nicht.

Code: Alles auswählen

MessageRequester("Warnung", "Wollen Sie das Programm wirklich beenden?",
                   #PB_MessageRequester_Warning | #PB_MessageRequester_YesNoCancel)
Die Buttons sind dann in Englisch (yes, no, Cancel).

Gibt es da noch einen Trick oder muss ich mir ein eigenes Dialog-Fenster bauen?

Grüße
Istvan42
MacOS Sonoma (M1), PureBasic 6.03 LTS (MacOS X - x64)
ccode_new
Beiträge: 1214
Registriert: 27.11.2016 18:13
Wohnort: Erzgebirge

Re: System-Dialogtext in Englisch

Beitrag von ccode_new »

Hier:

Code: Alles auswählen

EnableExplicit

ImportC ""
  GetIconRef(vRefNum.w, creator.i, iconType.i, *theIconRef)
  ReleaseIconRef(theIconRef.i) ;Deprecated
EndImport

Procedure.i German_MessageRequester(title.s, info.s, flags.i = #PB_MessageRequester_Ok)
  Protected.i alert, nimage, icon, picon
  Protected.i rtype
  
  alert = CocoaMessage(0, CocoaMessage(0, 0, "NSAlert new"), "autorelease")
  CocoaMessage(0, alert, "setMessageText:$", @title)
  CocoaMessage(0, alert, "setInformativeText:$", @info)
  
  Select flags
    Case 0, 4, 8, 16
      CocoaMessage(0, Alert, "addButtonWithTitle:$", @"Ok")
    Case 1, 5, 9, 17
      CocoaMessage(0, Alert, "addButtonWithTitle:$", @"Ja")
      CocoaMessage(0, Alert, "addButtonWithTitle:$", @"Nein")
    Case 2, 6, 10, 18
      CocoaMessage(0, Alert, "addButtonWithTitle:$", @"Ja")
      CocoaMessage(0, Alert, "addButtonWithTitle:$", @"Nein")
      CocoaMessage(0, Alert, "addButtonWithTitle:$", @"Abbrechen")
  EndSelect
  
  Select flags
    Case 4, 5, 6
      icon = $6E6F7465
    Case 8, 9, 10
      icon = $73746F70
    Case 16, 17, 18
      icon = $63617574
    Default
      icon = $4150504C
  EndSelect
  
  If GetIconRef(-32768, $6D616373, icon, @picon) = 0
    CocoaMessage(@nimage, 0, "NSImage alloc")
    CocoaMessage(0, nimage, "initWithIconRef:", picon)
    CocoaMessage(0, alert, "setIcon:@", @nimage)
    rtype = CocoaMessage(0, alert, "runModal")
    CocoaMessage(0, nimage, "release")
    ReleaseIconRef(picon)
  EndIf
  
  If rtype = 1000 And (flags = 0 Or flags = 4 Or flags = 8 Or flags = 16)
    ProcedureReturn 0
  ElseIf rtype = 1000
    ProcedureReturn #PB_MessageRequester_Yes
  ElseIf rtype = 1001
    ProcedureReturn #PB_MessageRequester_No
  ElseIf rtype = 1002
    ProcedureReturn #PB_MessageRequester_Cancel
  ElseIf rtype = 0
    ProcedureReturn -1
  EndIf
  
EndProcedure

Debug German_MessageRequester("Meldung", "Dies ist ein Infotext", #PB_MessageRequester_Info|#PB_MessageRequester_YesNo)

Viel Spaß beim Ausprobieren.
Betriebssysteme: div. Windows, Linux, Unix - Systeme

no Keyboard, press any key
no mouse, you need a cat
Istvan42
Beiträge: 16
Registriert: 15.12.2019 16:59
Computerausstattung: MacOS Sonoma (M1), PureBasic 6.03 LTS (MacOS X - x64)

Re: System-Dialogtext in Englisch

Beitrag von Istvan42 »

Hallo ccode_new,


vielen Dank für Deinen Workaround. Funktioniert so weit. Da ich gerne plattformunabhängig programmieren möchte, wäre das nicht meine erste Option. Natürlich kann ich die Lösung mit entsprechenden Compiler-Anweisungen auch so verwenden. Leider habe ich vom OS X Framework keine Ahnung. Grundsätzlich verstehe ich, was Du da machst, aber im Detail tappe ich im Halbdunkeln.

Ich habe mit Hilfe von Google auch festgestellt, dass z. B. der Aufruf ReleaseIconRef() veraltet ist und nicht mehr supportet ist. Man soll stattdessen NSWorkspace und NSImage verwenden.

Bei Bedarf werde ich versuchen einen MessageRequester mit PureBasic ohne API-Aufrufe ans OS erstellen.

Gruß
Istvan42
MacOS Sonoma (M1), PureBasic 6.03 LTS (MacOS X - x64)
Benutzeravatar
mk-soft
Beiträge: 3695
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: System-Dialogtext in Englisch

Beitrag von mk-soft »

Dafür gibt es Compiler Direktiven...

Code: Alles auswählen

CompilerSelect #PB_Compiler_OS
  CompilerCase #PB_OS_Windows
    
  CompilerCase #PB_OS_Linux
    
  CompilerCase #PB_OS_MacOS
    ; Code her for macOS
    
    ImportC ""
      GetIconRef(vRefNum.w, creator.i, iconType.i, *theIconRef)
      ReleaseIconRef(theIconRef.i) ;Deprecated
    EndImport
    
    Procedure.i German_MessageRequester(title.s, info.s, flags.i = #PB_MessageRequester_Ok)
      ...
      
      
    Macro MessageRequester(Title, Text, Flags = #PB_MessageRequester_Ok)
      German_MessageRequester(Title, Text, Flags)
    EndMacro
    
CompilerEndSelect
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Istvan42
Beiträge: 16
Registriert: 15.12.2019 16:59
Computerausstattung: MacOS Sonoma (M1), PureBasic 6.03 LTS (MacOS X - x64)

Re: System-Dialogtext in Englisch

Beitrag von Istvan42 »

mk-soft hat geschrieben:Dafür gibt es Compiler Direktiven...
Natürlich kann ich die Lösung mit entsprechenden Compiler-Anweisungen auch so verwenden.
Sorry, ist mir bekannt. Habe ich mich wohl nicht ganz klar ausgedrückt.

Bevor ich aber von einer "reinen" PureBasic Lösung abweiche, möchte ich gerne andere Möglichkeiten nutzen (sofern vorhanden), zumal ich mich nicht mit den OS APIs auskenne.

Gruß
Istvan42
MacOS Sonoma (M1), PureBasic 6.03 LTS (MacOS X - x64)
ccode_new
Beiträge: 1214
Registriert: 27.11.2016 18:13
Wohnort: Erzgebirge

Re: System-Dialogtext in Englisch

Beitrag von ccode_new »

Istvan42 hat geschrieben:Bevor ich aber von einer "reinen" PureBasic Lösung abweiche, möchte ich gerne andere Möglichkeiten nutzen (sofern vorhanden), zumal ich mich nicht mit den OS APIs auskenne.
Es macht aber durchaus Sinn sich mit den entsprechenden Betriebssystem-Anwendungs-Programmier-Schnittstellen zu befassen.

PureBasic bietet natürlich schon ein schönes kleines Framework, aber selbst dieses hat Lücken und Ausnahmen auf den Drei unterstützen Plattformen.

Oftmals benötigt man eben dann doch Funktionen die das PureBasic-"Framework" nicht bieten kann.

Da ist man dann mit Programmiersprachen die auf das Java- oder .Net - Framework setzen zum Beispiel schon besser bedient.
Dort gibt es eine größere Vielfalt.

Umso mehr ist dann die Community um PureBasic gefragt, oder man bürdet alles wenigen Personen (Fred, Timo, etc.) auf.

Aber dafür ist PureBasic echt gut geworden.

Zu MacOS:
Die Dokumentation ist eigentlich sehr gut. (Alles so schöne tolle Frameworks und so Kompakt (weniger zerstreut))
Außerdem ist auch der PureBasic - Befehl "CocoaMessage" echt supi.
Betriebssysteme: div. Windows, Linux, Unix - Systeme

no Keyboard, press any key
no mouse, you need a cat
Antworten