Whidbey .Net 2.0 Custom Culture Example (Beta 2)
Here’s an example of how to create a custom culture in Whidbey. Its changed a bit from earlier versions, so this code is based on Beta 2 behavior. This should be what you see in RTM. J
This sample creates a custom culture with the name “en-US-shawn”, changes a couple things and then uses that culture to display that we did indeed get custom behavior. It then unregisters it. Copy the example to something like cultures.cs and then use
csc /r:sysglobl.dll cultures.cs
cultures.exe
Output is something like:
Data from our new culture:
en-US-shawn
Shawn's version of en-US
3/8/2005 17:33:50 PM (shawn)
Data from our new culture's parent:
en-US
English (United States)
3/8/2005 5:33 PM
This WILL NOT compile on previous prerelease versions, so be patient J I had questions though so wanted people to be able to see how the custom culture mechanism worked. If for some reason this culture doesn’t unregister, delete the %windir%globalizationen-us-shawn.nlp file by hand.
// This posting is provided "AS IS" with no warranties, and confers no rights. Use of included samples are subject to the terms specified at https://www.microsoft.com/ info/cpyright.htm
using System;
using System.Globalization;
// Example of creating a custom culture.
namespace cultures
{
public class mycultures
{
static void Main(string[] args)
{
// First we need a CultureAndRegionInfoBuilder
// Base it on en-US, add my name
CultureAndRegionInfoBuilder carib = new CultureAndRegionInfoBuilder(
"en-US-shawn", CultureAndRegionModifiers.None);
// Our parent is en-US, load those defaults
CultureInfo enUS = new CultureInfo("en-US");
carib.LoadDataFromCultureInfo(enUS);
carib.LoadDataFromRegionInfo(new RegionInfo("en-US"));
carib.Parent=enUS;
// Override a few things so we know we changed it
carib.CultureEnglishName = carib.CultureNativeName = "Shawn's version of en-US";
// Date time is a little more challenging to override.
DateTimeFormatInfo dtfi = new CultureInfo("en-US").DateTimeFormat;
dtfi.ShortTimePattern = "HH:mm:ss tt' (shawn)'";
carib.GregorianDateTimeFormat = dtfi;
// Register it
carib.Register();
// Now try to use it
Console.WriteLine("Data from our new culture:");
CultureInfo enUsShawn = new CultureInfo("en-US-shawn");
Console.WriteLine(enUsShawn.Name);
Console.WriteLine(enUsShawn.EnglishName);
Console.WriteLine(DateTime.Now.ToString("g", enUsShawn));
Console.WriteLine();
// Compare that to our parent
Console.WriteLine("Data from our new culture's parent:");
enUS = enUsShawn.Parent;
Console.WriteLine(enUS.Name);
Console.WriteLine(enUS.EnglishName);
Console.WriteLine(DateTime.Now.ToString("g", enUS));
// Now we're done with it
CultureAndRegionInfoBuilder.Unregister("en-US-shawn");
}
}
}
Comments
Anonymous
March 08, 2005
Whidbey .Net 2.0 Custom Culture ExampleAnonymous
March 08, 2005
CultureAndRegionInfoBuilder
CultureAndRegionInfoModifiers
well, looks a bit... ugly.Anonymous
March 09, 2005
Fortunately you only have to use the CultureAndRegionInfoBuilder once to get it onto a machine, so hopefully any "ugliness" doesn't have to be used often :)Anonymous
April 02, 2008
Thank's for the sample app. That's missing from the MSDN ;)Anonymous
April 29, 2008
I should mention (now) that I'd really prefer people to use the Microsoft Locale Builder tool if at all possible :) I think of locales kind of like fonts: if you want one you use a tool to build it and then install that on the machine.