<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.msdn.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>I'm not a Klingon (&lt;span style="font-family:pIqaD,code2000"&gt; &lt;/span&gt;) : Custom Cultures / Locales / CultureInfo</title><link>http://blogs.msdn.com/shawnste/archive/tags/Custom+Cultures+_2F00_+Locales+_2F00_+CultureInfo/default.aspx</link><description>Tags: Custom Cultures / Locales / CultureInfo</description><dc:language>en-US</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>SetLocaleInfo() is horrid, don't use it!</title><link>http://blogs.msdn.com/shawnste/archive/2009/11/06/setlocaleinfo-is-horrid-don-t-use-it.aspx</link><pubDate>Fri, 06 Nov 2009 17:54:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9918711</guid><dc:creator>shawnste</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/shawnste/comments/9918711.aspx</comments><wfw:commentRss>http://blogs.msdn.com/shawnste/commentrss.aspx?PostID=9918711</wfw:commentRss><description>&lt;P&gt;I just ran into a bug with SetLocaleInfo() use, and it pretty much reminded me that SetLocaleInfo() stinks.&amp;nbsp; &lt;A href="http://blogs.msdn.com/michkap/archive/2005/04/23/411074.aspx" mce_href="http://blogs.msdn.com/michkap/archive/2005/04/23/411074.aspx"&gt;Michael&lt;/A&gt; said it years ago and it's still true.&lt;/P&gt;
&lt;P&gt;The only thing it's useful for is a "Regional and Language Options" type app, and there's already one of those in the control panel :)&amp;nbsp;&amp;nbsp; Some apps try to call SetLocaleInfo() to set some behavior, and then call the date/time APIs or whatever.&amp;nbsp; One app changed the currency symbol while it ran reports.&amp;nbsp; Problem is that SetLocaleInfo() changes the user preferences for every app in the user account.&amp;nbsp; Now the poor user's going to be running some report or something and they're records will be formatted wrong.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;Some apps try to "fix" the setting, and change it only momentarily, then change it back.&amp;nbsp; Now the other app will have a couple odd results in the middle of mostly-correct results, and it'll be nearly impossible for them to figure out why it doesn't work.&amp;nbsp; SetLocaleInfo() also makes things slow because apps have to reload their settings all the time.&amp;nbsp; The app that's using SetLocaleInfo() needs to seriously wonder what happens if another app did the same thing and called SetLocaleInfo() right after you did.&amp;nbsp; Obviously that wouldn't be what you'd expect, so please don't do it to everyone else.&lt;/P&gt;
&lt;P&gt;Anyway, don't use SetLocaleInfo().&amp;nbsp; If there's some limitation you're trying to work around by calling SetLocaleInfo(), let me know.&lt;/P&gt;
&lt;P&gt;-Shawn&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9918711" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/shawnste/archive/tags/Custom+Cultures+_2F00_+Locales+_2F00_+CultureInfo/default.aspx">Custom Cultures / Locales / CultureInfo</category></item><item><title>Missing International Setting Registry Key?</title><link>http://blogs.msdn.com/shawnste/archive/2009/09/29/missing-international-setting-registry-key.aspx</link><pubDate>Tue, 29 Sep 2009 21:41:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9900930</guid><dc:creator>shawnste</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/shawnste/comments/9900930.aspx</comments><wfw:commentRss>http://blogs.msdn.com/shawnste/commentrss.aspx?PostID=9900930</wfw:commentRss><description>&lt;P&gt;Some Zune users ran into a strange problem &lt;A href="http://forums.zune.net/2/3/518796/ShowPost.aspx"&gt;http://forums.zune.net/2/3/518796/ShowPost.aspx&lt;/A&gt;&amp;nbsp;and it seems like the Nation Value in HKEY_CURRENT_USER\Control Panel\International\Geo isn't there on some Windows XP machines.&amp;nbsp; That seems really wierd to me because if the International key is missing I'd expect odd behavior from the machine.&amp;nbsp; We get the user locale from there, so that's not particularly good.&amp;nbsp; For Zune it seems like&amp;nbsp;the missing key&amp;nbsp;causes a log-on problem with a "Zune can't sign in: this functionality is not available in your Region" because GetUserGeoId() ended up failing.&lt;/P&gt;
&lt;P&gt;Anyway, odd user problems because of a missing HKEY_CURRENT_USER\Control Panel\International key can be fixed by adding HKEY_CURRENT_USER\Control Panel\International\Geo through regedit.&amp;nbsp; (Or if it's a permissions problem, delete the key and readd it).&amp;nbsp; Of course editing the registry can mess up your machine and all that.&amp;nbsp;&amp;nbsp;If you run the&amp;nbsp;Regional and Language Options Control Panel you can reset your settings to the correct values and apply (I usually change to something else and them back to make sure it sees a change).&lt;/P&gt;
&lt;P&gt;How did the key get missing anyway?&amp;nbsp; That's a really good question, if you know please tell me!&amp;nbsp; In at least one case it seems the OEM image may not have had the key, which is kind of bizarre.&amp;nbsp; Maybe the out-of-box-experience got skipped or something.&amp;nbsp; (The one that asks you where you live).&amp;nbsp; Maybe a registry "cleaner" mangled the key or maybe something else did.&amp;nbsp; We've seen cases where an enterprise installation messes with these keys, but usually those are pretty rare.&amp;nbsp; Generally it is not a good idea to change these keys yourself, intl.cpl provides a way to change it, and it supports xml config files too: &lt;A href="http://blogs.msdn.com/shawnste/archive/2007/04/12/configuring-international-settings-from-the-command-line.aspx"&gt;http://blogs.msdn.com/shawnste/archive/2007/04/12/configuring-international-settings-from-the-command-line.aspx&lt;/A&gt;&amp;nbsp; In the future we'd like to remove our dependency on some of the stuff in this key, so don't be suprised if it changes in future versions.&lt;/P&gt;
&lt;P&gt;- Shawn&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9900930" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/shawnste/archive/tags/Custom+Cultures+_2F00_+Locales+_2F00_+CultureInfo/default.aspx">Custom Cultures / Locales / CultureInfo</category></item><item><title>What is Title Case?</title><link>http://blogs.msdn.com/shawnste/archive/2009/08/18/what-is-title-case.aspx</link><pubDate>Tue, 18 Aug 2009 20:30:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9874351</guid><dc:creator>shawnste</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/shawnste/comments/9874351.aspx</comments><wfw:commentRss>http://blogs.msdn.com/shawnste/commentrss.aspx?PostID=9874351</wfw:commentRss><description>&lt;P&gt;Disclaimer: I'm not an English teacher (that's my mom), so I'm sure my description of title casing in English probably has exceptions/variations.&lt;/P&gt;
&lt;P&gt;Title casing has an interesting history in computer programming.&amp;nbsp; Programmers like to use CamelCase to make variable names more readable, and, particularly amongst developers native to some languages, there's an idea that title casing is interesting, such as in String.ToTitleCase(), and in Windows 7, LCMapString(LCMAP_TITLECASE).&amp;nbsp; Most title casing algorythms are linguistically bad, even in English.&amp;nbsp; For other languages it's worse.&lt;/P&gt;
&lt;P&gt;ToTitleCase() takes a very simple approach to title casing.&amp;nbsp; Maybe in the future it'll be smarter, but for now it just uppercases the first letter in a group of letters, and tries to pay attention to non-letters and word breaks.&amp;nbsp; It also tries to keep acronyms all upper-case.&lt;/P&gt;
&lt;P&gt;Even in English this is a simplistic approach.&amp;nbsp; The title of this post is "What is Title Case?"&amp;nbsp; Is is supposed to be lower case, but ToTitleCase() would mess it up.&amp;nbsp; Additionally unexpected word breaks or punctuation could trick the algorithm.&amp;nbsp; Even the acronym test isn't complete since it just expects all-upper case&amp;nbsp;and sometimes acronyms keep the lower case of the full title.&amp;nbsp; Also it messess up names like DiSilva or McConnell.&amp;nbsp; Contractions can also be messed up.&lt;/P&gt;
&lt;P&gt;Outside of English, ToTitleCase() rapidly gets silly.&amp;nbsp; In English we&amp;nbsp;capitalize everything except articles, short prepositions and some other short words.&amp;nbsp;&amp;nbsp;In German it's just like a normal sentence, with only nouns getting capitalized, so the English slightly over-eager capitilization behavior becomes very over-eager.&amp;nbsp; Other languages also can have letters before the main word, eg: l'État, so the ToTitleCase rules can mess&amp;nbsp;up those words as well.&lt;/P&gt;
&lt;P&gt;And then there're scripts/languages that don't even have an upper/lower case distinction, so&amp;nbsp;ToTitleCase gets pointless.&lt;/P&gt;
&lt;P&gt;Anyway, use care when using ToTitleCase().&amp;nbsp; It might work&amp;nbsp;in some cases, but don't expect it to work&amp;nbsp;linguistically, particularly&amp;nbsp;globally, particularly in non-English cases.&amp;nbsp; Also maybe we'll get smarter and figure out a more correct way to do it in the future.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;-Shawn&amp;nbsp;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9874351" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/shawnste/archive/tags/System.Text/default.aspx">System.Text</category><category domain="http://blogs.msdn.com/shawnste/archive/tags/Custom+Cultures+_2F00_+Locales+_2F00_+CultureInfo/default.aspx">Custom Cultures / Locales / CultureInfo</category><category domain="http://blogs.msdn.com/shawnste/archive/tags/sorting/default.aspx">sorting</category></item><item><title>Locale Builder and Two Letter ISO name and Three Letter Windows Language Name</title><link>http://blogs.msdn.com/shawnste/archive/2009/05/14/locale-builder-and-two-letter-iso-name-and-three-letter-windows-language-name.aspx</link><pubDate>Fri, 15 May 2009 03:22:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9617430</guid><dc:creator>shawnste</dc:creator><slash:comments>4</slash:comments><comments>http://blogs.msdn.com/shawnste/comments/9617430.aspx</comments><wfw:commentRss>http://blogs.msdn.com/shawnste/commentrss.aspx?PostID=9617430</wfw:commentRss><description>&lt;P&gt;When you use the Microsoft&amp;nbsp;Locale Builder tool to build a custom locale, it asks for a lot of fields.&amp;nbsp; Two may not be obvious:&lt;/P&gt;
&lt;P&gt;The Two Letter ISO Language name is permitted to be 3 letters for locales that don't have a 2 letter code (eg: haw for Hawaiian).&amp;nbsp; &lt;/P&gt;
&lt;P&gt;The Three Letter Windows Language Name is mostly used for in-box locales for things having to do with our build process, so you can pretty much pick anything.&amp;nbsp; Mostly I just use the ISO code, but note that Windows tries to keep this value unique.&amp;nbsp; Note:&amp;nbsp; Do NOT use this 3 letter windows code in your application, instead use the ISO standard codes.&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9617430" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/shawnste/archive/tags/Custom+Cultures+_2F00_+Locales+_2F00_+CultureInfo/default.aspx">Custom Cultures / Locales / CultureInfo</category></item><item><title>Cheating to UNinstall Custom Cultures / Locales</title><link>http://blogs.msdn.com/shawnste/archive/2009/05/14/cheating-to-uninstall-custom-cultures-locales.aspx</link><pubDate>Fri, 15 May 2009 01:15:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9617214</guid><dc:creator>shawnste</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/shawnste/comments/9617214.aspx</comments><wfw:commentRss>http://blogs.msdn.com/shawnste/commentrss.aspx?PostID=9617214</wfw:commentRss><description>&lt;P&gt;In &lt;A href="http://blogs.msdn.com/shawnste/archive/2006/04/02/cheating-to-install-custom-cultures-updated-20-june-2006.aspx" mce_href="http://blogs.msdn.com/shawnste/archive/2006/04/02/cheating-to-install-custom-cultures-updated-20-june-2006.aspx"&gt;Cheating To Install Custom Cultures&lt;/A&gt;, I mentioned how to add the custom cultures without using CultureAndRegionInfoBuilder.Register().&amp;nbsp; Should you have any problems with a custom culture / locale&amp;nbsp;and want to uninstall it but are having difficulty with an uninstaller or whatnot, this is how to get rid of it:&lt;/P&gt;
&lt;P&gt;{Warning this edits system stuff and could mess up your computer if you aren't careful, or if the custom culture was required by some application.}&lt;/P&gt;
&lt;P&gt;Warning, if your locale was installed with the Microsoft Locale Builder installer or another installer, you'll still have to run that uninstaller to make the system happy if you want to reinstall it that way.&amp;nbsp; In other words, don't use this if it came through an installer.&lt;/P&gt;
&lt;P&gt;1) Run intl.cpl (Regional and Language Options) and change to some other locale.&lt;/P&gt;
&lt;P&gt;2) Get rid of the custom culture file.&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;a) Open an elevated command window (eg: press windows key, then type "cmd", then CTRL+SHIFT+ENTER, or right click on cmd and choose "Run as Administrator"&lt;/P&gt;
&lt;P&gt;b) "dir %windir%\globalization\*.nlp" to see installed custom locales&lt;/P&gt;
&lt;P&gt;c) "rename %windir%\globalization\fj-FJ.nlp fj-FJ.disabled" to disable a custom culture named "fj-FJ" (Fijiian (Fiji)).&lt;/P&gt;
&lt;P&gt;d) After rebooting, if desirable you can then "del %windir%\globalization\fj-FJ.disabled".&amp;nbsp; Often you can't just delete the .nlp file at first because it may be in use.&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P mce_keep="true"&gt;3) You can also clean the registry key though this isn't necessary, it won't work if it can't find the file:&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P mce_keep="true"&gt;a) Run regedit (warning: improper use can mess up your computer, etc.)&lt;/P&gt;
&lt;P mce_keep="true"&gt;b) Expand all the + arrow thingies to get to HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Nls\CustomLocale (each \ is a new level)&lt;/P&gt;
&lt;P mce_keep="true"&gt;c) Select the value (eg: fj-FJ) you want to delete, then press the delete key.&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P mce_keep="true"&gt;Hope someone finds this helpful.&lt;/P&gt;
&lt;P mce_keep="true"&gt;Shawn&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9617214" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/shawnste/archive/tags/Custom+Cultures+_2F00_+Locales+_2F00_+CultureInfo/default.aspx">Custom Cultures / Locales / CultureInfo</category></item><item><title>Changing the currency symbol (Euro, etc) in Windows XP &amp; Vista &amp; Server</title><link>http://blogs.msdn.com/shawnste/archive/2008/09/29/changing-the-currency-symbol-euro-etc-in-windows-xp-vista-server.aspx</link><pubDate>Mon, 29 Sep 2008 19:27:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8963850</guid><dc:creator>shawnste</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/shawnste/comments/8963850.aspx</comments><wfw:commentRss>http://blogs.msdn.com/shawnste/commentrss.aspx?PostID=8963850</wfw:commentRss><description>&lt;P mce_keep="true"&gt;Countries sometimes change which currency symbol they're using.&amp;nbsp; This is most obvious for&amp;nbsp;countries using the Euro (wikipedia currently says those are currently: Austria,&amp;nbsp;Belgium,&amp;nbsp;Cyprus,&amp;nbsp;Finland,&amp;nbsp;France,&amp;nbsp;Germany,&amp;nbsp;Greece,&amp;nbsp;Ireland,&amp;nbsp;Italy,&amp;nbsp;Luxembourg,&amp;nbsp;Malta,&amp;nbsp;Netherlands,&amp;nbsp;Portugal,&amp;nbsp;Slovenia,&amp;nbsp;Spain, Mayotte,&amp;nbsp;Monaco,&amp;nbsp;Saint Pierre and Miquelon,&amp;nbsp;San Marino,&amp;nbsp;Vatican City, Akrotiri and Dhekelia,&amp;nbsp;Andorra,&amp;nbsp;Kosovo,&amp;nbsp;Montenegro,&amp;nbsp;Saint Barthélemy,&amp;nbsp;and Saint Martin)&lt;/P&gt;
&lt;P mce_keep="true"&gt;Other countries have changed their currency symbol as well, either because of a political shift, currency devaluation or other causes.&amp;nbsp; In the future Slovakia, Lithuania,&amp;nbsp;Estonia, Bulgaria, Czech Republic, Hungary, Latvia, Poland and Romania are expected to adopt a Euro.&lt;/P&gt;
&lt;P mce_keep="true"&gt;So what happens if you use a locale that changes currency?&amp;nbsp; How do you get that set as&amp;nbsp;your currency symbol in Windows&amp;nbsp;or .Net?&lt;/P&gt;
&lt;P mce_keep="true"&gt;The easiest solution is to use the Regional Options control panel (Windows Key&amp;nbsp;+&amp;nbsp;r then type intl.cpl&amp;nbsp;and OK opens the control panel, or you can select it from the control panel).&amp;nbsp; From intl.cpl you can use the advanced settings to change the format of the currency symbol and enter the Euro symbol.&amp;nbsp; This change only impacts the current locale for the current user though, and has to be reset for each user or if the user changes their locale to something else and then back.&lt;/P&gt;
&lt;P mce_keep="true"&gt;Another option for Vista, Server 2008 &amp;amp; .Net 2.0+ is to create a custom culture with the desired symbol.&amp;nbsp; Ironically anyone with the locale already set isn't going to see the update because the old symbol is set in their currency.&amp;nbsp; The advantage of the custom locale solution is that it provides the ability to update the currency name (and other data) as well as the symbol, and that it persists and impacts non-current locales.&lt;/P&gt;
&lt;P mce_keep="true"&gt;So a complete solution is probably to create a custom locale and to also change the user override.&amp;nbsp; I have a link to the custom locale tool at&amp;nbsp;&lt;A href="http://blogs.msdn.com/shawnste/pages/custom-cultures-vista-custom-locales.aspx"&gt;http://blogs.msdn.com/shawnste/pages/custom-cultures-vista-custom-locales.aspx&lt;/A&gt;&amp;nbsp;or directly from &lt;A href="http://www.microsoft.com/downloads/details.aspx?FamilyID=e4588c5e-8f21-45cc-b862-38df8d9bd528&amp;amp;displaylang=en"&gt;http://www.microsoft.com/downloads/details.aspx?FamilyID=e4588c5e-8f21-45cc-b862-38df8d9bd528&amp;amp;displaylang=en&lt;/A&gt;&amp;nbsp;or search for "Locale Builder" on msdn.&lt;BR&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8963850" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/shawnste/archive/tags/Custom+Cultures+_2F00_+Locales+_2F00_+CultureInfo/default.aspx">Custom Cultures / Locales / CultureInfo</category></item><item><title>Silverlight Time Zone World Clock (Very Beta) Demo</title><link>http://blogs.msdn.com/shawnste/archive/2008/09/10/silverlight-time-zone-world-clock-very-beta-demo.aspx</link><pubDate>Wed, 10 Sep 2008 23:40:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8937178</guid><dc:creator>shawnste</dc:creator><slash:comments>3</slash:comments><comments>http://blogs.msdn.com/shawnste/comments/8937178.aspx</comments><wfw:commentRss>http://blogs.msdn.com/shawnste/commentrss.aspx?PostID=8937178</wfw:commentRss><description>&lt;P&gt;For my presentation of globalization of Silverlight at the Unicode Conference I wanted to make a quick Silverlight demo application that would show at least a little bit of globalization and not be too hard to write.&amp;nbsp; My first choice was to find an existing app, and thought I was close when I found a pretty application, but it was always stuck in English and didn't respect the user settings :(.&lt;/P&gt;
&lt;P&gt;Then I thought about making a world clock in Silverlight.&amp;nbsp; I knew the Olsen tz database would provide the data, but I needed a map, so I did a live search for some maps.&amp;nbsp; Most seemed out of date, I didn't know if I could use them, and I'd have to map latitude/longitude to the image.&amp;nbsp; I sort of had a "duh" moment when I found VIEWS at &lt;A href="http://www.codeplex.com/views"&gt;http://www.codeplex.com/views&lt;/A&gt;.&amp;nbsp; VIEWS is a silverlight wrapper for the Virtual Earth control.&amp;nbsp; Virtual Earth (&lt;A href="http://www.microsoft.com/virtualearth/"&gt;http://www.microsoft.com/virtualearth/&lt;/A&gt;) is really cool but, better yet, gives me latitude &amp;amp; longitude when you click.&amp;nbsp; Serious overkill for a world clock, but oh, well.&lt;/P&gt;
&lt;P&gt;It took me about an hour to figure out how to make a silverlight app that used VIEWS.&amp;nbsp; Ironically this is the first time I've used the Visual Studio IDE to make a silverlight app.&amp;nbsp; Most of the silverlight code I write is low-level, so I use a console based test tool and don't make "real" silverlight apps normally.&amp;nbsp; After getting the flashy stuff done really quickly it took me a bit more effort to get the timezone database into a format I could read and use in the application.&lt;/P&gt;
&lt;P&gt;My demo works for the most part, but has some serious bugs.&amp;nbsp; I didn't worry about getting the daylight savings transitions to behave, so the demo can be off by an hour for a few weeks around the transition times (I only enabled checking the month, not the day rules).&amp;nbsp; Also the&amp;nbsp;tz database only has cities, not bounderies, so it can be hard to find the right data point.&amp;nbsp;&amp;nbsp;I added Seattle by hand so that it wouldn't show Vancouver, BC when I did the&amp;nbsp;demo, but many places can be a bit unexpected.&amp;nbsp; Clicking on Disney World in Florida (I just got back from vacation) will happily show you times for&amp;nbsp;Havana, which probably isn't expected.&amp;nbsp; You have to go all the way "up" to New York to get Eastern Time.&lt;/P&gt;
&lt;P&gt;I called the demo "SilverTime" and stuck it on CodePlex at &lt;A href="http://www.codeplex.com/SilverTime"&gt;http://www.codeplex.com/SilverTime&lt;/A&gt;.&amp;nbsp;Its kind of cool, so I'm hoping that other people will participate in the open project and fix some of the bugs or extend its features.&amp;nbsp; There's some interesting potential in the app, and my bugs, although serious, aren't really that hard to fix.&amp;nbsp; (I was just running out of time before my vacation :-)&lt;/P&gt;
&lt;P&gt;Have Fun,&lt;/P&gt;
&lt;P&gt;Shawn&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8937178" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/shawnste/archive/tags/Custom+Cultures+_2F00_+Locales+_2F00_+CultureInfo/default.aspx">Custom Cultures / Locales / CultureInfo</category><category domain="http://blogs.msdn.com/shawnste/archive/tags/Silverlight/default.aspx">Silverlight</category></item><item><title>How Come My "ț" (or Another Character) Doesn't Work in Code Page XXX?</title><link>http://blogs.msdn.com/shawnste/archive/2008/06/04/how-come-my-or-another-character-doesn-t-work-in-code-page-xxx.aspx</link><pubDate>Wed, 04 Jun 2008 20:30:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8573689</guid><dc:creator>shawnste</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/shawnste/comments/8573689.aspx</comments><wfw:commentRss>http://blogs.msdn.com/shawnste/commentrss.aspx?PostID=8573689</wfw:commentRss><description>&lt;P&gt;First of all, as I always suggest,&amp;nbsp;&lt;A class="" title="Unicode and Code Pages" href="http://blogs.msdn.com/shawnste/pages/code-pages-unicode-encodings.aspx" mce_href="http://blogs.msdn.com/shawnste/pages/code-pages-unicode-encodings.aspx"&gt;Use Unicode&lt;/A&gt; when practical :)&amp;nbsp;&amp;nbsp; Then you don't run into these kinds of problems.&lt;/P&gt;
&lt;P&gt;The "thing" to remember about code pages in general is that they were an early way to get characters to display in a readable way on CRT MS-DOS displays, or, before that, for teletypes and such.&amp;nbsp; ASCII is a common representation, but most software developers realized that one of the bits wasn't being used, and extended ASCII in several standard, and not so standard ways.&amp;nbsp; Usually those extensions were for characters that someone thought were useful, but then other users discovered that some characters didn't "work" for their language and invented a variation of a code page, after all, all you had to do was change a bitmap font.&amp;nbsp; Often times subtle distinctions between characters were lost, or users "made do" with the closest code page.&lt;/P&gt;
&lt;P&gt;Sometimes the behaviors were pretty much a "hack".&amp;nbsp; Some code pages represented right-to-left text, like Arabic, in a left-to-right fashion since their computer systems didn't really understand the concept of left-to-right text.&amp;nbsp; On the CRT, in addition to using the 8th bit,&amp;nbsp;MS-DOS reused the 1-31 code points for "symbols" since the ASCII values were invisible concepts like "bell" and "return".&amp;nbsp; That hack allowed for card suits and console card games.&amp;nbsp; Commodore did something similar with their PET fonts.&lt;/P&gt;
&lt;P&gt;So what's this got to do with a Romanian ț (U+021B&amp;nbsp;"Latin small letter t with comma below")?&amp;nbsp; Well, code page 1250, "Eastern Europe"&amp;nbsp;has a code point "0xfe" for &lt;SPAN style="FONT-SIZE: 11pt; LINE-HEIGHT: 115%; FONT-FAMILY: 'Calibri','sans-serif'; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-hansi-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;ţ (&lt;/SPAN&gt;U+0163 "Latin small letter t with cedilla").&amp;nbsp; I'm not sure of all of the history behind these characters, however they are different in appearance.&amp;nbsp; I don't know if the 1250 &lt;SPAN style="FONT-SIZE: 11pt; LINE-HEIGHT: 115%; FONT-FAMILY: 'Calibri','sans-serif'; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-hansi-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;ţ was originally intended for use with Romanian, however a cedilla isn't a comma below, and this distinction caused a seperate Unicode code point to be created.&amp;nbsp; 1250 however still has its original meaning and U+021B isn't in it.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 11pt; LINE-HEIGHT: 115%; FONT-FAMILY: 'Calibri','sans-serif'; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-hansi-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;So, for Romanian, if you really want to use the "correct" U+021B character, then 1250&amp;nbsp;won't work (nor will any other non-Unicode code page).&amp;nbsp; Those kind of subtle (to non-Romanian) issues are why its best to have Unicode applications and data stores.&amp;nbsp; We can't really change the behavior of code page 1250, or else someone else's usage (even a Romanian application making do with&amp;nbsp;the cedilla)&amp;nbsp;will break.&lt;/SPAN&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8573689" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/shawnste/archive/tags/Custom+Cultures+_2F00_+Locales+_2F00_+CultureInfo/default.aspx">Custom Cultures / Locales / CultureInfo</category></item><item><title>MSDN Code Gallery Custom Locales</title><link>http://blogs.msdn.com/shawnste/archive/2008/03/05/msdn-code-gallery-custom-locales.aspx</link><pubDate>Thu, 06 Mar 2008 05:12:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8062869</guid><dc:creator>shawnste</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/shawnste/comments/8062869.aspx</comments><wfw:commentRss>http://blogs.msdn.com/shawnste/commentrss.aspx?PostID=8062869</wfw:commentRss><description>&lt;P&gt;MSDN has this new nifty Code Gallery place for samples and the like, so I stuck my custom locale examples there at &lt;A href="http://code.msdn.microsoft.com/CustomLocales"&gt;http://code.msdn.microsoft.com/CustomLocales&lt;/A&gt;&amp;nbsp; I added a few more since posting them to my blog here.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8062869" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/shawnste/archive/tags/Custom+Cultures+_2F00_+Locales+_2F00_+CultureInfo/default.aspx">Custom Cultures / Locales / CultureInfo</category></item><item><title>http://www.languagegeek.com/</title><link>http://blogs.msdn.com/shawnste/archive/2007/12/19/http-www-languagegeek-com.aspx</link><pubDate>Thu, 20 Dec 2007 05:04:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:6812023</guid><dc:creator>shawnste</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/shawnste/comments/6812023.aspx</comments><wfw:commentRss>http://blogs.msdn.com/shawnste/commentrss.aspx?PostID=6812023</wfw:commentRss><description>&lt;P&gt;&lt;A href="http://www.languagegeek.com/"&gt;http://www.languagegeek.com/&lt;/A&gt;&amp;nbsp;says it is dedicated to the promotion of Native North American languages.&amp;nbsp; A coworker ran into this site while she was trying to learn more about the Lakota language (and she made a Lakota custom locale too! :)&amp;nbsp; I don't know much about the site, but apparently there are keyboards and other things that might be helpful to those of you trying to get keyboards or fonts or whatnot.&amp;nbsp; I don't see custom locale files there yet, but maybe in the future&amp;nbsp;;-)&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=6812023" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/shawnste/archive/tags/Custom+Cultures+_2F00_+Locales+_2F00_+CultureInfo/default.aspx">Custom Cultures / Locales / CultureInfo</category></item><item><title>Cantonese and Manderin language tagging.</title><link>http://blogs.msdn.com/shawnste/archive/2007/12/14/cantonese-and-manderin-language-tagging.aspx</link><pubDate>Fri, 14 Dec 2007 21:49:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:6764679</guid><dc:creator>shawnste</dc:creator><slash:comments>4</slash:comments><comments>http://blogs.msdn.com/shawnste/comments/6764679.aspx</comments><wfw:commentRss>http://blogs.msdn.com/shawnste/commentrss.aspx?PostID=6764679</wfw:commentRss><description>&lt;P&gt;The IETF &lt;A class="" href="http://www.ietf.org/html.charters/ltru-charter.html" mce_href="http://www.ietf.org/html.charters/ltru-charter.html"&gt;"Language Tag Registry Update"&lt;/A&gt; working group has noted that lots of data is tagged as "zh-Hant", regardless of whether or not it is pronounced as Cantonese or Manderin.&amp;nbsp;&amp;nbsp;For video and audio however, this doesn't allow a fine enough distinction, and so the LTRU is working on revising RFC 4646/4647 and the registry to allow for new tags to distiguish Cantonese and Manderin from the "macrolanguage" of Chinese.&lt;/P&gt;
&lt;P&gt;So in the future we should expect to see "cmn" and "yue" tags instead of zh.&amp;nbsp; The LTRU is still a bit in flux about the details, but it is clear that in the future newly tagged data will use "cmn" and "yue".&amp;nbsp; This is going to cause "an interesting time" since lots of legacy data, resources and systems will continue to use the zh tags.&lt;/P&gt;
&lt;P&gt;User configurations may need to change, such as allowing both "cmn and zh" in a web browser's language configuration.&amp;nbsp; Applications and systems may also need to change to provide "cmn" resources if "zh" was asked for, or vice versa.&amp;nbsp; Content providers may also need to retag existing data to distinguish between Cantonese and Manderin.&lt;/P&gt;
&lt;P&gt;With these types of changes, the adoption rate is usually quite varied, so expect some applications and content to shift rapidly to using the new recommended names once that new standard is created.&amp;nbsp; Other data and systems will probably remain unchanged for a very long time, leading to very interesting scenarios when those environments communicate with each other.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=6764679" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/shawnste/archive/tags/Custom+Cultures+_2F00_+Locales+_2F00_+CultureInfo/default.aspx">Custom Cultures / Locales / CultureInfo</category></item><item><title>zh-Hans, zh-Hant and the "old" zh-CHS, zh-CHT</title><link>http://blogs.msdn.com/shawnste/archive/2007/12/13/zh-hans-zh-hant-and-the-old-zh-chs-zh-cht.aspx</link><pubDate>Thu, 13 Dec 2007 21:37:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:6763976</guid><dc:creator>shawnste</dc:creator><slash:comments>6</slash:comments><comments>http://blogs.msdn.com/shawnste/comments/6763976.aspx</comments><wfw:commentRss>http://blogs.msdn.com/shawnste/commentrss.aspx?PostID=6763976</wfw:commentRss><description>&lt;P&gt;With Windows Vista and Microsoft .Net 2.0 (MS07-040 security patch) and 3.0+, we've started to use the IETF standard "zh-Hans", and "zh-Hant" names for Chinese simplified and traditional.&amp;nbsp; In windows the zh-CHS/zh-CHT names were never used because the named APIs are new to Vista.&amp;nbsp; Also in Silverlight we don't use the old names since Silverlight is new.&lt;/P&gt;
&lt;P&gt;However in .Net 2.0/3.x we still recognize zh-CHS &amp;amp; zh-CHT for backwards compatibility.&amp;nbsp; Additionally we prefer the "old" zh-CHS and zh-CHT names when enumerating or returning the name of a CultureInfo created by LCID (0x0004 or 0x7c04)&amp;nbsp; The other oddity is that to recognize&amp;nbsp;more resources, we made the parent of zh-CHS/zh-CHT be zh-Hans/zh-Hant.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;This allows resources labeled zh-Hans or zh-Hant (the preferred name) to be loaded by systems that used the older zh-CHS/zh-CHT names.&amp;nbsp; Unfortunately they can't be parents of each other, so this resource fallback only works one direction.&amp;nbsp; You cannot normally find zh-CHS resources if you start with a zh-Hans locale.&amp;nbsp; So the recommendation is to use zh-Hans/zh-Hant when creating resources.&lt;/P&gt;
&lt;P&gt;In the future (like&amp;nbsp;v4+, we're not sure when)&amp;nbsp;zh-CHS/zh-CHT will no longer be recognized by default.&amp;nbsp; Users will still be able to create zh-CHS/zh-CHT custom cutlures if necessary to workaround legacy naming related issues, similar to the way you can make an az-AZ-Latn now to work around that name change.&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=6763976" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/shawnste/archive/tags/Custom+Cultures+_2F00_+Locales+_2F00_+CultureInfo/default.aspx">Custom Cultures / Locales / CultureInfo</category></item><item><title>How do you make your regional and language options apply to new user accounts?</title><link>http://blogs.msdn.com/shawnste/archive/2007/10/04/how-do-you-make-your-regional-and-language-options-apply-to-new-user-accounts.aspx</link><pubDate>Thu, 04 Oct 2007 19:30:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:5276017</guid><dc:creator>shawnste</dc:creator><slash:comments>3</slash:comments><comments>http://blogs.msdn.com/shawnste/comments/5276017.aspx</comments><wfw:commentRss>http://blogs.msdn.com/shawnste/commentrss.aspx?PostID=5276017</wfw:commentRss><description>&lt;P&gt;In general its a good idea to allow users to choose appropriate settings, but being able to adjust the default user account settings to provide users with an appropriate default locale is often helpful.&amp;nbsp; Also&amp;nbsp;one cannot easily change the system account's settings.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;The Regional and Language Options Control Panel (intl.cpl) has an administrative tab that you can then choose "Copy to reserved accounts" from.&amp;nbsp; This copies the settings to the system and default accounts so that new users get those settings.&amp;nbsp; I'd recommend testing on the local account to make sure that these settings are what you want.&amp;nbsp; The label was slightly different in XP, but it does the same thing.&lt;/P&gt;
&lt;P&gt;To do this in an automated manner see &lt;A href="http://blogs.msdn.com/shawnste/archive/2007/08/01/windows-vista-command-line-configuration-of-international-settings-is-on-line-on-msdn.aspx" mce_href="http://blogs.msdn.com/shawnste/archive/2007/08/01/windows-vista-command-line-configuration-of-international-settings-is-on-line-on-msdn.aspx"&gt;"Windows Vista Command Line Configuration of International Settings" is on-line on MSDN&lt;/A&gt;.&amp;nbsp; The MSDN article &lt;A href="http://www.microsoft.com/globaldev/vista/vista_tools/vista_command_line_international_configuration.mspx" mce_href="http://www.microsoft.com/globaldev/vista/vista_tools/vista_command_line_international_configuration.mspx"&gt;http://www.microsoft.com/globaldev/vista/vista_tools/vista_command_line_international_configuration.mspx&lt;/A&gt;&amp;nbsp;discusses changing options using an xml configuration file which you create.&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=5276017" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/shawnste/archive/tags/Custom+Cultures+_2F00_+Locales+_2F00_+CultureInfo/default.aspx">Custom Cultures / Locales / CultureInfo</category></item><item><title>What's a genitive month name anyway?</title><link>http://blogs.msdn.com/shawnste/archive/2007/08/03/what-s-a-genitive-month-name-anyway.aspx</link><pubDate>Fri, 03 Aug 2007 21:34:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:4209872</guid><dc:creator>shawnste</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/shawnste/comments/4209872.aspx</comments><wfw:commentRss>http://blogs.msdn.com/shawnste/commentrss.aspx?PostID=4209872</wfw:commentRss><description>&lt;P&gt;I’m not a linguistic expert, so I’ll probably get this a bit wrong, but basically a genitive month name is used when there’s a number next to the month name. This doesn’t happen in English, but I think of it sort of like instead of saying “1 April 2008”, using “1 of April 2008”, where the “of April” is the “genitive month name”.&lt;/P&gt;
&lt;P&gt;For most cultures the “genitive month names” and the “month names” are identical, and in .Net 2.0 DateTimeFormatInfo the “genitive” forms are internally delay created from the month name. Unfortunately what this means is that you cannot reliably set the DateTimeFormatInfo.MonthNames property unless you also set the DateTimeFormatInfo.MonthGenitiveNames property.&lt;/P&gt;
&lt;P&gt;The example code demonstrates this by changing the month names and not the genitive names, then changing those as well. &lt;/P&gt;&lt;PRE&gt;MMMM dd format: April 01   
System.String[]   
w/o Genitive:   April 01   
with Genitive:  prilAy 01   

using System;   
using System.Globalization;   
public class Test   

{
     static void Main()
     {
         // Pick a date and show what it looks like normally
         DateTimeFormatInfo dtfi = new DateTimeFormatInfo();
         DateTime dt = new DateTime(2008,4,1,12,30,15);
         Console.WriteLine("MMMM dd format: " + dt.ToString("M", dtfi));

         // Force the delay create to happen in some versions of .Net
         Console.WriteLine(dtfi.MonthGenitiveNames);

         // Try to make the month names pig-latn (hey, its an example)
         dtfi.MonthNames = new string[]
             { "anuaryJay", "ebruaryJay", "archMay", "prilAy", "aMay", "uneJay",
               "ulyJay", "ugustJay", "eptemberSay", "ctoberOay", "ovemberNay", "ecemberDay", "" };
         // It doesn't work quite as expected
         Console.WriteLine("w/o Genitive:   " + dt.ToString("M", dtfi));

         // We also have to set the genitive names
         dtfi.MonthGenitiveNames = dtfi.MonthNames;
         Console.WriteLine("with Genitive:  " + dt.ToString("M", dtfi));
     }
}
&lt;/PRE&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=4209872" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/shawnste/archive/tags/Custom+Cultures+_2F00_+Locales+_2F00_+CultureInfo/default.aspx">Custom Cultures / Locales / CultureInfo</category></item><item><title>"Windows Vista Command Line Configuration of International Settings" is on-line on MSDN</title><link>http://blogs.msdn.com/shawnste/archive/2007/08/01/windows-vista-command-line-configuration-of-international-settings-is-on-line-on-msdn.aspx</link><pubDate>Wed, 01 Aug 2007 21:07:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:4174335</guid><dc:creator>shawnste</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/shawnste/comments/4174335.aspx</comments><wfw:commentRss>http://blogs.msdn.com/shawnste/commentrss.aspx?PostID=4174335</wfw:commentRss><description>Generally its a good idea to let the users figure out their international settings, but sometimes they need to be managed in a command-line manner.&amp;nbsp; &lt;A href="http://www.microsoft.com/globaldev/vista/vista_tools/vista_command_line_international_configuration.mspx" mce_href="http://www.microsoft.com/globaldev/vista/vista_tools/vista_command_line_international_configuration.mspx"&gt;Windows Vista Command Line Configuration of International Settings&lt;/A&gt; at &lt;A href="http://www.microsoft.com/globaldev/vista/vista_tools/vista_command_line_international_configuration.mspx"&gt;http://www.microsoft.com/globaldev/vista/vista_tools/vista_command_line_international_configuration.mspx&lt;/A&gt; describes how to manage the international settings from the command line&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=4174335" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/shawnste/archive/tags/Custom+Cultures+_2F00_+Locales+_2F00_+CultureInfo/default.aspx">Custom Cultures / Locales / CultureInfo</category></item></channel></rss>