Cómo obtener el nombre de país
-
01-10-2019 - |
Pregunta
He utilizado el código de abajo para obtener la lista de Cultivos Tipo, ¿hay una manera de cómo obtener sólo el nombre del país?
Gracias
static void Main(string[] args)
{
StringBuilder sb = new StringBuilder();
foreach (CultureInfo ci in CultureInfo.GetCultures(CultureTypes.SpecificCultures))
{
sb.Append(ci.DisplayName);
sb.AppendLine();
}
Console.WriteLine(sb.ToString());
Console.ReadLine();
}
Resultados de muestra:
Español (Puerto Rico)
Español (Estados Unidos)
Solución
Bueno, esta expresión regular parece hacer el trabajo en la mayoría de los casos:
var regex = new System.Text.RegularExpressions.Regex(@"([\w+\s*\.*]+\))");
foreach (var item in CultureInfo.GetCultures(CultureTypes.SpecificCultures))
{
var match = regex.Match(item.DisplayName);
string countryName = match.Value.Length == 0 ? "NA" : match.Value.Substring(0, match.Value.Length - 1);
Console.WriteLine(countryName);
}
Otros consejos
Puede utilizar la propiedad Nombre de la CultureInfo para construir un RegionInfo. A continuación, puede utilizar la propiedad DisplayName. Proveedores:
foreach (CultureInfo ci in CultureInfo.GetCultures(CultureTypes.SpecificCultures))
{
var ri = new RegionInfo(ci.Name);
Console.WriteLine(ri.DisplayName);
}
// Build your normal dictionary as container
Dictionary<string, string> countryNames = new Dictionary<string, string>();
foreach (CultureInfo ci in CultureInfo.GetCultures(CultureTypes.SpecificCultures))
{
RegionInfo ri = new RegionInfo(ci.Name);
// Check if the ISO language code is already in your collection
// Because you don't want double entries in a country box because we had to use the culture info
if (!countryNames.ContainsKey(ri.TwoLetterISORegionName))
{
countryNames.Add(ri.TwoLetterISORegionName.ToUpper(), ri.EnglishName);
}
}
// Code for dictionary to dropdownlist transform can be written with your personal preference for symantics
SelectList countryDropdown = new SelectList(countryNames.OrderBy(o => o.Value), "Key", "Value");
o listos para su uso sin comentarios:
Dictionary<string, string> countryNames = new Dictionary<string, string>();
foreach (CultureInfo ci in CultureInfo.GetCultures(CultureTypes.SpecificCultures))
{
RegionInfo ri = new RegionInfo(ci.Name);
if (!countryNames.ContainsKey(ri.TwoLetterISORegionName)) countryNames.Add(ri.TwoLetterISORegionName.ToUpper(), ri.EnglishName);
}
SelectList countryDropdown = new SelectList(countryNames.OrderBy(o => o.Value), "Key", "Value");
esto sería lo que busca:
foreach (CultureInfo ci in CultureInfo.GetCultures(CultureTypes.SpecificCultures))
{
sb.Append(ci.EnglishName);
sb.AppendLine();
}
You will need to use following namespaces
using System.Configuration;
using System.Globalization;
///
/// populate country name
/// </summary>
/// <param name="dropDown"></param>
public static void GetCountryNames(DropDownList dropDown)
{
Hashtable h = new Hashtable();
Dictionary<string, string> objDic = new Dictionary<string, string>();
foreach (CultureInfo ObjCultureInfo in CultureInfo.GetCultures(CultureTypes.SpecificCultures))
{
RegionInfo objRegionInfo = new RegionInfo(ObjCultureInfo.Name);
if (!objDic.ContainsKey(objRegionInfo.EnglishName))
{
objDic.Add(objRegionInfo.EnglishName, objRegionInfo.TwoLetterISORegionName.ToLower());
}
}
SortedList<string, string> sortedList = new SortedList<string, string>(objDic);
foreach (KeyValuePair<string, string> val in sortedList)
{
dropDown.Items.Add(new ListItem(val.Key, val.Key));
}
dropDown.Items.Insert(0, new ListItem("Select", "Select"));
dropDown.Items.Insert(1, new ListItem("Other Country", "Other"));
}
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow