Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

Benutzersprache ermitteln

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Windows-spezifische Fragen
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Berkeley



Anmeldungsdatum: 13.05.2024
Beiträge: 62

BeitragVerfasst am: 06.06.2024, 17:08    Titel: Benutzersprache ermitteln Antworten mit Zitat

- und zwar in der Form, dass man mindestens "de" erhält, besser noch "de_DE" nach ISO 639 und ISO 3166. Der Code von jojo anno 2008 funktioniert nicht mehr; GetLocaleInfo() hängt sich auf.

- Kann man von FreeBASIC aus auf die Standard C Library zurückgreifen ? Möglichst so, dass keiner, der die Quelltexte kompilieren will, irgendwelche Klimmzüge machen muss ?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
grindstone



Anmeldungsdatum: 03.10.2010
Beiträge: 1237
Wohnort: Ruhrpott

BeitragVerfasst am: 06.06.2024, 17:28    Titel: Re: Benutzersprache ermitteln Antworten mit Zitat

Berkeley hat Folgendes geschrieben:
- und zwar in der Form, dass man mindestens "de" erhält, besser noch "de_DE" nach ISO 639 und ISO 3166. Der Code von jojo anno 2008 funktioniert nicht mehr; GetLocaleInfo() hängt sich auf.


So funktioniert es:
Code:
Dim langcode As String

#If Defined(__FB_WIN32__)

'Declare Function GetLocaleInfo Lib "kernel32" Alias "GetLocaleInfoA" (ByVal As Integer, ByVal As Integer, ByVal As String, ByVal As Integer) As Integer
#Include "windows.bi"

Scope

Dim sBuffer As String * 32, nResult As Integer

nResult = GetLocaleInfo(&h800, &h59, sBuffer, 32)


If nResult > 0 Then
    langcode =  Left(sBuffer, nResult - 1)
End If

End Scope

#ElseIf Defined(__FB_LINUX__)

Scope

Dim ff As Integer = FreeFile
Open Pipe "locale" For Input As ff

Dim sRetVal As String

Do Until EOF(ff)
    Line Input #ff, sRetVal
    If LCase(Left(sRetVal, 5)) = "lang=" Then
        langcode = LCase(Mid(sRetVal, 6))
        If InStr(langcode, "_") Then ' Schema: de_DE
            langcode = Left(langcode, InStr(langcode, "_") - 1)
        EndIf
        Exit Do
    EndIf
Loop

Close #ff

End Scope

#EndIf

Print "Das Kürzel der Systemsprache ist: " & langcode
Sleep


Gruß
grindstone
_________________
For ein halbes Jahr wuste ich nich mahl wie man Proggramira schreibt. Jetzt bin ich einen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Berkeley



Anmeldungsdatum: 13.05.2024
Beiträge: 62

BeitragVerfasst am: 06.06.2024, 19:25    Titel: Antworten mit Zitat

Vielen Dank ! Funktioniert zwar nicht, aber zumindest schmiert die Funktion nicht mehr ab. Also nur noch 50% Windows. Vielleicht kann ich damit was anfangen, speziell der "windows/winnls.bi"...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Berkeley



Anmeldungsdatum: 13.05.2024
Beiträge: 62

BeitragVerfasst am: 06.06.2024, 20:48    Titel: Antworten mit Zitat

Jetzt funzt's !

Scheinbar brauchte es ein STRPTR():
Code:
nResult = GetLocaleInfoA(&h400, &h59, STRPTR(sBuffer), 32)


außerdem nebenbei eben "GetLocaleInfoA". Bei mir wird "GetLocaleInfo" auf "GetLocaleInfoW" umgemappt, da kommt dann 16-Bit-Unicode zurück oder so ähnlich. Das "A" steht also wohl für "ASCII" und "W" für "wide-char".

&h400 ist für die Benutzersprache, &h800 für Systemsprache, mit &5a kriegt man das Land, so kann ich mir meinen Code zusammenbasteln.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
grindstone



Anmeldungsdatum: 03.10.2010
Beiträge: 1237
Wohnort: Ruhrpott

BeitragVerfasst am: 07.06.2024, 14:47    Titel: Antworten mit Zitat

Berkeley hat Folgendes geschrieben:
Das "A" steht also wohl für "ASCII" und "W" für "wide-char".

Richtig. lächeln

Gruß
grindstone
_________________
For ein halbes Jahr wuste ich nich mahl wie man Proggramira schreibt. Jetzt bin ich einen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4650
Wohnort: ~/

BeitragVerfasst am: 07.06.2024, 18:15    Titel: Re: Benutzersprache ermitteln Antworten mit Zitat

Berkeley hat Folgendes geschrieben:
- Kann man von FreeBASIC aus auf die Standard C Library zurückgreifen ? Möglichst so, dass keiner, der die Quelltexte kompilieren will, irgendwelche Klimmzüge machen muss ?

Ich kann nicht aus eigener Erfahrung sprechen, aber Zugriff auf die C Standard Library sollte kein Problem sein.
https://www.freebasic-portal.de/befehlsreferenz/funktionen-der-c-standard-library-622.html
_________________
Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Windows-spezifische Fragen Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz