Benutzer mit den meisten Antworten
internationalisierte Landes- und Sprachbezeichnungen aus Windows ermitteln

Frage
-
hallo,
spätestens seit Windows 8 kann man ja sämtliche Landes- und Spracheinstellungen im Betriebssystem vornehmen. Wenn ich Windows dabei z.B. auf französisch geschaltet habe, bekomme ich auch meine Auswahl von Ländern und Sprachen in französisch präsentiert. Diese in Windows vorhandenen Informationen möchte ich nun vom Programm her nutzen, und zwar in folgender Form:
1. Eine Funktion, der ich einen ISO-Ländercode sowie die gewünschte Sprache (als ISO-Code) übergebe und die mir den Landesnamen in eben dieser Sprache zurück liefert. Func1("DE","de") würde dann "Deutschland" liefern usw.
2. Eine Funktion, der ich einen ISO-Sprachcode sowie die gewünschte Sprache (auch als ISO Code) übergebe und die mir die Sprachbezeichnung in eben dieser Sprache zurück liefert. Func2("de","de") würde dann "deutsch" liefern usw.
Wie könnte ich das am Besten machen?
Gruß,
Winfried
Antworten
-
Ich befürchte das das nicht gehen wird. Siehe hier. Mehr habe ich dazu auch nicht gefunden.
Windows speichert zwar alle möglichen Zeichenfolgen im System, aber wo diese nun liegen und wie man an diese dan heran kommt scheint ein recht großes Geheimnis zu sein. Ich wollte mal die Beschriftungen diverser Standartbuttons auslesen (OK, Abbrechen, Wiederhohlen, ...). Gefunden habe ich aber auch nichts.
Zum setzen des Cultures im Thread, ich habe es auch mit dem neu erstellen eines Threads probiert. Ging nicht.
Du könntest höchstens noch nachsehen, ob System-Dateien wie User32.dll (und deren MUI-Dateien) diese Strings abspeichern. Aber ich bezweifle sehr stark, das es sich leistungstechnisch lohnt.
Koopakiller [kuːpakɪllɐ] (Tom Lambert)
Webseite |
Code Beispiele |
Facebook |
Twitter |
Snippets
C# ↔ VB.NET Konverter
Markiert bitte beantwortende Posts als Antwort und bewertet Beiträge. Danke.- Als Antwort markiert WiWo Dienstag, 29. Oktober 2013 06:52
Alle Antworten
-
Hallo,
ich bin mir nicht ganz sicher ob ich verstanden habe, was du vor hast.Du willst eine Methode erstellen, die den Namen eines Landes(bzw. die dort gesprochene Sprache) in einer bestimmten Sprache ausgibt, richtig?
Ich denke nicht, das das so ohne weiteres Möglich ist. Einige Infos kann man aus den CultureInfos abfragen, aber auch nicht alles.Dim ciDE As New CultureInfo("de") Dim ciFR As New CultureInfo("fr") Dim ciEN As New CultureInfo("en") Console.WriteLine(ciDE.Name) Console.WriteLine(ciDE.NativeName) Console.WriteLine(ciDE.EnglishName) Console.WriteLine(ciDE.DisplayName)
Für alles andere wirst du wohl auf die ganz normalen Lokalisierungstechniken zurück greifen müssen.
http://msdn.microsoft.com/en-us/magazine/cc163609.aspx
Dann könntest du einfach anhand der String-Codes (Bsp.: "de") die Daten abfragen.
Koopakiller [kuːpakɪllɐ] (Tom Lambert)
Webseite |
Code Beispiele |
Facebook |
Twitter |
Snippets
C# ↔ VB.NET Konverter
Markiert bitte beantwortende Posts als Antwort und bewertet Beiträge. Danke. -
ich hab mich wohl unklar ausgedrückt.
Mit meinem auf deutsch eingestellten Windows kann ich per RegionInfo für alle Länder der Welt die Namen wahlweise in Landessprache, deutsch oder englisch ermitteln. Mit CultureInfo dasselbe für die Bezeichnung der Sprache. Das ist mir klar. Ich möchte aber auch wissen, wie auf dänisch "Deutschland" bzw. "Deutsch" heißt. Die Informationen dürften irgendwo in Windows schlummern, denn wenn ich Windows auf Dänisch umschalte und dann neu starte, bekomme ich in der Property "DisplayName" von RegionInfo und CultureInfo genau das zu sehen: "Tyskland" bzw. "Tysk". Das Umstellen von CurrenThread.CurrentCulture und CurrentUICulture reicht leider nicht aus. Ich suche jetzt einfach einen Weg, wie ich sonst noch (also ohne das ganze Windows umstellen zu müssen) an die Namen komme.
Gruß,
Winfried
-
Ich befürchte das das nicht gehen wird. Siehe hier. Mehr habe ich dazu auch nicht gefunden.
Windows speichert zwar alle möglichen Zeichenfolgen im System, aber wo diese nun liegen und wie man an diese dan heran kommt scheint ein recht großes Geheimnis zu sein. Ich wollte mal die Beschriftungen diverser Standartbuttons auslesen (OK, Abbrechen, Wiederhohlen, ...). Gefunden habe ich aber auch nichts.
Zum setzen des Cultures im Thread, ich habe es auch mit dem neu erstellen eines Threads probiert. Ging nicht.
Du könntest höchstens noch nachsehen, ob System-Dateien wie User32.dll (und deren MUI-Dateien) diese Strings abspeichern. Aber ich bezweifle sehr stark, das es sich leistungstechnisch lohnt.
Koopakiller [kuːpakɪllɐ] (Tom Lambert)
Webseite |
Code Beispiele |
Facebook |
Twitter |
Snippets
C# ↔ VB.NET Konverter
Markiert bitte beantwortende Posts als Antwort und bewertet Beiträge. Danke.- Als Antwort markiert WiWo Dienstag, 29. Oktober 2013 06:52
-
Hallo Tom,
bei dem von Dir angegebenen Forumseintrag steht's wohl 2:2 zwischen denen, die sagen es geht mit Currenthread und denen, die sagen, es geht nicht. Leider hat keiner gesagt, was für ein Windows und was für ein Framework er einsetzt.
Ich hab's jetzt erstmal aufgegeben, denn letztlich geht es nur um die Ergänzung meiner für alles mögliche verwendeten Länderdatenbank. Es ist halt mühselig, im Internet nach geeigneten Quellen für sowas zu suchen und dann jeweils Import-Programme zu schreiben. Außerdem sind die in Windows selbst verankerten Dinge meiner Erfahrung nach auch aktuell und politisch korrekt, deshalb meine Versuche hier.
Für ein paar Länder werde ich wohl tatsächlich die Länderumstellung in Windows machen und dann einen kompletten Durchlauf aller Culturecodes. Ich muss halt nur höllisch aufpassen, dass ich mich selbst nicht dabei aussperre, weil ich im Windows nicht mehr lesen kann, wie ich wieder auf deutsch zurückschalten muss. Das ist mir mal mit Windows7 Ultimate passiert; ich hatte grad eine Chinesin kennengelernt und wollte damit punkten, dass mein PC auch chinesisch kann.
Gruß,
Winfried