Files
linqpad/CultureInfo with examples.linq
T

205 lines
8.7 KiB
C#

<Query Kind="Program">
<Reference>&lt;ProgramFilesX64&gt;\Microsoft SDKs\Azure\.NET SDK\v2.9\bin\plugins\Diagnostics\Newtonsoft.Json.dll</Reference>
<Reference>&lt;RuntimeDirectory&gt;\System.ComponentModel.Composition.dll</Reference>
<Reference>&lt;RuntimeDirectory&gt;\System.ComponentModel.dll</Reference>
<Reference>&lt;RuntimeDirectory&gt;\System.Net.dll</Reference>
<Reference>&lt;RuntimeDirectory&gt;\System.Net.Http.dll</Reference>
<NuGetReference>Amazon.Lambda.S3Events</NuGetReference>
<NuGetReference>AWSSDK.Core</NuGetReference>
<NuGetReference>AWSSDK.S3</NuGetReference>
<NuGetReference>TimeZoneNames</NuGetReference>
<Namespace>Amazon</Namespace>
<Namespace>Amazon.Auth.AccessControlPolicy</Namespace>
<Namespace>Amazon.Auth.AccessControlPolicy.ActionIdentifiers</Namespace>
<Namespace>Amazon.Internal</Namespace>
<Namespace>Amazon.Lambda.S3Events</Namespace>
<Namespace>Amazon.MissingTypes</Namespace>
<Namespace>Amazon.Runtime</Namespace>
<Namespace>Amazon.Runtime.CredentialManagement</Namespace>
<Namespace>Amazon.Runtime.CredentialManagement.Internal</Namespace>
<Namespace>Amazon.Runtime.EventStreams</Namespace>
<Namespace>Amazon.Runtime.EventStreams.Internal</Namespace>
<Namespace>Amazon.Runtime.Internal</Namespace>
<Namespace>Amazon.Runtime.Internal.Auth</Namespace>
<Namespace>Amazon.Runtime.Internal.Settings</Namespace>
<Namespace>Amazon.Runtime.Internal.Transform</Namespace>
<Namespace>Amazon.Runtime.Internal.Util</Namespace>
<Namespace>Amazon.Runtime.SharedInterfaces</Namespace>
<Namespace>Amazon.Runtime.SharedInterfaces.Internal</Namespace>
<Namespace>Amazon.S3</Namespace>
<Namespace>Amazon.S3.Encryption</Namespace>
<Namespace>Amazon.S3.Encryption.Internal</Namespace>
<Namespace>Amazon.S3.Internal</Namespace>
<Namespace>Amazon.S3.IO</Namespace>
<Namespace>Amazon.S3.Model</Namespace>
<Namespace>Amazon.S3.Model.Internal.MarshallTransformations</Namespace>
<Namespace>Amazon.S3.Transfer</Namespace>
<Namespace>Amazon.S3.Util</Namespace>
<Namespace>Amazon.Util</Namespace>
<Namespace>Amazon.Util.Internal</Namespace>
<Namespace>Amazon.Util.Internal.PlatformServices</Namespace>
<Namespace>Newtonsoft.Json</Namespace>
<Namespace>Newtonsoft.Json.Converters</Namespace>
<Namespace>Newtonsoft.Json.Linq</Namespace>
<Namespace>Newtonsoft.Json.Schema</Namespace>
<Namespace>Newtonsoft.Json.Serialization</Namespace>
<Namespace>System</Namespace>
<Namespace>System.ComponentModel.Composition</Namespace>
<Namespace>System.ComponentModel.Composition.Hosting</Namespace>
<Namespace>System.ComponentModel.Composition.Primitives</Namespace>
<Namespace>System.ComponentModel.Composition.ReflectionModel</Namespace>
<Namespace>System.Diagnostics</Namespace>
<Namespace>System.Diagnostics.Tracing</Namespace>
<Namespace>System.Globalization</Namespace>
<Namespace>System.IO.Compression</Namespace>
<Namespace>System.Net.Http</Namespace>
<Namespace>System.Net.Http.Headers</Namespace>
<Namespace>System.Numerics</Namespace>
<Namespace>ThirdParty.BouncyCastle.Asn1</Namespace>
<Namespace>ThirdParty.BouncyCastle.Asn1.Utilities</Namespace>
<Namespace>ThirdParty.BouncyCastle.Math</Namespace>
<Namespace>ThirdParty.BouncyCastle.OpenSsl</Namespace>
<Namespace>ThirdParty.BouncyCastle.Utilities.IO.Pem</Namespace>
<Namespace>ThirdParty.Ionic.Zlib</Namespace>
<Namespace>ThirdParty.Json.LitJson</Namespace>
<Namespace>ThirdParty.MD5</Namespace>
<Namespace>TimeZoneNames</Namespace>
</Query>
void Main()
{
var currentCulture = System.Threading.Thread.CurrentThread.CurrentCulture;
// Get server DateTime.
DateTime date = DateTime.Now;
var amount = 12345.67M;
// Get a list of all Cultures
List<CultureInfo> cultures = CultureInfo.GetCultures(CultureTypes.SpecificCultures)
//.Where(ci => ci.Name == "en-MW")
.ToList();
// Add the Cultures to an ArrayList so we can sort them Alphabetically by name.
List<CultureData> cultureList = new List<CultureData>();
foreach (CultureInfo culture in cultures)
{
System.Threading.Thread.CurrentThread.CurrentCulture = culture;
RegionInfo regionInfo = default(RegionInfo);
if (culture.LCID != 4096 && !culture.Equals(CultureInfo.InvariantCulture))
{
regionInfo = new RegionInfo(culture.LCID);
}
string pattern = null;
switch (culture.NumberFormat.CurrencyPositivePattern)
{
case 0:
pattern = "{0}{1:N" + culture.NumberFormat.CurrencyDecimalDigits + "}";
break;
case 1:
pattern = "{1:N" + culture.NumberFormat.CurrencyDecimalDigits + "}{0}";
break;
case 2:
pattern = "{0} {1:N" + culture.NumberFormat.CurrencyDecimalDigits + "}";
break;
case 3:
pattern = "{1:N" + culture.NumberFormat.CurrencyDecimalDigits + "} {0}";
break;
}
cultureList.Add(new CultureData
{
EnglishName = culture.EnglishName,
Name = culture.Name,
Details = new CultureDetails
{
ShortDate_Format = culture.DateTimeFormat.ShortDatePattern,
ShortDate_Example = date.ToShortDateString(),
LongDate_Format = culture.DateTimeFormat.LongDatePattern,
LongDate_Example = date.ToLongDateString(),
ShortTime_Format = culture.DateTimeFormat.ShortTimePattern,
ShortTime_Example = date.ToShortTimeString(),
LongTime_Format = culture.DateTimeFormat.LongTimePattern,
LongTime_Example = date.ToLongTimeString(),
Currency_EnglishName = regionInfo?.CurrencyEnglishName ?? string.Empty,
Currency_NativeName = regionInfo?.CurrencyNativeName ?? string.Empty,
Currency_Format = pattern,
Currency_Example = string.Format(culture, "{0:C}", amount),
Currency_ExampleNeg = string.Format(culture, "{0:C}", (amount * -1)),
Currency_ExampleAlt = string.Format(culture, "{0:c}", amount),
Currency_ExampleAltNeg = string.Format(culture, "{0:C}", (amount * -1)),
Percentage_Format = $"{{{culture.NumberFormat.PercentPositivePattern}{culture.NumberFormat.PercentDecimalSeparator}{culture.NumberFormat.PercentDecimalDigits}:P}}",
Percentage_Symbol = culture.NumberFormat.PercentSymbol,
Percentage_Example = string.Format(culture, "{0:P}", .333)
},
MonthNames = MonthNames(culture),
// TimeZones = TimeZones(currentCulture)
});
}
// Sort Cultures
//cultureList.Sort(new StringComparer());
cultureList
//.Where(l => l.Details.Percentage_Symbol != "%")
.OrderBy(c => c.EnglishName)
//.Where(c => c.EnglishName.Contains("Bermuda"))
.Dump(nameof(cultureList));
currentCulture = CultureInfo.GetCultures(CultureTypes.SpecificCultures).FirstOrDefault(c => c.EnglishName == "English (United States)");
System.Threading.Thread.CurrentThread.CurrentCulture = currentCulture;
}
class CultureDetails
{
public string ShortDate_Format { get; set; }
public string ShortDate_Example { get; set; }
public string LongDate_Format { get; set; }
public string LongDate_Example { get; set; }
public string ShortTime_Format { get; set; }
public string ShortTime_Example { get; set; }
public string LongTime_Format { get; set; }
public string LongTime_Example { get; set; }
public string Currency_EnglishName { get; set; }
public string Currency_NativeName { get; set; }
public string Currency_Format { get; set; }
public string Currency_Example { get; set; }
public string Currency_ExampleNeg { get; set; }
public string Currency_ExampleAlt { get; set; }
public string Currency_ExampleAltNeg { get; set; }
public string Percentage_Format { get; set; }
public string Percentage_Symbol { get; set; }
public string Percentage_Example { get; set; }
}
class CultureData
{
public string EnglishName { get; set; }
public string Name { get; set; }
public IDictionary<int, string> MonthNames { get; set; }
public CultureDetails Details { get; set; }
public IEnumerable<TimeZoneInfo> TimeZones { get; set; }
}
public IDictionary<int, string> MonthNames(CultureInfo culture)
{
return Enumerable.Range(1, 12).ToList()
.Select(mm => new { Key = mm, Value = culture.DateTimeFormat.GetMonthName(mm) })
.ToDictionary(item => item.Key, item => item.Value);
}
public IEnumerable<TimeZoneInfo> TimeZones(CultureInfo culture)
{
return TimeZoneInfo.GetSystemTimeZones();
}
public void TimeZoneList(CultureInfo culture)
{
TimeZoneInfo.GetSystemTimeZones()
.SelectMany(tzi => new[] {
TZNames.GetAbbreviationsForTimeZone(tzi.Id, culture.Name).Daylight != TZNames.GetAbbreviationsForTimeZone(tzi.Id, culture.Name).Standard
? new { Key = tzi.Id.Replace("Standard", "Daylight"), Value = TZNames.GetAbbreviationsForTimeZone(tzi.Id, culture.Name).Daylight }
: new { Key = tzi.Id, Value = TZNames.GetAbbreviationsForTimeZone(tzi.Id, culture.Name).Daylight },
new { Key = tzi.Id, Value = TZNames.GetAbbreviationsForTimeZone(tzi.Id, culture.Name).Standard }})
.GroupBy(x => x.Key)
.Select(g => g.First())
.ToDictionary(item => item.Key, item => item.Value)
.OrderBy(item => item.Key)
.Dump();
}