title: How to localize string resource lookups from all threads in an application?
body: <p>The recommended best practice is to set the current culture of the application's thread to enable resource look ups to use the correct language.</p>
  
  <p>Unfortunately, this does not set the culture for any other threads.  This is especially a problem for thread-pool threads.</p>
  
  <p>The question is:  how is it possible to set enable string resource lookups to be correctly localised from thread pool threads with the least amount of extra plumbing code?</p>
  
  <hr>
  
  <p>Edit:</p>
  
  <p>The problem is this code which is generated from the string table.</p>
  
  <pre><code>internal static string IDS_MYSTRING {
      get {
          return ResourceManager.GetString("IDS_MYSTRING", resourceCulture);
      }
  }
  </code></pre>
  
  <p>The 'resourceCulture' in this case is not set correctly for the thread pool thread.  I could just call 'ResourceManager.GetString("IDS_MYSTRING", correctCulture);' but that would mean losing the benefits of compile time checking that the string exists.</p>
  
  <p>I'm now wondering whether the fix is to change the string table visibility to public and to set the Culture property of all assemblies enumerated using reflection.</p>