A Language Pack (LP) is a set of files that can be installed on top of a base product to allow that product to present its User Interface (UI) in another language. An LP is distributed as a separate installer that can only install on top of an already installed Language Neutral (LN) base product. English is just another language in this regard so without an LP installed the product won't work.
The short answer is anything that's in any of the various "en-US" directories (<langdir> below refers to "en-US" for English or the appropriate directory for other languages) spread throughout Max's installed directory structure. There are several types of content:
If you only want to implement English-only plug-ins (i.e. not localize them), or your plug-in doesn't have any localizable resources, you may ignore the following and not implement any of the language pack related code or other build or installer language pack functionality. However, we recommend testing all plug-ins with language packs as a precaution.
If you want to localize your plug-in and match it up with Max's running locale as best as possible, but do not want to be limited by the XP compromise or any other aspect of Max's language packs implementation, you can still take advantage of some of its functionality. For instance, you can probably get by with retrieving Max's runtime locale to implement your own localization functionality, as long as you have a hard coded default locale (usually en-US) if the locale returned by Max is not supported by your plug-in. This is especially valid if you want to implement language packs with the older method provided by Microsoft, which required implementing custom versions of the resource retrieval calls (FindResource(), LockResource(), etc.). This is explained in more detail in MSDN.
On the other hand, if you want to implement functionality that takes advantage of Max's implementation of Language Packs, and aware of the XP compromise (and plan accordingly), the following gives you a quick-and-dirty explanation at each step that builds on the information in previous sections.
Add the required call to MaxSDK::Util::UseLanguagePackLocale() below to your DllMain or _beginthread() and _beginthreadex() functions.
#include “systemutilities.h” BOOL WINAPI DllMain(HINSTANCE hinstDLL,ULONG fdwReason,LPVOID lpvReserved) { switch(fdwReason) { case DLL_PROCESS_ATTACH: MaxSDK::Util::UseLanguagePackLocale(); // Required!! // ... break; // Etc... }
After getting your program to compile and link, use MUIRCT.exe to create satellite DLLs for all of your DLLs that need to be localized.
Have your resource-only satellite DLLs localized, along with other content, in order to have a fully usable set of localized files.
In order for the XP compromise to work with your plug-in, retrofit your en-US localized content into the LN binaries and set them to the 'neutral-neutral' locale. Otherwise, your plug-in will not work at all in Windows XP, as the resource retrieval code will fail to find any resources.
Test your localized file set by putting them in appropriate directories. The satellite-only DLLs must match up with their locale directory name; any mismatch will result in the plug-in failing on being unable to find resources in Vista and Windows 7. Do not forget to also test in XP for the compromise functionality, as it cannot be simulated in Vista and Windows 7 under normal circumstances.
Implement your core LN installer and your language pack installers. Make sure the core is installed first, and then one or more language pack installers.
Test the resulting installers with the language switching option, and various combinations. Please remember that Max 32 bit, Max 64 bit, Design 32 bit, and Design 64 bit are all separate targets, each one with their own 'core' LN installer, and set of language pack installers. To be clear, that means there are four 'core' LN installers and six language pack installers for each of those four. Your plug-ins must follow this format to be fully compliant with all possible product installations.
3ds Max is localized for the following languages: