MessageRequester von Deutsch auf Englisch umschalten?

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Tracker
Beiträge: 53
Registriert: 22.11.2005 21:46
Computerausstattung: Intel Core 2 Quad Q6600, 2,4 GHZ, 2 GB RAM, NVidia GeForce 8600 GT 512 MB, Windows XP Prof. SP3, PureBasic v4.51

Beitrag von Tracker »

@ts-soft
Leider habe ich keine Erfahrung mit Resource Scripts und ob die unter allen Windows-Versionen laufen.
Aber selbst wenn ich Resource Scripts in Deutsch und Englisch hinzugefügt hätte, was würde dann z.B. ein Spanier oder ein Franzose sehen?
Deutsch, Englisch, gar nichts weil ich keine spanische und französische Resource-Datei beigefügt habe oder auch wieder nur eine aus verschiedenen Sprachen zusammengewürfelte Oberfläche?

Danke für die Hinweise. Ich werde mir morgen überlegen, ob ich den Sprachmischmasch so lasse oder mir so wie AND51 eine eigene MessageRequester-Version für mein Programm erstelle.

@AND51
Als PureBasic-Anfänger kenne ich auch keinen Befehl um die eingestellte Sprache zu ermitteln, in der Registry habe ich aber folgenden Schlüssel gefunden, in dem die Spracheinstellungen verwaltet werden:
HKEY_CURRENT_USER\Control Panel\International
Vielleicht hilft dir das weiter.
Ein fehlerfreies Programm ist der Traum jedes Programmierers
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

Laufen unter allen Windows-Versionen, es wird die erste Sprache im
Resource-Script als Default verwendet.

Ich hab Dir mal ein Simples Beispiel hochgeladen, sieh es Dir an, dann
kannste es Dir ja immer noch überlegen oder für ein späteres Object.
Ursprünglich stammt das Beispiel aus dem engl. Forum, ist also nicht alles auf
meinen Mist gewachsen, sondern auch was geklaut :mrgreen:

http://purebasic.ts-soft-online.de/dl/string.zip
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag von AND51 »

Kann ich dann eine eigene OSLanguage() schreiben, die auf den registrywert aufbaut? und wie sicher/zuverlässiv ist das? geht das auch von win 95 bis XP SP 2 ?
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Benutzeravatar
Tracker
Beiträge: 53
Registriert: 22.11.2005 21:46
Computerausstattung: Intel Core 2 Quad Q6600, 2,4 GHZ, 2 GB RAM, NVidia GeForce 8600 GT 512 MB, Windows XP Prof. SP3, PureBasic v4.51

Beitrag von Tracker »

@ts-soft
Danke, das ist ein gutes Beispiel für die Einbindung von Resource-Scripts.
Das Programm ermittelt die Sprache und gibt in Strings die Texte der Buttons zurück.

Unter folgendem Link habe ich einen Auszug aus dem Buch "WIN32 API Professional" von Klaus Prinz gefunden, das dieses Thema "Locale Settings"erklärt:
http://www.addison-wesley.de/katalog/bs ... 207bsp.htm

Laut diesem Artikel hat Deutschland die Language-ID 7 und England die Language-ID 9.
Wenn ich als Lokale-ID 1 (Default) einsetze erhalte ich z.B. folgende Werte:
1*2^10+7=1031 (Deutschland)
1*2^10+9=1033 (England)

Was ich noch nicht verstehe ist, welchen Wert ich wo ändern muss, damit ich testen kann, ob unter anderen Sprachen auch die richtigen Resource-Strings zurückgeliefert werden.

Aus welchem Wert ermittelt denn der MessageRequester die Sprache?
Der iCountry-Wert 49 für Deutschland, den man in der Registry findet ist es jedenfalls nicht (England hätte z.B. den Wert 44, Spanien 34, usw.).

@AND51
Eine einfache OSLanguage()-Funktion die mit der API-Funktion GetLocaleInfo_ den userabhängigen iCountry-Wert in der Registry ermittelt (siehe [HKEY_CURRENT_USER\Control Panel\International]) könntest du dir so bauen:

Code: Alles auswählen

buffer$=Space(256) 
GetLocaleInfo_( #LOCALE_USER_DEFAULT ,5,buffer$,256)
Debug buffer$
Wenn GetLocaleInfo_ in buffer$ den String "49" zurückliefert ist die Sprache deutsch, Englisch wäre 44, usw.

Unter Windows98 und XP funktioniert das, Windows95 kann ich leider nicht testen, aber kann man damit heute noch sinnvoll arbeiten?

Ich könnte bei meinem Programm auf den INI-Entrag für language verzichten, wenn ich noch folgendes Codefragment einbaue:

Code: Alles auswählen

language.l=0
If buffer$ = "49"
   language = 1 ;German
EndIf
Debug language
Wenn GetLocaleInfo_ buffer$="49" zurückliefert, setze ich z.B. language=1 (German), ansonsten bleibt language=0 (English).

Deutsche Benutzer hätten dann eine deutsche Benutzeroberfläche mit deutschen Buttons und alle anderen die englische Version mit den Buttons der eigenen Landessprache. Optisch nicht besonders schön, aber besser als nichts.
Ein fehlerfreies Programm ist der Traum jedes Programmierers
hiltwin
Beiträge: 311
Registriert: 06.10.2005 11:08
Wohnort: D-31177 Harsum
Kontaktdaten:

Beitrag von hiltwin »

Tracker hat geschrieben:Ich habe mir vorhin deine MessageRequester-Lösung angesehen, die du damals hiltwin gepostet hast.
Und der hat sich für sein Programm eine eigene Lösung gebaut, ging verdammt schnell und auch das Einbinden von eigener Grafik ist möglich ;o)

Ich habe einfach nen kleines eigenes Fenster gemacht und mit zwei Variablen entsprechend die beiden Texte übergeben ...

Allerdings vergiss nicht, dass es nicht nur Yes, No, Cancel gibt, sondern z.B. auch Yes, No ....

Ist aber auch keine Sache von einem halben Tag ...
Benutzeravatar
Tracker
Beiträge: 53
Registriert: 22.11.2005 21:46
Computerausstattung: Intel Core 2 Quad Q6600, 2,4 GHZ, 2 GB RAM, NVidia GeForce 8600 GT 512 MB, Windows XP Prof. SP3, PureBasic v4.51

Beitrag von Tracker »

Ich habe die Erkennung der Sprache jetzt so gelöst und auf einen Language-Eintrag in der INI-Datei verzichtet:

Code: Alles auswählen

Global Language.l
;--- Sprache einstellen 1=Deutsch, 0=Englisch
buffer$=Space(256) 
GetLocaleInfo_( #LOCALE_USER_DEFAULT ,5,buffer$,256)
Select buffer$
   Case "49":  Language=1 ;Deutsch (Deutschland)
   Case "41":  Language=1 ;Deutsch (Schweiz oder Liechtenstein)
   Case "43":  Language=1 ;Deutsch (Österreich)
   Case "352": Language=1 ;Deutsch (Luxemburg)
   Default:    Language=0 ;Englisch
EndSelect
Anwender in Deutschland, Schweiz, Liechtenstein, Österreich und Luxemburg bekommen die deutsche Oberfläche angezeigt und alle anderen eine englische Oberfläche.

Ich kann das testen, wenn ich unter "Systemsteuerung - Regions- und Sprachoptionen" bei "Standards und Formate" statt Deutsch(Deutschland) z.B. English(Usa) einstelle.

Was mich nur wundert ist, dass die Schweiz für Deutsch, Englisch und Französisch den gleichen Eintrag iCountry=41 hat. Also wird immer die deutsche Version angezeigt, auch in der italienisch und französisch-sprachigen Region. :roll:
Ich kenne einen Schweizer. Den muss ich mal fragen, ob das Sinn macht oder ob ich doch außerhalb von Deutschland nur die englische Fassung anbiete.

@hiltwin
Bei der englischen Fassung habe ich natürlich beim MessageRequester immer noch die deutschen Buttons.
Kannst du hier mal ein Beispiel deiner MessageRequester-Version posten?
Man muss ja nicht jedesmal das Rad neu erfinden.
Ein fehlerfreies Programm ist der Traum jedes Programmierers
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

Du verdrehst es immer noch. Die Sprache des Users wird von den
Messagerequestern autom. übernommen, also soll Deine Anwendung auch
diese Sprache übernehmen, schon stimmt alles.

Der Code von dem Link macht dies autom., also auf deutschen systemen
(einschließlich Schweiz usw.) kommt alles in deutsch und der Rest in engl.,
weil nicht definiert.

Kannste dann später problemlos im Resource-Skript um beliebige Sprachen
erweitern.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag von AND51 »

Tracker, 49 z. B. ist ja die internationale Vorwahl für Deutscheland. Sind die jeweiligen zahlen dann immer die Vorwahlen der jeweiligen Länder?
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Benutzeravatar
Tracker
Beiträge: 53
Registriert: 22.11.2005 21:46
Computerausstattung: Intel Core 2 Quad Q6600, 2,4 GHZ, 2 GB RAM, NVidia GeForce 8600 GT 512 MB, Windows XP Prof. SP3, PureBasic v4.51

Beitrag von Tracker »

@ts-soft
Ich hätte ja nichts dagegen Resource-Dateien zu verwenden, wenn ich wüsste, was ich auf meinem deutschen System einstellen muss, damit ich auch die englischen Resourcen testen kann.

Gibt es einen Registry-Wert, den ich testweise mal umstellen kann oder wie gaukele ich meinem PC vor ein anderssprachiges System zu haben um die "nicht definierten" englischen Resourcen testen zu können?

@AND51
Zur Ermittlung der iCountry-Einträge in meinem Script habe ich unter "Systemsteuerung - Regions- und Sprachoptionen - Standards und Formate" der Reihe nach die deutschen Regionen "Deutschland, Liechtenstein, Schweiz, Österreich und Luxemburg" eingestellt.
Parallel dazu habe ich eine DOS-Eingabeaufforderung geöffnet, für jeden Wert Regedit aufgerufen, den zugehörigen iCountry-Eintrag notiert (z.B. 41 für Schweiz) und Regedit wieder beendet. Eine Tabelle der Werte habe ich leider auch nicht.
Ein fehlerfreies Programm ist der Traum jedes Programmierers
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

Systemsteuerung - Ländereinstellungen bzw. Regions- und
Spracheinstellungen, - erweitert. Habs jetzt zwar nicht getestet, sollte aber
gehen. Setzt voraus, das Dein Windows das Unterstützt.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Antworten