title: Does ResourceManager load all cultures automatically?
body: <p>I have a class library - call it Framework. In the assemblyinfo.cs, I have:</p>
  
  <pre><code>[assembly: NeutralResourcesLanguage("en-US")]
  </code></pre>
  
  <p>Under a \Resources\ directory, I have <strong>FrameworkResources.resx</strong> and <strong>FrameworkResources.fr-FR.resx</strong></p>
  
  <p>In a helper class, I am using this as my resource manager:</p>
  
  <pre><code>private static ResourceManager manager = new ResourceManager("Framework.Resources.FrameworkResources", Assembly.GetExecutingAssembly());
  </code></pre>
  
  <p>In code, if I do something like this:</p>
  
  <pre><code>String message = manager.GetString("ArgumentNullExceptionMessage", CultureInfo.CurrentCulture);
  </code></pre>
  
  <p>I can debug and hover over CurrentCulture and it (and UICulture) are set to fr-FR, yet this ALWAYS brings back my default, english message - NOT the French message from the fr-FR resource file.</p>
  
  <p>Should ResourceManager automatically wire that up, or should I be writing code to query the current culture, then open the right file? Am I incorrect in assuming that Resource Manager will know to get the fr-FR string, because that is the current culture?</p>
  
  <p>I'm not sure why this isn't working.</p>
  
  <p><strong>UPDATE:</strong>
  I have satellite assemblies, so believe the compilation part is going OK. I think the problem is in my resource manager. I tried using ResourceSets and using ResourceManager explicitly like this:</p>
  
  <pre><code>ResourceManager manager =
      new ResourceManager("Framework.Resources.FrameworkResources",
          Assembly.GetExecutingAssembly());
  
  Debug.WriteLine("de-DE : " + manager.GetString(resourceName, new CultureInfo("de-DE")));
  Debug.WriteLine("el    : " + manager.GetString(resourceName, new CultureInfo("el")));
  Debug.WriteLine("es-MX : " + manager.GetString(resourceName, new CultureInfo("es-MX")));
  Debug.WriteLine("fr-FR : " + manager.GetString(resourceName, new CultureInfo("fr-FR")));
  Debug.WriteLine("hi    : " + manager.GetString(resourceName, new CultureInfo("hi")));
  Debug.WriteLine("zh-CN : " + manager.GetString(resourceName, new CultureInfo("zh-CN")));
  </code></pre>
  
  <p>That results in this:</p>
  
  <blockquote>
  <pre><code>de-DE : Argument '%ArgumentName%' cannot be null or empty.
  el    : Argument '%ArgumentName%' cannot be null or empty.
  es-MX : Argument '%ArgumentName%' cannot be null or empty.
  fr-FR : Argument '%ArgumentName%' cannot be null or empty.
  hi    : Argument '%ArgumentName%' cannot be null or empty.
  zh-CN : Argument '%ArgumentName%' cannot be null or empty.
  </code></pre>
  </blockquote>
  
  <p>So, even though everything is in place, my resource manager simply isn't trying to look in those satellite assemblies. And to be clear, in those assemblies, I have the translated version of the string above - so it's definitely reading from my default FrameworkResources.resx file, instead of the culture-specific ones.</p>