none
Windows Sprache ermitteln RRS feed

  • Frage

  • Hallo,

    hab schon eine Weile gesucht aber nicht das richtige gefunden. Ich möchte einfach nur die Sprache des Betriebssystems ermitteln. Habe die Funktion GetLocaleInfo gefunden aber da gibt anscheinend Probleme bei Windows 7 mit der richtigen Ermittlung der Sprache und andere Regionsinformationen. Welche Möglichkeiten habe ich noch die Sprache des jeweiligen Betriebssystem(Windows) zu ermitteln?

    Sonntag, 22. August 2010 09:13

Antworten

Alle Antworten

  • So habe ich es gemacht:
    Public Shared Property Language() As LanguagesID
      Get
       Select Case Thread.CurrentThread.CurrentCulture.ToString
        Case "de-DE"
         Return LanguagesID.DE
        Case "en-EN"
         Return LanguagesID.EN
        Case Else
         Return LanguagesID.DE
       End Select
    
      End Get
      Set(ByVal CultureStyle As LanguagesID)
       Dim strCulture As String = "de-DE"
       Select Case CultureStyle
        Case LanguagesID.DE
         strCulture = "de-DE"
        Case LanguagesID.EN
         strCulture = "en-EN"
        Case Else
         strCulture = "de-DE"
       End Select
       Thread.CurrentThread.CurrentCulture = New CultureInfo(strCulture)
       Thread.CurrentThread.CurrentUICulture = New CultureInfo(strCulture)
      End Set
     End Property
    

    Vergiss nicht die

    Imports System.Globalization

    Gruss

    Torsten

    Sonntag, 22. August 2010 11:05
  • Hallo Torsten,

    ich sehe nicht, wie Du mit Deinem Code die Sprache des
    Betriebssystems ermittelst.
    Mit CurrentThread.CurrentCulture stellt man fest, mit welcher
    CultureInfo eben dieser CurrentThread läuft aber das hat
    nichts mit der Systemsprache zu tun.

    Beim folgenden Beispiel wird man auch auf einem "deutschen"
    Windows die Information "Englisch (USA)" bekommen.

    Imports System.Threading
    Imports System.Globalization
    Public Class Form1

        Public TH As Thread
        Private Sub Form1_Click _
                (ByVal sender As Object, _
                 ByVal e As System.EventArgs _
                ) Handles Me.Click

            TH = New Thread(AddressOf TSub)
            TH.Start()
        End Sub

        Public Sub TSub()
            TH.CurrentCulture = New CultureInfo("en-US")
            MsgBox(TH.CurrentCulture.DisplayName, MsgBoxStyle.Information)
        End Sub
    End Class

    Gruß aus St.Georgen
    Peter Götz
    www.gssg.de (mit VB-Tipps u. Beispielprogrammen)

    Sonntag, 22. August 2010 11:27
  • Bekomme es beim Get

    Select Case Thread.CurrentThread.CurrentCulture.ToString

    Ich habe es in einer unabhangigen Assembly eingebettet und nicht innerhalb eines Forms. In meinem Beispiel habe ich erstmal bei Englisch und Deutch aufgehört. In allen anderen Fällen übergibt er mir immer Deutsch...

    Muss natürlich erweitert werden.

    Sonntag, 22. August 2010 11:42
  • Soweit ich das mitbekommen habe gibt es unter Windows zwei Möglichkeiten das Betriebssystem auf Regionen/Länder und Sprachen einzustellen. Einmal bei der Installation, diese Info's kann man dann per "getLocaleInfo" aus der kernel32.dll herauslesen und die zweite Möglichkeit ist die Einstellung in der Systemsteuerung unter Region/Sprache. Also gibt es aus meiner Sicht zwei verschiedene Stellen wo ich die Ländereinstellungen abfragen kann, oder nicht. Und ich würde gern wissen ob ich die Einstellungen in der Systemsteuerung irgendwo herauslesen kann und wenn ja wo? Die Möglichkeit mit den Threads hab ich auch schon in Erwägung gezogen aber wie Peter schon sagte die Manipulation ist mir einfach zu groß.
    Montag, 23. August 2010 20:19
  • Hallo F.,

    Soweit ich das mitbekommen habe gibt es unter Windows zwei
    Möglichkeiten das Betriebssystem auf Regionen/Länder und
    Sprachen einzustellen. Einmal bei der Installation, diese Info's
    kann man dann per "getLocaleInfo" aus der kernel32.dll herauslesen
    und die zweite Möglichkeit ist die Einstellung in der Systemsteuerung
     unter Region/Sprache.
    Also gibt es aus meiner Sicht zwei verschiedene Stellen wo ich
    die Ländereinstellungen abfragen kann, oder nicht.

    Bei der Api-Funktion GetLocaleInfo()

        int GetLocaleInfo(
          LCID Locale,      // locale identifier
          LCTYPE LCType,    // information type
          LPTSTR lpLCData,  // information buffer
          int cchData       // size of buffer
          );

    bestimmt der erste Parameter (LCID Locale) die von der
    Funktion zurückgegebenen Werte:

        LCID Locale = LOCALE_SYSTEM_DEFAULT (2048)
            Ländereinstellung bei der Installation

        LCID Locale = LOCALE_USER_DEFAULT (1024)
            Ländereinstellung für den akt. angemeldeten Benutzer

    Gruß aus St.Georgen
    Peter Götz
    www.gssg.de (mit VB-Tipps u. Beispielprogrammen)

    Dienstag, 24. August 2010 11:29
  • die Sprache des Betriebssystems ermitteln.

    Hallo F,

    vielleicht passt ja .NET:

    CultureInfo.InstalledUICulture
    http://msdn.microsoft.com/de-de/library/system.globalization.cultureinfo.installeduiculture.aspx

     "Ruft die CultureInfo ab, die die mit dem Betriebssystem installierte Kultur darstellt."

    Diese Eigenschaft entspricht GetSystemDefaultUILanguage in der Windows-API:
    http://msdn.microsoft.com/en-us/library/dd318123(VS.85).aspx

     

    Dienstag, 24. August 2010 11:51
  • Es passt wie die Faust auf's Auge. Es ist in der Dokumentation zum Lokalisieren von Windows Forms Anwendungen etwas schlecht dargestellt weil dort immer nur vom "Thread" die Rede den man in der Kultur einstellen kann, es ist nirgends die Rede wie ich die im System eingestellten Vorgaben abfragen kann.

    Danke Euch allen für die schnellen Antworten.

    Donnerstag, 26. August 2010 19:00