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! :allright: