Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Berkeley
Anmeldungsdatum: 13.05.2024 Beiträge: 46
|
Verfasst am: 06.06.2024, 18:08 Titel: Benutzersprache ermitteln |
|
|
- 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 |
|
|
grindstone
Anmeldungsdatum: 03.10.2010 Beiträge: 1230 Wohnort: Ruhrpott
|
Verfasst am: 06.06.2024, 18:28 Titel: Re: Benutzersprache ermitteln |
|
|
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 |
|
|
Berkeley
Anmeldungsdatum: 13.05.2024 Beiträge: 46
|
Verfasst am: 06.06.2024, 20:25 Titel: |
|
|
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 |
|
|
Berkeley
Anmeldungsdatum: 13.05.2024 Beiträge: 46
|
Verfasst am: 06.06.2024, 21:48 Titel: |
|
|
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 |
|
|
grindstone
Anmeldungsdatum: 03.10.2010 Beiträge: 1230 Wohnort: Ruhrpott
|
Verfasst am: 07.06.2024, 15:47 Titel: |
|
|
Berkeley hat Folgendes geschrieben: | Das "A" steht also wohl für "ASCII" und "W" für "wide-char". |
Richtig.
Gruß
grindstone _________________ For ein halbes Jahr wuste ich nich mahl wie man Proggramira schreibt. Jetzt bin ich einen! |
|
Nach oben |
|
|
nemored
Anmeldungsdatum: 22.02.2007 Beiträge: 4638 Wohnort: ~/
|
Verfasst am: 07.06.2024, 19:15 Titel: Re: Benutzersprache ermitteln |
|
|
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 |
|
|
|