I want to understand how such a code works to retrieve the resource of the specified ThreadUI Culture?
var value = resourceAssembly
      .GetType("Namespace.FooBar")
      .GetProperty("Hello")
      .GetValue(null, null) as string;
If my ThreadUI Culture is english, I get the english value. If it is german, I get the german value. Ok, fine. But how does it work inside?
 
  
                     
                        
If you open up the generated C# file corresponding to that type, you'll see something like this:
internal static string Hello {
    get {
        return ResourceManager.GetString("Hello", resourceCulture);
    }
}
Unless you specific resourceCulture (by setting the Culture property) it will still be null, so the above will be equivalent to:
return ResourceManager.GetString("Hello", null);
The ResourceManager property returns a System.Resources.ResourceManager, and if you look at the docs for ResourceManager.GetString(string, CultureInfo) you'll see:
In desktop apps, if culture is
null, theGetString(String, CultureInfo)method uses the current UI culture obtained from theCultureInfo.CurrentUICultureproperty.
So that's all it is - just a call to a library method which uses the current UI culture by default.
 
                    See more on this question at Stackoverflow