Wie kann ich die eingestellte Systemsprache herausfinden

MAC OSX spezifisches Forum
Beiträge, die plattformübergreifend sind, gehören ins 'Allgemein'-Forum.
funk.munich
Beiträge: 123
Registriert: 27.03.2006 09:45

Wie kann ich die eingestellte Systemsprache herausfinden

Beitrag 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
jamirokwai
Beiträge: 65
Registriert: 02.06.2008 16:10

Re: Wie kann ich die eingestellte Systemsprache herausfinden

Beitrag 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.
Benutzeravatar
Shardik
Beiträge: 738
Registriert: 25.01.2005 12:19

Re: Wie kann ich die eingestellte Systemsprache herausfinden

Beitrag 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
funk.munich
Beiträge: 123
Registriert: 27.03.2006 09:45

Re: Wie kann ich die eingestellte Systemsprache herausfinden

Beitrag von funk.munich »

Hi ihr beiden,

vielen Dank für die schnelle Hilfe. Damit klappt es einwandfrei.

Gracias,
Daniel
Benutzeravatar
michel51
Beiträge: 84
Registriert: 01.11.2005 20:00
Wohnort: Dornhan-Weiden

Re: Wie kann ich die eingestellte Systemsprache herausfinden

Beitrag 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.
michel51

Mac OS X Snow Leopard (10.6.8 ) Intel
PureBasic V 5.11(X64), V 5.21(x64)

Zum Lernen ist niemand zu alt.
Benutzeravatar
Shardik
Beiträge: 738
Registriert: 25.01.2005 12:19

Re: Wie kann ich die eingestellte Systemsprache herausfinden

Beitrag 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
Benutzeravatar
michel51
Beiträge: 84
Registriert: 01.11.2005 20:00
Wohnort: Dornhan-Weiden

Re: Wie kann ich die eingestellte Systemsprache herausfinden

Beitrag 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:
michel51

Mac OS X Snow Leopard (10.6.8 ) Intel
PureBasic V 5.11(X64), V 5.21(x64)

Zum Lernen ist niemand zu alt.
Antworten