Fragensteller
DropDownListe mit Ländernamen in Deutsch

Frage
-
Grüss Euch !
Ich suche einen Weg, eine Dropdownliste mit allen Ländernamen zu befüllen. Ich denke da an CultureInfo. Leider liefert der Code den ich gefunden habe die Länder in Englisch - sprich, ich schaffe es nicht die CultureInfo des Threads zu beeinflussen.
Hier mein Code :public void fillCountryList() { var oldCI = System.Threading.Thread.CurrentThread.CurrentCulture; System.Threading.Thread.CurrentThread.CurrentCulture = new CultureInfo("de-DE"); var cultures = CultureInfo.GetCultures(CultureTypes.AllCultures); var list = new List<string>(); foreach (var culture in cultures) { if ((culture.LCID != 127) && (!culture.IsNeutralCulture)) { var region = new RegionInfo(culture.LCID); if (!list.Contains(region.DisplayName)) { list.Add(region.DisplayName); } } } list.Sort(); foreach (var cty in list) { cboCountry.Items.Add(cty); } System.Threading.Thread.CurrentThread.CurrentCulture = oldCI; }
Liefert die Liste, aber eben in Englisch...
Wer hat mir da einen Tipp ?
Lieber Gruss
Peter
Alle Antworten
-
Hi Peter,
nimm DisplayName für die Anzeige, z.B. so:XAML:
<Window x:Class="WpfApplication1CS.Window14" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:local="clr-namespace:WpfApplication1CS" mc:Ignorable="d" Title="Window13" Height="300" Width="300"> <Window.Resources> <local:Window14VM x:Key="vm"/> </Window.Resources> <StackPanel DataContext="{Binding Source={StaticResource vm}}"> <ComboBox ItemsSource="{Binding View}"/> </StackPanel> </Window>
ViewModel dazu:
using System.Collections.ObjectModel; using System.ComponentModel; using System.Globalization; using System.Runtime.CompilerServices; using System.Windows; using System.Windows.Data; using System.Linq; namespace WpfApplication1CS { public class Window14VM { private CollectionViewSource cvs = new CollectionViewSource(); private ObservableCollection<string> col = new ObservableCollection<string>(); public ICollectionView View { get { if (cvs.Source == null) cvs.Source = from item in CultureInfo.GetCultures(CultureTypes.AllCultures) select item.DisplayName ; return cvs.View; } } } }
--
Viele Grüsse
Peter Fleischer (MVP, Partner)
Meine Homepage mit Tipps und Tricks
Kommas richtig setzen!
Schüler sagen, Lehrer haben es gut.
Schüler, sagen Lehrer, haben es gut- Bearbeitet Peter Fleischer Montag, 7. Dezember 2015 15:57
-
Guten Morgen Peter
Ja, geht auch...
Betonung auf auch :-)
Leider wird auch hier die OS Sprache verwendet um den DisplayName anzuzeigen - ist etwa das selbe Konstrukt wie mein Code.Alle Länder werden mit ihrem englischen Namen angezeigt -> Bild
Aus diesem Grund die Frage hier, wir bekomme ich die Namen auf Deutsch in die Combobox und zwar unabhängig von der OS Einstellung ?
-
Hi Peter,
so richtig verstanden habe ich Dein Ziel noch nicht. Es gibt 3 Eigenschaften:DisplayName - installierte .NET Sprache.
NativeName - in der 'CultureInfos' Sprache.
EnglishName - invariante KulturWenn also englisch installiert ist, dann bringt DisplayName auch die Anzeige in englisch. Ich verstehe nicht, warum der Anwender bei installiertem Englisch alle Übersetzungen in deutsch sehen muss. Entweder er arbeitet in der installierten Sprache, oder er bekommt alle Anzeigen im Original (NativeName) und wählt dann aus.
--
Viele Grüsse
Peter Fleischer (MVP, Partner)
Meine Homepage mit Tipps und Tricks
Kommas richtig setzen!
Schüler sagen, Lehrer haben es gut.
Schüler, sagen Lehrer, haben es gut -
...so richtig verstanden habe ich Dein Ziel noch nicht.
Da geht es Dir ähnlich wie mir :-) Der Kunde für den Ich arbeite hat eine bunte Mischung an Windows Installationen. Trotz allem möchte Er in dieser Art von Feld 'nur' deutsch Werte sehen.
Dies ist der Grund weshalb ich versuche unabhängig von der Client Sprache eine deutsche Länderliste zu erzeugen.
Gruss
Peter -
Hi Peter,
wenn es Dir nicht gelingt, den Kunden zur Vernunft zu bringen, weil er ja König ist und deshalb Unsinn fordern darf, bleibt Dir wirklich nur noch, eine Ressource mit den Länderbezeichnungen in deutsch dem Projekt hinzuzufügen.Üblich ist in solchen Szenarien, dass NativeName genutzt wird. Da sieht jeder Anwender in seiner Muttersprache den Culture-Eintrag. Das ist vor allem wichtig, wenn anhand der ausgewählten Culture die Oberfläche anzupassen ist, z.B. Dezimaltrenner. Außerdem ist immer zu berücksichtigen, dass es in vielen Ländern innerhalb des Landes unterschiedliche Kulturen gibt. Und nicht von jedem Anwender kann man verlangen, dass er deutsch spricht, obwohl es viele Deutsche gibt, die da anderer Meinung sind :-)
--
Viele Grüsse
Peter Fleischer (MVP, Partner)
Meine Homepage mit Tipps und Tricks
Kommas richtig setzen!
Schüler sagen, Lehrer haben es gut.
Schüler, sagen Lehrer, haben es gut