Language Packs

Overview

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.

What's in a 3ds Max Language Pack?

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:

  1. 3ds Max binaries: Binaries that contain localizable resources are split into two parts, the original DLL (modified to be language neutral) and a resource only DLL with the extension .mui (e.g. 3dsmax.exe and <langdir>/3dsmax.exe.mui). We use a Microsoft supplied tool MUIRCT.exe to do this split but must post process the files slightly to support Windows XP. The Microsoft MUI system requires that the .mui file be in a subdirectory (<langdir>) of the directory that contains the Language Neutral (LN) binary itself. NOTE: some DLLs (the .Net DLLs for example) don't use the MUI system and their resource DLLs are stored, unchanged, in the <langdir>.
  2. MAXScript files (.ms, .mcr, etc): These files are split into the language neutral .ms file and the Maxscript resource file .ms.res. The .res files live in the root <langdir> in the same relative place as the original file. For third parties the .res files can also live relative to the base file so they don't need to install on top of the LN installer. Please refer to Maxscript's documentation for further explanations.
  3. UI files (.cui, .kbd, .mnu, .clr, .qop, .xaml): These file, in fact the entire UI directory, are in the root <langdir>
  4. Essential Skills Movies: These are large and constitute 90% of the size of the LPs.
  5. Configuration files and miscellaneous files (.ini, max.tres, maxscrpt.lcl): These files are in various locations under the language directory.

Quick-and-Dirty Implementation Notes for Plug-in Developers

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.

Step 1

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...
}
  • The header file systemutilities.h must be added as an #include
  • The directory search list for headers must have the Max SDK inclue directory to get to the include file.
  • The library file maxutil.lib must be linked to the project.

Step 2

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.

Step 3

Have your resource-only satellite DLLs localized, along with other content, in order to have a fully usable set of localized files.

Step 4

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.

Step 5

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.

Step 6

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.

Step 7

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.

Table of Localized Languages

3ds Max is localized for the following languages:

Locale LCID (Hex) LCID (Decimal) Name
en-US 0409 1033 English
de-DE 0407 1031 Deutsch (German)
fr-FR 040C 1036 Français (French)
ja-JP 0411 1041

日本 (Japanese)

ko-KR 0412 1042

한국어 (Korean)

zh-CN 0804 2052

中文 (Simplified Chinese)

NOTE:Code pages have become an obsolete localization mechanism in 3ds Max now that its strings are in Unicode. Code pages cannot be used in conjunction with Language Packs.