With the coming localized Autodesk Exchange stores, it is becoming more important for plug-in developers to localize their software. The exchange store provides a unique opportunity to be in front of customers all over the world. The best experience for a customer is to provide your software in their localized language.
This post is meant to provide the resources to help you understand the localization of 3ds Max plug-ins and supporting customization files.
C++ based plug-ins
3ds Max is now using the Unicode string handling procedures, so you must first make sure your plug-ins are fully Unicode compliant. For localization of the strings, there are two different approaches to localization for 3ds Max.
Unicode
Your C++ based plugins are now required to be compiled as supporting Unicode strings. There is a complete section detailing all the aspects of this here:
Language Pack methodology
Note that 3ds Max is now making use of language packs since the 2013 release as the primary localization technique. This technology requires “binary translation”. There are a variety of tools out there that can help with the binary approach to translation (including the Visual Studio resource editor, but it is not very convenient for a large number of strings). One such commercial tool is by SDL called Passolo. The binary translation approach is recommended because it will work with the 3ds Max installation and startup process that supports all languages where 3ds Max is localized and requires only a single call in your source code that performs the language selection.
Language packs are based on Microsoft technology called Windows Multilingual User Interface (MUI). You can find details on this technology here:
http://msdn.microsoft.com/en-us/goglobal/bb978454
The most comprehensive explanation for recent 3ds Max versions (2013 and later) using the MUI language pack technology is provided in the 3ds Max SDK help information. See this topic for details:
Here you will find information about what is included with a 3ds Max based language pack. This includes both the plug-in localization resource binaries, and also supporting files including MAXScript, UI files, and configuration file information.
An example of this approach is provided here:
http://adnsparks.autodesk.com/adn/servlet/item?siteID=6681818&id=18271211&linkID=6927897
or here 3ds_max_language_packs_supplement_edition.pdf (857.6K)
Resource File methodology
You may instead choose to use the older technique of localizing your resource files and building separate resource only DLLs for each language. Here you will maintain separate resource files, each with the translated strings. During the startup, you will determine the language and the load the appropriate language DLL. Complete details are described in the 3ds Max SDK help here:
MAXScript
MacroScripts that are used for CUI scripting aspects in 3ds Max has localization support. There is a topic here that describes the technique for category globalization:
Then you can also provide localized strings via compile script resources. This process is described here:
Note that there are also changes to support Unicode and file I/O. MAXScript Unicode details are provided here:
.NET API
For a managed plug-in using the .NET API, you would simply use the satellite assembly approach that is provided by the .NET Framework. This requires you to build a separate satellite assembly for each language and supports a hierarchical approach to language and region specific language. For details, see here:
http://msdn.microsoft.com/en-us/library/f45fce5x(v=vs.100).aspx
To be consistent with other 3ds Max assemblies, it is recommended to add this attribute to your .\Properties\AssemblyInfo.cs file:
[assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.MainAssembly)]
Additionally, you can use this .NET framework technique to perform locale-specific conversions:
public static readonly CultureInfo DefaultCulture =new CultureInfo ("en-US") ;
To support the other standard languages, you would typically include the default en-US resources in the DLL assembly that has the code, and the additional target locales have a satellite assembly called <name_of_DLL>.resources.dll
If you need to support localization in a mixed-mode plugin, where you have some native C++ mixed with managed C++, then there is one technique that can help identify the locale at runtime. For example:
CultureInfo^ CommCtrConnector::CurrentUICulture () { CultureInfo^ ret =gcnew CultureInfo (MaxSDK::Util::GetLocaleValue ()) ; return ret ; }
Other Supporting Files
If you also have other supporting files, such has fixed menus or toolbars defined in the CUI system, then you need to localize those separately. Those should be placed in the appropriate language folder during your installation, and 3ds Max will use them when it is running in those languages.
Comments
You can follow this conversation by subscribing to the comment feed for this post.