As a User logs in, the system looks to see what language they are assigned (Epicor User record) and it does a quick check to see if that language has been updated since it was last run on that Client. If there was a change since last run or the language was not previously installed, the Client generates the set of Client side Satellite resource Assemblies needed by the menu when it runs - the Menu itself is translated as it is retrieved and is a memory resident structure.
The Satellite Assemblies are built by taking the Resource strings of the base UI DLLs and then getting the language specific replacement strings from the Server (database). The Assemblies are compiled and written to a language directory created under the Client directory. The usage and location of the Satellite Assemblies are pure .NET. When I set my user to Mexican Spanish and logged in, the system created the directory folder “es-MX” in my Client directory and wrote the compiled resource DLLs to it.
Once the Menu has loaded, any time you attempt to launch a UI that does not yet have a Satellite Assembly created, the system is supposed to detect that condition and then create the Satellite Assemblies for all the Assemblies used / referenced by the UI being loaded. There is also a “mass generation” process that will create all the Satellite Assemblies at once so there is no intermittent delay with loading a UI.
If you are getting the Menu in the correct language but not the UI Forms, that is an indication the system is not able to create or write out the Satellite resource DLLs. This can be caused by the physical folder location of the Client (is it in a Windows Managed Structure like Program Files), the user permissions to the Client Folder, and sometimes virus prevention routines will also disallow.
You need to make sure that your Windows User has the necessary permissions to update the Client Directory.