none
DropDownListe mit Ländernamen in Deutsch RRS feed

  • 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

    Montag, 7. Dezember 2015 15:25

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


    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 ?

    Dienstag, 8. Dezember 2015 07:47
  • 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 Kultur

    Wenn 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

    Dienstag, 8. Dezember 2015 10:50
  • ...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

    Dienstag, 8. Dezember 2015 15:02
  • 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

    Dienstag, 8. Dezember 2015 15:17