I've added a fun sample to my TechEd presentation Building International Applications with the .NET Framework: localization to Klingon.
To make this possible I've created a class EnterpriseCultureInfo that derives from CultureInfo. This way a EnterpriseCultureInfo object can be passed everywhere a CultureInfo is needed; e.g. setting the culture to the thread (CurrentUICulture property), or passing it as an argument of ToString() methods.
But there is one disadvantage of extending CultureInfo: CultureInfo requires passing a ISO-defined culture in the constructor. Because Klingon is not already defined with the .NET Framework, I've done a hack and set the culture of the base class to a valid value. I would prefer interfaces - the hack wouldn't be necessary if an interface ICultureInfo would be defined that is used instead of the CultureInfo class.
What makes the EnterpriseCulture different is allowing to set a extended culture. In my implementation, et-klingon and et-vulcano is allowed. In addition to that properties such as Name, DisplayName, EnglishName are overridden. Calendar information, time and number formatting could be defined, too.
In addition to the EnterpriseCulture class, a resource reader that supports Klingon is needed. My DBResourceReader class that I already mentioned in my previous post supports any language that is defined in the database.
In the database I've just added two Klingon words for the sample: "nuqneHdir" is Klingon's greeting. It is not really a "welcome", as such a meaning is not used with Klingon words. Instead this is the translation of "what do you want?" - Klingon's greeting. Goodbye is "Qapla'" in Klingon.
More words can be found in the online dictionary.