I am adding support for multiple languages in my MonoMac application (english and swedish). Some of my resources are based on resx-files, hence Thread.CurrentThread.CurrentUICulture determines which language is used for these resources.<div>

<br></div><div>I was expecting Thread.CurrentThread.CurrentUICulture to be automatically set up to the appropriate culture based on the user preferred language (i.,e NSLocale.PreferredLanguages) or fall back to the neutral culture if not supported. However Thread.CurrentThread.CurrentUICulture does always seem to be set to the same culture regardless of user preferred language.</div>

<div><br></div><div>I currently have the created the following workaround (see code below) to programmatically setup CurrentCulture and CurrentUICulture. The most annoying part about it is that Thread.CurrentThread.CurrentCulture (used for number formatting etc) does not accept a neutral culture (e.g, "sv"), if it did we could have mapped directly from NSBundle.MainBundle.PreferredLocalizations[0] to a CultureInfo instance.</div>

<div><br></div><div>- However I would appreciate if anyone got a better solution to setup the current culture based on the user preferred language and the culture supported by the included resource files (i.e, resx).</div>

<div>- Also I would like to know what is determining the default Thread.CurrentThread.CurrentUICulture ?</div><div>







<p class="p1"><span class="s1">string</span>[] preferredLocalizations = NSBundle.MainBundle.PreferredLocalizations; //Since we also use lproj directories for XIB internationalization we can get the most appropriate neutral language from here.</p>

<p class="p1"><span class="s1">string</span> preferredLocalization = preferredLocalizations[<span class="s2">0</span>];</p>
<p class="p2"><span class="s1">string</span> cultureName = <span class="s2">"en-US"</span>;</p>
<p class="p2"><span class="s1">if</span> (preferredLocalization.Equals(<span class="s2">"sv"</span>)) {</p>
<p class="p3"><span class="s3"><span class="Apple-tab-span"></span><span class="Apple-tab-span"></span><span class="Apple-tab-span"></span><span class="Apple-tab-span"></span>  cultureName = </span><span class="s2">"sv-SE"</span><span class="s3">;   </span></p>


<p class="p1"><span class="Apple-tab-span">     </span><span class="Apple-tab-span">      </span><span class="Apple-tab-span">      </span>}</p>
<p class="p1"><span class="Apple-tab-span">     </span><span class="Apple-tab-span">      </span><span class="Apple-tab-span">      </span>CultureInfo culturInfo = <span class="s1">new</span> CultureInfo(cultureName);</p>
<p class="p2"><span class="s3">Thread.CurrentThread.CurrentCulture = culturInfo;   </span>//CurrentCulture does not accept a neutral culture e.g, "sv", when specifying a neutral culture an exception is thrown with the message:"Culture 'sv' is a neutral culture. It cannot be used in formatting and parsing and therefore cannot be set as the thread", hence we workaround this by setting it to en-US or sv-SE in the if statement above.</p>


<p class="p3"><span class="s3"><span class="Apple-tab-span">    </span><span class="Apple-tab-span">      </span><span class="Apple-tab-span">      </span>Thread.CurrentThread.CurrentUICulture = culturInfo; </span>//CurrentUICulture accepts a neutral culture, but CurrentCulture does not, hence the if statement above.</p>

<p class="p3">Any input would be appreciated</p><p class="p3">Best Regards, </p><p class="p3">Johan</p><p class="p3"><br></p><p class="p3"><br></p></div>