Seite 1 von 1
Wie kann ich die eingestellte Systemsprache herausfinden
Verfasst: 04.05.2011 17:11
von funk.munich
Hi zusammen,
hat jemand ggf. einen Vorschlag wie ich unter MacOS die Systemsprache herausfinden kann per PureBasic?
Unter Windows konnte ich immer "GetLocaleInfo_" benutzen.
Danke im voraus,
Daniel
Re: Wie kann ich die eingestellte Systemsprache herausfinden
Verfasst: 04.05.2011 18:29
von jamirokwai
Hi Daniel,
ich hab' das mal so gemacht... Geht über API bestimmt eleganter

Auf meinem System gibt es ein "de" zurück, auf nem Englischen halt ein "en"...
Im englischen Forum gibt es auch gerade einen Thread mit API-Library:
http://www.purebasic.fr/english/viewtop ... 19&t=46243
Code: Alles auswählen
Procedure.s Get_MacOSX_Default(inwhat$, whattype$)
Define x,x$
x = RunProgram("/usr/bin/defaults", "read " + inwhat$ + " " + whattype$, "/usr/bin", #PB_Program_Open|#PB_Program_Read)
If x = 0 : ProcedureReturn "error" : EndIf
x$ = ""
While ProgramRunning(x)
x$ = x$ + ReadProgramString(x); Trim(" ", ReadProgramString(x))
Wend
CloseProgram(x)
ProcedureReturn x$
EndProcedure
LanguageCode$ = Get_MacOSX_Default("NSGlobalDomain", "AppleLocale")
Language$ = Left(LanguageCode$, 2)
Debug language$
Grüßle
J.
Re: Wie kann ich die eingestellte Systemsprache herausfinden
Verfasst: 04.05.2011 19:58
von Shardik
Mit API:
Code: Alles auswählen
ImportC ""
CFRelease(CFTypeRef.L)
CFStringGetCString(CFStringRef.L, *StringBuffer, BufferSize.L, CFStringEncoding.L)
KLGetCurrentKeyboardLayout(*KeyboardLayoutRef)
KLGetKeyboardLayoutProperty(KeyboardLayoutRef.L, PropertyTag.L, *PropertyValue)
EndImport
#kKLName = 5
Procedure.S ConvertCFStringIntoString(CFStringRef.L)
Protected String.S = Space(256)
CFStringGetCString(CFStringRef, @String, Len(String), 0)
CFRelease(CFStringRef)
ProcedureReturn Trim(String)
EndProcedure
Define LanguageName.S
If KLGetCurrentKeyboardLayout(@KeyboardLayoutRef) = 0
If KLGetKeyboardLayoutProperty(KeyboardLayoutRef, #kKLName, @LanguageNameRef) = 0
MessageRequester("Tastatur-Info", "Aktuell eingestellte Sprache: " + ConvertCFStringIntoString(LanguageNameRef))
EndIf
EndIf
Re: Wie kann ich die eingestellte Systemsprache herausfinden
Verfasst: 05.05.2011 13:30
von funk.munich
Hi ihr beiden,
vielen Dank für die schnelle Hilfe. Damit klappt es einwandfrei.
Gracias,
Daniel
Re: Wie kann ich die eingestellte Systemsprache herausfinden
Verfasst: 05.05.2011 19:10
von michel51
Shardik hat geschrieben:Mit API:
Code: Alles auswählen
ImportC ""
CFRelease(CFTypeRef.L)
CFStringGetCString(CFStringRef.L, *StringBuffer, BufferSize.L, CFStringEncoding.L)
KLGetCurrentKeyboardLayout(*KeyboardLayoutRef)
KLGetKeyboardLayoutProperty(KeyboardLayoutRef.L, PropertyTag.L, *PropertyValue)
EndImport
#kKLName = 5
Procedure.S ConvertCFStringIntoString(CFStringRef.L)
Protected String.S = Space(256)
CFStringGetCString(CFStringRef, @String, Len(String), 0)
CFRelease(CFStringRef)
ProcedureReturn Trim(String)
EndProcedure
Define LanguageName.S
If KLGetCurrentKeyboardLayout(@KeyboardLayoutRef) = 0
If KLGetKeyboardLayoutProperty(KeyboardLayoutRef, #kKLName, @LanguageNameRef) = 0
MessageRequester("Tastatur-Info", "Aktuell eingestellte Sprache: " + ConvertCFStringIntoString(LanguageNameRef))
EndIf
EndIf
Hallo Shardik,
wenn ich diesen Code in >unicode< compiliere, dann bekomme ich asiatische Schriftzeichen als Antwort.
In >ascii< funktioniert es einwandfrei.
Re: Wie kann ich die eingestellte Systemsprache herausfinden
Verfasst: 07.05.2011 16:52
von Shardik
michel51 hat geschrieben:Hallo Shardik,
wenn ich diesen Code in >unicode< compiliere, dann bekomme ich asiatische Schriftzeichen als Antwort.
In >ascii< funktioniert es einwandfrei.
Hallo michel51,
Danke für den Hinweis! Ich habe das Beispiel jetzt so angepaßt, daß es
sowohl im ASCII- als auch im Unicode-Modus korrekt funktioniert:
Code: Alles auswählen
ImportC ""
CFRelease(CFTypeRef.L)
CFStringGetCString(CFStringRef.L, *StringBuffer, BufferSize.L, CFStringEncoding.L)
KLGetCurrentKeyboardLayout(*KeyboardLayoutRef)
KLGetKeyboardLayoutProperty(KeyboardLayoutRef.L, PropertyTag.L, *PropertyValue)
EndImport
#kCFStringEncodingMacRoman = 0
#kCFStringEncodingUnicode = $100
#kKLName = 5
Procedure.S ConvertCFStringIntoString(CFStringRef.L)
Protected Encoding.L
Protected String.S = Space(256)
If #PB_Compiler_Unicode
Encoding = #kCFStringEncodingUnicode
Else
Encoding = #kCFStringEncodingMacRoman
EndIf
CFStringGetCString(CFStringRef, @String, Len(String), Encoding)
CFRelease(CFStringRef)
ProcedureReturn Trim(String)
EndProcedure
Define LanguageName.S
If KLGetCurrentKeyboardLayout(@KeyboardLayoutRef) = 0
If KLGetKeyboardLayoutProperty(KeyboardLayoutRef, #kKLName, @LanguageNameRef) = 0
MessageRequester("Tastatur-Info", "Aktuell eingestellte Sprache: " + ConvertCFStringIntoString(LanguageNameRef))
EndIf
EndIf
Re: Wie kann ich die eingestellte Systemsprache herausfinden
Verfasst: 08.05.2011 11:12
von michel51
Shardik hat geschrieben:
Hallo michel51,
Danke für den Hinweis! Ich habe das Beispiel jetzt so angepaßt, daß es
sowohl im ASCII- als auch im Unicode-Modus korrekt funktioniert
Hallo Shardik,
Danke! So funktioniert. Guter Job!
