<?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>International Code Snippets</title><link>http://blogs.msdn.com/b/snippets/</link><description /><dc:language>en-US</dc:language><generator>Telligent Community 5.6.583.21163 (Build: 5.6.583.21163)</generator><item><title>How to change Input Language programmatically?</title><link>http://blogs.msdn.com/b/snippets/archive/2008/12/31/how-to-change-input-language-programmatically.aspx</link><pubDate>Wed, 31 Dec 2008 13:26:03 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9258347</guid><dc:creator>Vitaly Zayko</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/snippets/rsscomments.aspx?WeblogPostID=9258347</wfw:commentRss><comments>http://blogs.msdn.com/b/snippets/archive/2008/12/31/how-to-change-input-language-programmatically.aspx#comments</comments><description>&lt;p&gt;Do you know that your Windows Forms App could switch between installed languages at run-time?&lt;/p&gt;  &lt;p&gt;An Input language is a Culture/Keyboard layout pair that determines how the physical keys on a keyboard map or plot to characters in a language (read more about Input Language in &lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.forms.inputlanguage.aspx" target="_blank"&gt;MSDN Library&lt;/a&gt;). Microsoft Windows allows installing more than one input language but international users usually use two: English and a national.&lt;/p&gt;  &lt;p&gt;Since version 1.0 .NET Framework supports a special public sealed class - &lt;strong&gt;InputLanguage&lt;/strong&gt; (in &lt;strong&gt;System.Windows.Forms&lt;/strong&gt; namespace, assembly – &lt;strong&gt;System.Windows.Forms.dll&lt;/strong&gt;). The property we are going to use today is &lt;strong&gt;CurrentInputLanguage&lt;/strong&gt; of the &lt;strong&gt;InputLanguage&lt;/strong&gt; type.&lt;/p&gt;  &lt;p&gt;Enforcing to use a particular input language could be useful in many cases but please note that this function changes &lt;strong&gt;CurrentInputLanguage&lt;/strong&gt; for the whole App and not just for a TextBox or any other selected control.&lt;/p&gt;  &lt;p&gt;I created four overloaded functions that demonstrate this functionality. Actually only 4&lt;sup&gt;th&lt;/sup&gt; function (the only one in VB example) does change input language, first demonstrates how to switch between languages and two others - how to create a InputLanguage class based on&amp;#160; string or integer language codes (please see code comments for more details).&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;C# code:&lt;/strong&gt;&lt;/p&gt;  &lt;div style="border-bottom: black 1px solid; border-left: black 1px solid; padding-bottom: 5px; padding-left: 5px; width: 800px; padding-right: 5px; color: black; overflow: auto; border-top: black 1px solid; border-right: black 1px solid; padding-top: 5px"&gt;   &lt;pre style="margin: 0em; background: #f4f4f4"&gt;&lt;/span&gt;&lt;span style="color: #808080"&gt;///&lt;/span&gt;&lt;span style="color: #008000"&gt; &lt;/span&gt;&lt;span style="color: #808080"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0em; background: white"&gt;///&lt;/span&gt;&lt;span style="color: #008000"&gt; Changing Current Input Language to a next installed language&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0em; background: #f4f4f4"&gt;&lt;/span&gt;&lt;span style="color: #808080"&gt;///&lt;/span&gt;&lt;span style="color: #008000"&gt; &lt;/span&gt;&lt;span style="color: #808080"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0em; background: white"&gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;public&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #0000ff"&gt;void&lt;/span&gt;&lt;span style="color: #000000"&gt; ChangeInputLanguage()&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0em; background: #f4f4f4"&gt;&lt;span style="color: #000000"&gt;{&lt;/span&gt;&lt;/pre&gt;
&lt;/span&gt;

  &lt;pre style="margin: 0em; background: white"&gt;   &lt;/span&gt;&lt;span style="color: #008000"&gt;// Nothing to do if there is only one Input Language supported:&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0em; background: #f4f4f4"&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;    &lt;/span&gt;&lt;span style="color: #0000ff"&gt;if&lt;/span&gt;&lt;span style="color: #000000"&gt; (&lt;/span&gt;&lt;span style="color: #2b91af"&gt;InputLanguage&lt;/span&gt;&lt;span style="color: #000000"&gt;.InstalledInputLanguages.Count == 1)&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0em; background: white"&gt;       &lt;/span&gt;&lt;span style="color: #0000ff"&gt;return&lt;/span&gt;&lt;span style="color: #000000"&gt;;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0em; background: #f4f4f4"&gt;&lt;span style="color: #000000"&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/span&gt;

  &lt;pre style="margin: 0em; background: white"&gt;   &lt;/span&gt;&lt;span style="color: #008000"&gt;// Get index of current Input Language&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0em; background: #f4f4f4"&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;    &lt;/span&gt;&lt;span style="color: #0000ff"&gt;int&lt;/span&gt;&lt;span style="color: #000000"&gt; currentLang = &lt;/span&gt;&lt;span style="color: #2b91af"&gt;InputLanguage&lt;/span&gt;&lt;span style="color: #000000"&gt;.InstalledInputLanguages.IndexOf(&lt;/span&gt;&lt;span style="color: #2b91af"&gt;InputLanguage&lt;/span&gt;&lt;span style="color: #000000"&gt;.CurrentInputLanguage);&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0em; background: white"&gt;&lt;span style="color: #000000"&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/span&gt;

  &lt;pre style="margin: 0em; background: #f4f4f4"&gt;   &lt;/span&gt;&lt;span style="color: #008000"&gt;// Calculate next Input Language&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0em; background: white"&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;    &lt;/span&gt;&lt;span style="color: #2b91af"&gt;InputLanguage&lt;/span&gt;&lt;span style="color: #000000"&gt; nextLang = ++currentLang == &lt;/span&gt;&lt;span style="color: #2b91af"&gt;InputLanguage&lt;/span&gt;&lt;span style="color: #000000"&gt;.InstalledInputLanguages.Count ? &lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0em; background: #f4f4f4"&gt;       &lt;/span&gt;&lt;span style="color: #2b91af"&gt;InputLanguage&lt;/span&gt;&lt;span style="color: #000000"&gt;.InstalledInputLanguages[0] : &lt;/span&gt;&lt;span style="color: #2b91af"&gt;InputLanguage&lt;/span&gt;&lt;span style="color: #000000"&gt;.InstalledInputLanguages[currentLang];&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0em; background: white"&gt;&lt;span style="color: #000000"&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/span&gt;

  &lt;pre style="margin: 0em; background: #f4f4f4"&gt;   &lt;/span&gt;&lt;span style="color: #008000"&gt;// Change current Language to the calculated:&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0em; background: white"&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;    ChangeInputLanguage(nextLang);&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0em; background: #f4f4f4"&gt;&lt;span style="color: #000000"&gt;}&lt;/span&gt;&lt;/pre&gt;
&lt;/span&gt;

  &lt;pre style="margin: 0em; background: white"&gt;&lt;span style="color: #000000"&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/span&gt;

  &lt;pre style="margin: 0em; background: #f4f4f4"&gt;&lt;/span&gt;&lt;span style="color: #808080"&gt;///&lt;/span&gt;&lt;span style="color: #008000"&gt; &lt;/span&gt;&lt;span style="color: #808080"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0em; background: white"&gt;///&lt;/span&gt;&lt;span style="color: #008000"&gt; Changing current Input Language to a new one passed in the param&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0em; background: #f4f4f4"&gt;&lt;/span&gt;&lt;span style="color: #808080"&gt;///&lt;/span&gt;&lt;span style="color: #008000"&gt; &lt;/span&gt;&lt;span style="color: #808080"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0em; background: white"&gt;///&lt;/span&gt;&lt;span style="color: #008000"&gt; &lt;/span&gt;&lt;span style="color: #808080"&gt;&amp;lt;param name=&amp;quot;ISOLang&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="color: #008000"&gt;ISO Culture name string code e.g. &amp;quot;en&amp;quot; for English&lt;/span&gt;&lt;span style="color: #808080"&gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0em; background: #f4f4f4"&gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;public&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #0000ff"&gt;void&lt;/span&gt;&lt;span style="color: #000000"&gt; ChangeInputLanguage(&lt;/span&gt;&lt;span style="color: #0000ff"&gt;string&lt;/span&gt;&lt;span style="color: #000000"&gt; ISOLang)&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0em; background: white"&gt;&lt;span style="color: #000000"&gt;{&lt;/span&gt;&lt;/pre&gt;
&lt;/span&gt;

  &lt;pre style="margin: 0em; background: #f4f4f4"&gt;   &lt;/span&gt;&lt;span style="color: #008000"&gt;// Convert ISO Culture name to InputLanguage object. Be aware: if ISO is not supported&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0em; background: white"&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;    &lt;/span&gt;&lt;span style="color: #008000"&gt;// ArgumentException will be invoked here&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0em; background: #f4f4f4"&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;    &lt;/span&gt;&lt;span style="color: #2b91af"&gt;InputLanguage&lt;/span&gt;&lt;span style="color: #000000"&gt; nextLang = &lt;/span&gt;&lt;span style="color: #2b91af"&gt;InputLanguage&lt;/span&gt;&lt;span style="color: #000000"&gt;.FromCulture(&lt;/span&gt;&lt;span style="color: #0000ff"&gt;new&lt;/span&gt;&lt;span style="color: #000000"&gt; System.Globalization.&lt;/span&gt;&lt;span style="color: #2b91af"&gt;CultureInfo&lt;/span&gt;&lt;span style="color: #000000"&gt;(ISOLang));&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0em; background: white"&gt;&lt;span style="color: #000000"&gt;   ChangeInputLanguage(nextLang);&lt;/span&gt;&lt;/pre&gt;
&lt;/span&gt;

  &lt;pre style="margin: 0em; background: #f4f4f4"&gt;&lt;span style="color: #000000"&gt;}&lt;/span&gt;&lt;/pre&gt;
&lt;/span&gt;

  &lt;pre style="margin: 0em; background: white"&gt;&lt;span style="color: #000000"&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/span&gt;

  &lt;pre style="margin: 0em; background: #f4f4f4"&gt;&lt;/span&gt;&lt;span style="color: #808080"&gt;///&lt;/span&gt;&lt;span style="color: #008000"&gt; &lt;/span&gt;&lt;span style="color: #808080"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0em; background: white"&gt;///&lt;/span&gt;&lt;span style="color: #008000"&gt; Changing current Input Language to a new one passed in the param&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0em; background: #f4f4f4"&gt;&lt;/span&gt;&lt;span style="color: #808080"&gt;///&lt;/span&gt;&lt;span style="color: #008000"&gt; &lt;/span&gt;&lt;span style="color: #808080"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0em; background: white"&gt;///&lt;/span&gt;&lt;span style="color: #008000"&gt; &lt;/span&gt;&lt;span style="color: #808080"&gt;&amp;lt;param name=&amp;quot;LangID&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="color: #008000"&gt;Integer Culture code e.g. 1033 for English&lt;/span&gt;&lt;span style="color: #808080"&gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0em; background: #f4f4f4"&gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;public&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #0000ff"&gt;void&lt;/span&gt;&lt;span style="color: #000000"&gt; ChangeInputLanguage(&lt;/span&gt;&lt;span style="color: #0000ff"&gt;int&lt;/span&gt;&lt;span style="color: #000000"&gt; LangID)&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0em; background: white"&gt;&lt;span style="color: #000000"&gt;{&lt;/span&gt;&lt;/pre&gt;
&lt;/span&gt;

  &lt;pre style="margin: 0em; background: #f4f4f4"&gt;   &lt;/span&gt;&lt;span style="color: #008000"&gt;// Convert Integer Culture code to InputLanguage object. Be aware: if Culture code is not supported&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0em; background: white"&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;    &lt;/span&gt;&lt;span style="color: #008000"&gt;// ArgumentException will be invoked here&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0em; background: #f4f4f4"&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;    &lt;/span&gt;&lt;span style="color: #2b91af"&gt;InputLanguage&lt;/span&gt;&lt;span style="color: #000000"&gt; nextLang = &lt;/span&gt;&lt;span style="color: #2b91af"&gt;InputLanguage&lt;/span&gt;&lt;span style="color: #000000"&gt;.FromCulture(&lt;/span&gt;&lt;span style="color: #0000ff"&gt;new&lt;/span&gt;&lt;span style="color: #000000"&gt; System.Globalization.&lt;/span&gt;&lt;span style="color: #2b91af"&gt;CultureInfo&lt;/span&gt;&lt;span style="color: #000000"&gt;(LangID));&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0em; background: white"&gt;&lt;span style="color: #000000"&gt;   ChangeInputLanguage(nextLang);&lt;/span&gt;&lt;/pre&gt;
&lt;/span&gt;

  &lt;pre style="margin: 0em; background: #f4f4f4"&gt;&lt;span style="color: #000000"&gt;}&lt;/span&gt;&lt;/pre&gt;
&lt;/span&gt;

  &lt;pre style="margin: 0em; background: white"&gt;&lt;span style="color: #000000"&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/span&gt;

  &lt;pre style="margin: 0em; background: #f4f4f4"&gt;&lt;/span&gt;&lt;span style="color: #808080"&gt;///&lt;/span&gt;&lt;span style="color: #008000"&gt; &lt;/span&gt;&lt;span style="color: #808080"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0em; background: white"&gt;///&lt;/span&gt;&lt;span style="color: #008000"&gt; Changing current Input Language to a new one passed in the param&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0em; background: #f4f4f4"&gt;&lt;/span&gt;&lt;span style="color: #808080"&gt;///&lt;/span&gt;&lt;span style="color: #008000"&gt; &lt;/span&gt;&lt;span style="color: #808080"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0em; background: white"&gt;///&lt;/span&gt;&lt;span style="color: #008000"&gt; &lt;/span&gt;&lt;span style="color: #808080"&gt;&amp;lt;param name=&amp;quot;InputLang&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="color: #008000"&gt;New Input Language as InputLanguage object&lt;/span&gt;&lt;span style="color: #808080"&gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0em; background: #f4f4f4"&gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;public&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #0000ff"&gt;void&lt;/span&gt;&lt;span style="color: #000000"&gt; ChangeInputLanguage(&lt;/span&gt;&lt;span style="color: #2b91af"&gt;InputLanguage&lt;/span&gt;&lt;span style="color: #000000"&gt; InputLang)&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0em; background: white"&gt;&lt;span style="color: #000000"&gt;{&lt;/span&gt;&lt;/pre&gt;
&lt;/span&gt;

  &lt;pre style="margin: 0em; background: #f4f4f4"&gt;   &lt;/span&gt;&lt;span style="color: #008000"&gt;// Check is this Language really installed. Raise exception to warn if it is not:&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0em; background: white"&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;    &lt;/span&gt;&lt;span style="color: #0000ff"&gt;if&lt;/span&gt;&lt;span style="color: #000000"&gt; (&lt;/span&gt;&lt;span style="color: #2b91af"&gt;InputLanguage&lt;/span&gt;&lt;span style="color: #000000"&gt;.InstalledInputLanguages.IndexOf(InputLang) == -1)&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0em; background: #f4f4f4"&gt;       &lt;/span&gt;&lt;span style="color: #0000ff"&gt;throw&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #0000ff"&gt;new&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #2b91af"&gt;ArgumentOutOfRangeException&lt;/span&gt;&lt;span style="color: #000000"&gt;();&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0em; background: white"&gt;&lt;span style="color: #000000"&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/span&gt;

  &lt;pre style="margin: 0em; background: #f4f4f4"&gt;   &lt;/span&gt;&lt;span style="color: #008000"&gt;// InputLAnguage changes here:&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0em; background: white"&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;    &lt;/span&gt;&lt;span style="color: #2b91af"&gt;InputLanguage&lt;/span&gt;&lt;span style="color: #000000"&gt;.CurrentInputLanguage = InputLang;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0em; background: #f4f4f4"&gt;&lt;span style="color: #000000"&gt;}&lt;/span&gt;&lt;/pre&gt;
&lt;/span&gt;

  &lt;pre style="margin: 0em; background: white"&gt;&lt;span style="color: #000000"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;!-- Created with Vitaly Zayko SaveAsHtml v.1.5.3272.16969 - a VisualStudio 2008 plugin. Visit http://zayko.net --&gt;

&lt;p&gt;&lt;strong&gt;VB.NET code:&lt;/strong&gt;&lt;/p&gt;

&lt;div style="border-bottom: black 1px solid; border-left: black 1px solid; padding-bottom: 5px; padding-left: 5px; width: 800px; padding-right: 5px; color: black; overflow: auto; border-top: black 1px solid; border-right: black 1px solid; padding-top: 5px"&gt;
  &lt;pre style="margin: 0em; background: #f4f4f4"&gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;Public&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #0000ff"&gt;Sub&lt;/span&gt;&lt;span style="color: #000000"&gt; ChangeInputLanguage(&lt;/span&gt;&lt;span style="color: #0000ff"&gt;ByVal&lt;/span&gt;&lt;span style="color: #000000"&gt; InputLang &lt;/span&gt;&lt;span style="color: #0000ff"&gt;As&lt;/span&gt;&lt;span style="color: #000000"&gt; InputLanguage)&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0em; background: white"&gt;   &lt;/span&gt;&lt;span style="color: #0000ff"&gt;If&lt;/span&gt;&lt;span style="color: #000000"&gt; InputLanguage.InstalledInputLanguages.IndexOf(InputLang) = -1 &lt;/span&gt;&lt;span style="color: #0000ff"&gt;Then&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0em; background: #f4f4f4"&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;        &lt;/span&gt;&lt;span style="color: #0000ff"&gt;Throw&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #0000ff"&gt;New&lt;/span&gt;&lt;span style="color: #000000"&gt; ArgumentOutOfRangeException()&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0em; background: white"&gt;   &lt;/span&gt;&lt;span style="color: #0000ff"&gt;End&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #0000ff"&gt;If&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0em; background: #f4f4f4"&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;    InputLanguage.CurrentInputLanguage = InputLang&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0em; background: white"&gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;End&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #0000ff"&gt;Sub&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0em; background: #f4f4f4"&gt;&lt;span style="color: #0000ff"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;!-- Created with Vitaly Zayko SaveAsHtml v.1.5.3272.16969 - a VisualStudio 2008 plugin. Visit http://zayko.net --&gt;

&lt;p&gt;&lt;strong&gt;Happy New Year!&lt;/strong&gt;&lt;/p&gt;

&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:6bc6c807-b00e-477d-a0bb-2b82ac3ec2ab" class="wlWriterEditableSmartContent"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/Globalization" rel="tag"&gt;Globalization&lt;/a&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9258347" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/snippets/archive/tags/Globalization/">Globalization</category><category domain="http://blogs.msdn.com/b/snippets/archive/tags/C_2300_/">C#</category><category domain="http://blogs.msdn.com/b/snippets/archive/tags/VB-NET/">VB.NET</category></item><item><title>How to get list of all installed input locales?</title><link>http://blogs.msdn.com/b/snippets/archive/2008/12/18/how-to-get-list-of-all-installed-input-locales.aspx</link><pubDate>Thu, 18 Dec 2008 10:07:46 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9234802</guid><dc:creator>Vitaly Zayko</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/snippets/rsscomments.aspx?WeblogPostID=9234802</wfw:commentRss><comments>http://blogs.msdn.com/b/snippets/archive/2008/12/18/how-to-get-list-of-all-installed-input-locales.aspx#comments</comments><description>&lt;p&gt;In the &lt;a href="http://blogs.msdn.com/snippets/archive/2008/11/28/how-to-get-user-s-current-input-locale.aspx"&gt;last post&lt;/a&gt; we spoke about how to find what locale is currently selected as active. Now it's time to find how many and what input locales are installed on a PC.&lt;/p&gt;  &lt;p&gt;Here are two overloaded functions: one returns locale IDs as integer values (e.g. 1049) and the second – as two characters ISO strings (e.g. &amp;quot;en&amp;quot;):&lt;/p&gt;  &lt;div style="border-bottom: black 1px solid; border-left: black 1px solid; padding-bottom: 5px; padding-left: 5px; width: 800px; padding-right: 5px; font-family: courier new; color: black; font-size: 10pt; overflow: auto; border-top: black 1px solid; border-right: black 1px solid; padding-top: 5px"&gt;   &lt;pre style="margin: 0em; background: #f4f4f4"&gt;&lt;/span&gt;&lt;span style="color: #808080"&gt;///&lt;/span&gt;&lt;span style="color: #008000"&gt; &lt;/span&gt;&lt;span style="color: #808080"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0em; background: none transparent scroll repeat 0% 0%"&gt;///&lt;/span&gt;&lt;span style="color: #008000"&gt; Returns list of installed locales&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0em; background: #f4f4f4"&gt;&lt;/span&gt;&lt;span style="color: #808080"&gt;///&lt;/span&gt;&lt;span style="color: #008000"&gt; &lt;/span&gt;&lt;span style="color: #808080"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0em; background: none transparent scroll repeat 0% 0%"&gt;///&lt;/span&gt;&lt;span style="color: #008000"&gt; &lt;/span&gt;&lt;span style="color: #808080"&gt;&amp;lt;param name=&amp;quot;LangList&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="color: #008000"&gt;Contains integer values of installed locales&lt;/span&gt;&lt;span style="color: #808080"&gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0em; background: #f4f4f4"&gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;public&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #0000ff"&gt;void&lt;/span&gt;&lt;span style="color: #000000"&gt; GetInstalledLanguages(&lt;/span&gt;&lt;span style="color: #0000ff"&gt;out&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #2b91af"&gt;IList&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;int&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;gt; LangList)&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0em; background: none transparent scroll repeat 0% 0%"&gt;&lt;span style="color: #000000"&gt;{&lt;/span&gt;&lt;/pre&gt;
&lt;/span&gt;

  &lt;pre style="margin: 0em; background: #f4f4f4"&gt;   LangList = &lt;/span&gt;&lt;span style="color: #0000ff"&gt;new&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #2b91af"&gt;List&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;int&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;gt;(&lt;/span&gt;&lt;span style="color: #2b91af"&gt;InputLanguage&lt;/span&gt;&lt;span style="color: #000000"&gt;.InstalledInputLanguages.Count);&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0em; background: none transparent scroll repeat 0% 0%"&gt;&lt;span style="color: #000000"&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/span&gt;

  &lt;pre style="margin: 0em; background: #f4f4f4"&gt;   &lt;/span&gt;&lt;span style="color: #0000ff"&gt;foreach&lt;/span&gt;&lt;span style="color: #000000"&gt; (&lt;/span&gt;&lt;span style="color: #2b91af"&gt;InputLanguage&lt;/span&gt;&lt;span style="color: #000000"&gt; lng &lt;/span&gt;&lt;span style="color: #0000ff"&gt;in&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #2b91af"&gt;InputLanguage&lt;/span&gt;&lt;span style="color: #000000"&gt;.InstalledInputLanguages)&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0em; background: none transparent scroll repeat 0% 0%"&gt;&lt;span style="color: #000000"&gt;   {&lt;/span&gt;&lt;/pre&gt;
&lt;/span&gt;

  &lt;pre style="margin: 0em; background: #f4f4f4"&gt;&lt;span style="color: #000000"&gt;       LangList.Add(lng.Culture.KeyboardLayoutId);&lt;/span&gt;&lt;/pre&gt;
&lt;/span&gt;

  &lt;pre style="margin: 0em; background: none transparent scroll repeat 0% 0%"&gt;&lt;span style="color: #000000"&gt;   }&lt;/span&gt;&lt;/pre&gt;
&lt;/span&gt;

  &lt;pre style="margin: 0em; background: #f4f4f4"&gt;&lt;span style="color: #000000"&gt;}&lt;/span&gt;&lt;/pre&gt;
&lt;/span&gt;

  &lt;pre style="margin: 0em; background: none transparent scroll repeat 0% 0%"&gt;&lt;span style="color: #000000"&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/span&gt;

  &lt;pre style="margin: 0em; background: #f4f4f4"&gt;&lt;/span&gt;&lt;span style="color: #808080"&gt;///&lt;/span&gt;&lt;span style="color: #008000"&gt; &lt;/span&gt;&lt;span style="color: #808080"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0em; background: none transparent scroll repeat 0% 0%"&gt;///&lt;/span&gt;&lt;span style="color: #008000"&gt; Returns list of installed locales&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0em; background: #f4f4f4"&gt;&lt;/span&gt;&lt;span style="color: #808080"&gt;///&lt;/span&gt;&lt;span style="color: #008000"&gt; &lt;/span&gt;&lt;span style="color: #808080"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0em; background: none transparent scroll repeat 0% 0%"&gt;///&lt;/span&gt;&lt;span style="color: #008000"&gt; &lt;/span&gt;&lt;span style="color: #808080"&gt;&amp;lt;param name=&amp;quot;LangList&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="color: #008000"&gt;Contains string values of installed locales&lt;/span&gt;&lt;span style="color: #808080"&gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0em; background: #f4f4f4"&gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;public&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #0000ff"&gt;void&lt;/span&gt;&lt;span style="color: #000000"&gt; GetInstalledLanguages(&lt;/span&gt;&lt;span style="color: #0000ff"&gt;out&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #2b91af"&gt;IList&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;string&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;gt; LangList)&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0em; background: none transparent scroll repeat 0% 0%"&gt;&lt;span style="color: #000000"&gt;{&lt;/span&gt;&lt;/pre&gt;
&lt;/span&gt;

  &lt;pre style="margin: 0em; background: #f4f4f4"&gt;   LangList = &lt;/span&gt;&lt;span style="color: #0000ff"&gt;new&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #2b91af"&gt;List&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;string&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;gt;(&lt;/span&gt;&lt;span style="color: #2b91af"&gt;InputLanguage&lt;/span&gt;&lt;span style="color: #000000"&gt;.InstalledInputLanguages.Count);&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0em; background: none transparent scroll repeat 0% 0%"&gt;&lt;span style="color: #000000"&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/span&gt;

  &lt;pre style="margin: 0em; background: #f4f4f4"&gt;   &lt;/span&gt;&lt;span style="color: #0000ff"&gt;foreach&lt;/span&gt;&lt;span style="color: #000000"&gt; (&lt;/span&gt;&lt;span style="color: #2b91af"&gt;InputLanguage&lt;/span&gt;&lt;span style="color: #000000"&gt; lng &lt;/span&gt;&lt;span style="color: #0000ff"&gt;in&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #2b91af"&gt;InputLanguage&lt;/span&gt;&lt;span style="color: #000000"&gt;.InstalledInputLanguages)&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0em; background: none transparent scroll repeat 0% 0%"&gt;&lt;span style="color: #000000"&gt;   {&lt;/span&gt;&lt;/pre&gt;
&lt;/span&gt;

  &lt;pre style="margin: 0em; background: #f4f4f4"&gt;&lt;span style="color: #000000"&gt;       LangList.Add(lng.Culture.TwoLetterISOLanguageName);&lt;/span&gt;&lt;/pre&gt;
&lt;/span&gt;

  &lt;pre style="margin: 0em; background: none transparent scroll repeat 0% 0%"&gt;&lt;span style="color: #000000"&gt;   }&lt;/span&gt;&lt;/pre&gt;
&lt;/span&gt;

  &lt;pre style="margin: 0em; background: #f4f4f4"&gt;&lt;span style="color: #000000"&gt;}&lt;/span&gt;&lt;/pre&gt;
&lt;/span&gt;

  &lt;pre style="margin: 0em; background: none transparent scroll repeat 0% 0%"&gt;&lt;span style="color: #000000"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9234802" width="1" height="1"&gt;</description></item><item><title>How to get user's current input locale?</title><link>http://blogs.msdn.com/b/snippets/archive/2008/11/28/how-to-get-user-s-current-input-locale.aspx</link><pubDate>Fri, 28 Nov 2008 11:03:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9150382</guid><dc:creator>Vitaly Zayko</dc:creator><slash:comments>2</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/snippets/rsscomments.aspx?WeblogPostID=9150382</wfw:commentRss><comments>http://blogs.msdn.com/b/snippets/archive/2008/11/28/how-to-get-user-s-current-input-locale.aspx#comments</comments><description>&lt;P&gt;Windows supports number of locales installed on the same computer. Current input locale could be important in some cases, for example in password request dialogs. Here is how you can find active locale in your WinForms App to warn user and prevent wrong submitting.&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;DIV style="BORDER-BOTTOM: black 1px solid; BORDER-LEFT: black 1px solid; PADDING-BOTTOM: 5px; PADDING-LEFT: 5px; WIDTH: 800px; PADDING-RIGHT: 5px; FONT-FAMILY: courier new; COLOR: black; FONT-SIZE: 10pt; OVERFLOW: auto; BORDER-TOP: black 1px solid; BORDER-RIGHT: black 1px solid; PADDING-TOP: 5px"&gt;&lt;PRE style="MARGIN: 0em; BACKGROUND: #f4f4f4"&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;// As a string (e.g. "en"):&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE style="MARGIN: 0em; BACKGROUND: white"&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;string&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; currentISOLangStr = &lt;/SPAN&gt;&lt;SPAN style="COLOR: #2b91af"&gt;InputLanguage&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;.CurrentInputLanguage.Culture.TwoLetterISOLanguageName;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE style="MARGIN: 0em; BACKGROUND: #f4f4f4"&gt;&lt;SPAN style="COLOR: #000000"&gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;/SPAN&gt;&lt;PRE style="MARGIN: 0em; BACKGROUND: white"&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;// As an integer (e.g. 1033)&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE style="MARGIN: 0em; BACKGROUND: #f4f4f4"&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;int&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; currentLangId = &lt;/SPAN&gt;&lt;SPAN style="COLOR: #2b91af"&gt;InputLanguage&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;.CurrentInputLanguage.Culture.KeyboardLayoutId;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE style="MARGIN: 0em; BACKGROUND: white"&gt;&lt;SPAN style="COLOR: #000000"&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;/DIV&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;By the way, Windows does that in login window.&lt;/P&gt;
&lt;DIV style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; DISPLAY: inline; FLOAT: none; PADDING-TOP: 0px" id=scid:0767317B-992E-4b12-91E0-4F059A8CECA8:b77f7867-69e8-4cb5-8aad-0e8774ff3e10 class=wlWriterEditableSmartContent&gt;Technorati Tags: &lt;A href="http://technorati.com/tags/Globalization" rel=tag mce_href="http://technorati.com/tags/Globalization"&gt;Globalization&lt;/A&gt;,&lt;A href="http://technorati.com/tags/C%23" rel=tag mce_href="http://technorati.com/tags/C%23"&gt;C#&lt;/A&gt;&lt;/DIV&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9150382" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/snippets/archive/tags/Globalization/">Globalization</category><category domain="http://blogs.msdn.com/b/snippets/archive/tags/C_2300_/">C#</category></item><item><title>Detect user writing system in run-time</title><link>http://blogs.msdn.com/b/snippets/archive/2008/11/12/detect-user-writing-system-in-run-time.aspx</link><pubDate>Wed, 12 Nov 2008 10:46:14 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9061531</guid><dc:creator>Vitaly Zayko</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/snippets/rsscomments.aspx?WeblogPostID=9061531</wfw:commentRss><comments>http://blogs.msdn.com/b/snippets/archive/2008/11/12/detect-user-writing-system-in-run-time.aspx#comments</comments><description>&lt;p&gt;As you know, some languages use left-to-right writing system and some – right-to-left. It is good pattern (and besides so easy in .NET Framework) to make other users to feel comfortable using your App even if no other localization is planned.&lt;/p&gt;  &lt;p&gt;Here is how to detect current writing system:&lt;/p&gt;  &lt;div style="width: 99.5%; font-family: courier new; color: black; font-size: 10pt; overflow: auto"&gt;   &lt;pre style="margin: 0em"&gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;if&lt;/span&gt;&lt;span style="color: #000000"&gt; (System.Globalization.&lt;/span&gt;&lt;span style="color: #2b91af"&gt;CultureInfo&lt;/span&gt;&lt;span style="color: #000000"&gt;.CurrentCulture.TextInfo.IsRightToLeft)&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0em"&gt;   &lt;/span&gt;&lt;span style="color: #2b91af"&gt;MessageBox&lt;/span&gt;&lt;span style="color: #000000"&gt;.Show(&lt;/span&gt;&lt;span style="color: #a31515"&gt;&amp;quot;This is Right-to-Left Writing system.&amp;quot;&lt;/span&gt;&lt;span style="color: #000000"&gt;);&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0em"&gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;else&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0em"&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;    &lt;/span&gt;&lt;span style="color: #2b91af"&gt;MessageBox&lt;/span&gt;&lt;span style="color: #000000"&gt;.Show(&lt;/span&gt;&lt;span style="color: #a31515"&gt;&amp;quot;This is Left-to-Right Writing system.&amp;quot;&lt;/span&gt;&lt;span style="color: #000000"&gt;);&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0em"&gt;&lt;span style="color: #000000"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;You can easily adopt your App to work with any system dynamically if you put this snippet to each of your form's Form_Load event:&lt;/p&gt;

&lt;div style="width: 99.5%; font-family: courier new; color: black; font-size: 10pt; overflow: auto"&gt;
  &lt;pre style="margin: 0em"&gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;this&lt;/span&gt;&lt;span style="color: #000000"&gt;.RightToLeft = System.Globalization.&lt;/span&gt;&lt;span style="color: #2b91af"&gt;CultureInfo&lt;/span&gt;&lt;span style="color: #000000"&gt;.CurrentCulture.TextInfo.IsRightToLeft ?&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0em"&gt;   &lt;/span&gt;&lt;span style="color: #2b91af"&gt;RightToLeft&lt;/span&gt;&lt;span style="color: #000000"&gt;.Yes : &lt;/span&gt;&lt;span style="color: #2b91af"&gt;RightToLeft&lt;/span&gt;&lt;span style="color: #000000"&gt;.No;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0em"&gt;&lt;span style="color: #000000"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;&lt;/p&gt;

&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:32c89b4e-34a1-47b4-a1e1-2dda08aa9e36" class="wlWriterEditableSmartContent"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/Globalization" rel="tag"&gt;Globalization&lt;/a&gt;,&lt;a href="http://technorati.com/tags/C%23" rel="tag"&gt;C#&lt;/a&gt;,&lt;a href="http://technorati.com/tags/CultureInfo" rel="tag"&gt;CultureInfo&lt;/a&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9061531" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/snippets/archive/tags/Globalization/">Globalization</category><category domain="http://blogs.msdn.com/b/snippets/archive/tags/CultureInfo/">CultureInfo</category><category domain="http://blogs.msdn.com/b/snippets/archive/tags/C_2300_/">C#</category></item><item><title>What we should know about CurrentCulture and CurrentUICulture?</title><link>http://blogs.msdn.com/b/snippets/archive/2008/11/10/what-we-should-know-about-currentculture-and-currentuiculture.aspx</link><pubDate>Mon, 10 Nov 2008 13:04:52 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9057124</guid><dc:creator>Vitaly Zayko</dc:creator><slash:comments>3</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/snippets/rsscomments.aspx?WeblogPostID=9057124</wfw:commentRss><comments>http://blogs.msdn.com/b/snippets/archive/2008/11/10/what-we-should-know-about-currentculture-and-currentuiculture.aspx#comments</comments><description>&lt;p&gt;From the first version .NET Framework has rich set of functions that allow you to make your Application to be World ready. And the most interesting place to start is &lt;strong&gt;System.Globalization&lt;/strong&gt; namespace which contains &lt;strong&gt;CultureInfo&lt;/strong&gt; class. But if you have explored this class already, you probably found that it has two very similar properties both return values of CultureInfo type: &lt;b&gt;CurrentCulture&lt;/b&gt; and &lt;b&gt;CurrentUICulture&lt;/b&gt;. So what is the difference between them?&lt;/p&gt;  &lt;p&gt;The short answer is &lt;b&gt;MUI&lt;/b&gt; (Multilingual User Interface): If on your or your customer's PC is installed a single language of Windows OS, these properties contains equal data, no matter what language is it. But some editions of Windows (Windows Vista Ultimate, for example) allow installing any number of additional languages (and whole bunch of locale settings like date and number formats) and switching between them.&lt;/p&gt;  &lt;p&gt;Let's look closer what if an additional UI language support is installed and&lt;b&gt; activated&lt;/b&gt;. I bolded the last word because if a MUI pack has been just installed but not switch to, both properties still keep the same data even if user has customized his locale settings. I ran the code below on Windows Vista en-US version with has customized date and time parameters as &amp;quot;dd/MM/yy HH:mm:ss&amp;quot; instead of traditional US formats:&lt;/p&gt;  &lt;div style="width: 99.5%; font-family: courier new; color: black; font-size: 8pt; overflow: auto"&gt;   &lt;pre style="margin: 0em; background: #f4f4f4"&gt;&lt;/span&gt;&lt;span style="color: #008000"&gt;// CurrentCulture demo:&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0em; background: white"&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;System.Globalization.&lt;/span&gt;&lt;span style="color: #2b91af"&gt;CultureInfo&lt;/span&gt;&lt;span style="color: #000000"&gt; currentCulture = System.Globalization.&lt;/span&gt;&lt;span style="color: #2b91af"&gt;CultureInfo&lt;/span&gt;&lt;span style="color: #000000"&gt;.CurrentCulture;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0em; background: #f4f4f4"&gt;&lt;/span&gt;&lt;span style="color: #2b91af"&gt;MessageBox&lt;/span&gt;&lt;span style="color: #000000"&gt;.Show(&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0em; background: white"&gt;   &lt;/span&gt;&lt;span style="color: #2b91af"&gt;String&lt;/span&gt;&lt;span style="color: #000000"&gt;.Format(&lt;/span&gt;&lt;span style="color: #a31515"&gt;&amp;quot;currentCulture.DateTimeFormat.FullDateTimePattern: {0}\r\ncurrentCulture.NumberFormat.CurrencySymbol: {1}\r\nDateTime.Now.ToString(currentCulture): {2}&amp;quot;&lt;/span&gt;&lt;span style="color: #000000"&gt;, &lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0em; background: #f4f4f4"&gt;&lt;span style="color: #000000"&gt;       currentCulture.DateTimeFormat.FullDateTimePattern,&lt;/span&gt;&lt;/pre&gt;
&lt;/span&gt;

  &lt;pre style="margin: 0em; background: white"&gt;&lt;span style="color: #000000"&gt;       currentCulture.NumberFormat.CurrencySymbol,&lt;/span&gt;&lt;/pre&gt;
&lt;/span&gt;

  &lt;pre style="margin: 0em; background: #f4f4f4"&gt;       &lt;/span&gt;&lt;span style="color: #2b91af"&gt;DateTime&lt;/span&gt;&lt;span style="color: #000000"&gt;.Now.ToString(currentCulture)), &lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0em; background: white"&gt;&lt;span style="color: #000000"&gt;   currentCulture.EnglishName);&lt;/span&gt;&lt;/pre&gt;
&lt;/span&gt;

  &lt;pre style="margin: 0em; background: #f4f4f4"&gt;&lt;span style="color: #000000"&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/span&gt;

  &lt;pre style="margin: 0em; background: white"&gt;&lt;/span&gt;&lt;span style="color: #008000"&gt;// CurrentUICulture demo:&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0em; background: #f4f4f4"&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;System.Globalization.&lt;/span&gt;&lt;span style="color: #2b91af"&gt;CultureInfo&lt;/span&gt;&lt;span style="color: #000000"&gt; currentUICulture = System.Globalization.&lt;/span&gt;&lt;span style="color: #2b91af"&gt;CultureInfo&lt;/span&gt;&lt;span style="color: #000000"&gt;.CurrentUICulture;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0em; background: white"&gt;&lt;/span&gt;&lt;span style="color: #2b91af"&gt;MessageBox&lt;/span&gt;&lt;span style="color: #000000"&gt;.Show(&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0em; background: #f4f4f4"&gt;   &lt;/span&gt;&lt;span style="color: #2b91af"&gt;String&lt;/span&gt;&lt;span style="color: #000000"&gt;.Format(&lt;/span&gt;&lt;span style="color: #a31515"&gt;&amp;quot;currentUICulture.DateTimeFormat.FullDateTimePattern: {0}\r\ncurrentUICulture.NumberFormat.CurrencySymbol: {1}\r\nDateTime.Now.ToString(currentUICulture)): {2}&amp;quot;&lt;/span&gt;&lt;span style="color: #000000"&gt;,&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0em; background: white"&gt;&lt;span style="color: #000000"&gt;       currentUICulture.DateTimeFormat.FullDateTimePattern,&lt;/span&gt;&lt;/pre&gt;
&lt;/span&gt;

  &lt;pre style="margin: 0em; background: #f4f4f4"&gt;&lt;span style="color: #000000"&gt;       currentUICulture.NumberFormat.CurrencySymbol,&lt;/span&gt;&lt;/pre&gt;
&lt;/span&gt;

  &lt;pre style="margin: 0em; background: white"&gt;       &lt;/span&gt;&lt;span style="color: #2b91af"&gt;DateTime&lt;/span&gt;&lt;span style="color: #000000"&gt;.Now.ToString(currentUICulture)),&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0em; background: #f4f4f4"&gt;&lt;span style="color: #000000"&gt;   currentUICulture.EnglishName);&lt;/span&gt;&lt;/pre&gt;
&lt;/span&gt;

  &lt;pre style="margin: 0em; background: white"&gt;&lt;span style="color: #000000"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;and here are results I got:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/snippets/WindowsLiveWriter/WhatweshouldknowaboutCurrentCultureandCu_B7CC/en_us_current_2.jpg"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="CurrentCulture on non-MUI PC" border="0" alt="CurrentCulture on non-MUI PC" src="http://blogs.msdn.com/blogfiles/snippets/WindowsLiveWriter/WhatweshouldknowaboutCurrentCultureandCu_B7CC/en_us_current_thumb.jpg" width="484" height="201" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/snippets/WindowsLiveWriter/WhatweshouldknowaboutCurrentCultureandCu_B7CC/en_us_currentui_2.jpg"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="CurrentUICulture on non-MUI PC" border="0" alt="CurrentUICulture on non-MUI PC" src="http://blogs.msdn.com/blogfiles/snippets/WindowsLiveWriter/WhatweshouldknowaboutCurrentCultureandCu_B7CC/en_us_currentui_thumb.jpg" width="494" height="201" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;As you can see, both &lt;b&gt;CurrentCulture&lt;/b&gt; and &lt;b&gt;CurrentUICulture&lt;/b&gt; return exactly the same locale name (at the title bar) and date/time formats.&lt;/p&gt;

&lt;p&gt;Now I'm going to activate preinstalled Russian MUI and re-run the test.&lt;/p&gt;
&lt;a href="http://blogs.msdn.com/blogfiles/snippets/WindowsLiveWriter/WhatweshouldknowaboutCurrentCultureandCu_B7CC/lang_opt_2.jpg"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Lang settings - choose a display language" border="0" alt="Lang settings - choose a display language" src="http://blogs.msdn.com/blogfiles/snippets/WindowsLiveWriter/WhatweshouldknowaboutCurrentCultureandCu_B7CC/lang_opt_thumb.jpg" width="481" height="552" /&gt;&lt;/a&gt; 

&lt;p&gt;And here are new results:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/snippets/WindowsLiveWriter/WhatweshouldknowaboutCurrentCultureandCu_B7CC/en_us_current_mui_2.jpg"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="CurrentCulture on MUI PC" border="0" alt="CurrentCulture on MUI PC" src="http://blogs.msdn.com/blogfiles/snippets/WindowsLiveWriter/WhatweshouldknowaboutCurrentCultureandCu_B7CC/en_us_current_mui_thumb.jpg" width="484" height="201" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/snippets/WindowsLiveWriter/WhatweshouldknowaboutCurrentCultureandCu_B7CC/en_us_currentui_mui_2.jpg"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="CurrentUICulture on MUI PC" border="0" alt="CurrentUICulture on MUI PC" src="http://blogs.msdn.com/blogfiles/snippets/WindowsLiveWriter/WhatweshouldknowaboutCurrentCultureandCu_B7CC/en_us_currentui_mui_thumb.jpg" width="468" height="201" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;&lt;b&gt;CurrentCulture&lt;/b&gt; in second test wasn't changed although &lt;b&gt;CurrentUICulture&lt;/b&gt; was: the UI culture contains default formats for Russian language and even my customization has no any affect. &lt;/p&gt;

&lt;p&gt;Why it is so important?&lt;/p&gt;

&lt;p&gt;If your App just output some data (let say from a database) then using wrong Culture info settings could confuse your users (say &amp;quot;1/3/08 – is it January or March?) but no runtime exception will happen. &lt;/p&gt;

&lt;p&gt;But if you expect some user input when you should take a string, parse it into correct format and store or operate with it, wrong locale settings could break your App if format exceptions won't be correctly handled.&lt;/p&gt;

&lt;p&gt;Fortunately every culture-critical function in .NET Framework like ToString() or Parse() has several overloads where default (without any parameters) function takes CurrentCulture as a locale information. If I run the code below on my MUI system, the first line will be able to parse my input string successfully:&lt;/p&gt;

&lt;div style="width: 99.5%; font-family: courier new; color: black; font-size: 8pt; overflow: auto"&gt;
  &lt;pre style="margin: 0em; background: #f4f4f4"&gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;string&lt;/span&gt;&lt;span style="color: #000000"&gt; inputDate = &lt;/span&gt;&lt;span style="color: #a31515"&gt;&amp;quot;15/11/2008 12:00&amp;quot;&lt;/span&gt;&lt;span style="color: #000000"&gt;;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0em; background: white"&gt;&lt;/span&gt;&lt;span style="color: #2b91af"&gt;DateTime&lt;/span&gt;&lt;span style="color: #000000"&gt; parseDateCurrentCulture = &lt;/span&gt;&lt;span style="color: #2b91af"&gt;DateTime&lt;/span&gt;&lt;span style="color: #000000"&gt;.Parse(inputDate);&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0em; background: #f4f4f4"&gt;&lt;span style="color: #000000"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;but this one:&lt;/p&gt;

&lt;div style="width: 99.5%; font-family: courier new; color: black; font-size: 8pt; overflow: auto"&gt;
  &lt;pre style="margin: 0em; background: #f4f4f4"&gt;&lt;/span&gt;&lt;span style="color: #2b91af"&gt;DateTime&lt;/span&gt;&lt;span style="color: #000000"&gt; parseDateUICulture = &lt;/span&gt;&lt;span style="color: #2b91af"&gt;DateTime&lt;/span&gt;&lt;span style="color: #000000"&gt;.Parse(inputDate,&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0em; background: white"&gt;   System.Globalization.&lt;/span&gt;&lt;span style="color: #2b91af"&gt;CultureInfo&lt;/span&gt;&lt;span style="color: #000000"&gt;.CurrentUICulture);&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0em; background: #f4f4f4"&gt;&lt;span style="color: #000000"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;fails with FormatException.&lt;/p&gt;

&lt;p&gt;So based on these experiments, it's more safe and preferred to use CurrentCulture and try..catch blocks to handle possible exceptions especially when you expect some locale-critical user input:&lt;/p&gt;

&lt;div style="width: 99.5%; font-family: courier new; color: black; font-size: 8pt; overflow: auto"&gt;
  &lt;pre style="margin: 0em; background: #f4f4f4"&gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;try&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0em; background: white"&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;{&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0em; background: #f4f4f4"&gt;   &lt;/span&gt;&lt;span style="color: #2b91af"&gt;DateTime&lt;/span&gt;&lt;span style="color: #000000"&gt; parseDateCurrentCulture = &lt;/span&gt;&lt;span style="color: #2b91af"&gt;DateTime&lt;/span&gt;&lt;span style="color: #000000"&gt;.Parse(inputDate);&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0em; background: white"&gt;&lt;span style="color: #000000"&gt;}&lt;/span&gt;&lt;/pre&gt;
&lt;/span&gt;

  &lt;pre style="margin: 0em; background: #f4f4f4"&gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;catch&lt;/span&gt;&lt;span style="color: #000000"&gt; (&lt;/span&gt;&lt;span style="color: #2b91af"&gt;FormatException&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0em; background: white"&gt;&lt;span style="color: #000000"&gt;{&lt;/span&gt;&lt;/pre&gt;
&lt;/span&gt;

  &lt;pre style="margin: 0em; background: #f4f4f4"&gt;   &lt;/span&gt;&lt;span style="color: #2b91af"&gt;MessageBox&lt;/span&gt;&lt;span style="color: #000000"&gt;.Show(&lt;/span&gt;&lt;span style="color: #a31515"&gt;&amp;quot;Wrong input format!&amp;quot;&lt;/span&gt;&lt;span style="color: #000000"&gt;);&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0em; background: white"&gt;&lt;span style="color: #000000"&gt;}&lt;/span&gt;&lt;/pre&gt;
&lt;/span&gt;

  &lt;pre style="margin: 0em; background: #f4f4f4"&gt;&lt;span style="color: #000000"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;&lt;/p&gt;

&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:429dadfb-d820-4b3e-8627-345f3f77a267" class="wlWriterEditableSmartContent"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/localization" rel="tag"&gt;localization&lt;/a&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9057124" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/snippets/archive/tags/Globalization/">Globalization</category><category domain="http://blogs.msdn.com/b/snippets/archive/tags/Localization/">Localization</category></item></channel></rss>
