Overview
The MUI technology is integrated into the Windows OS and can be leveraged in an application by storing localizable assets as resources in a prescribed way and using MUI-enabled win32 functions to read the resources. A relatively simple implementation of MUI in an application stores the strings of each language in a string-table resource of the binary file and uses the win32 function LoadString to load strings at runtime. No other MUI related configuration or code is required. The following optional capabilities of MUI can be implemented if desired: * Store the resources of each language in a separate DLL in order to enable deployment/installation flexibility * An application can use dedicated MUI functions to provide more control of localizable asset consumption such as using a language other than the system-defined user preference * Localizable assets can be stored in a format other than resource The design of MUI attempts to provide a common way to store application localization information that alleviates limitations of more traditional and monolithic designs for localization such as including all languages in the application logic files (i.e. resources). With MUI, the following deployment scenarios are possible: * Add support for a language by installing only languages files -- without modifying application logic or other language files * Add new features and fix bugs by installing only application logic files -- without modifying the installed language filesTerminology
The following MUI related terms are either used in or derived from the Microsoft documentation. Language-neutral (LN): Describes something that conveys a meaning regardless of the languages of the viewer, such as an image without text or other localizable aspects LN resource: a resource that is shared by and installed for all language versions of the application LN file: Windows binary containing the application logic and language-neutral resources Language-specific (LS): Describes something that has significantly different meaning based on the languages of the viewer. The most common LS items are interface strings but can be other items such as an image with text in it LS resource file: A set of resources localized for one language; a.k.a. MUI fileLanguage Preferences
A language selection is stored by the system for the system (shared by all users and maybe used as default for a new user) and for each user. These selections can be modified by the user via the system Control Panel but cannot be modified by an application. These preferences control the language that the OS uses for UI elements. Applications can also use these preferences, and via MUI-enabled system functions (such as LoadString) the use is automatic and transparent (requires no MUI-specific code to use). But use of these preferences is optional and customizable. An application can be designed to ignore the language preferences. Or it may use them in ways other than that provided by MUI-enabled system functions. An application can use MUI functions to read language preferences -- that default to the user selection ssumedand are a list of languages in preference order. These preferences are provided at the system, user, process and thread levels ssumed that changing at a higher level modifies the preferences for lower levels An application can modify these language preference lists (via SetThreadPreferredUILanguages and other functions) in order to influence the behavior of MUI. For example:Resource Storage
MUI provides support for localized resources stored in Windows binary (a.k.a. Win32 PE) files (DLL, EXE, SYS) -- usually DLL files. The resources for a language can either be stored in the application binary or in a MUI (a.k.a. LS) file -- one per language. For MUI to find resources, a MUI file must be in the same directory as its associated LN file and be named the same as the LN file plus ".''LCID''.mui". For example, for LN file my-lib.dll, the MUI file for en-US would be named my-lib.dll.0409.mui. String resources are coded as string table like so: LANGUAGE LANG_ENGLISH, SUBLANG_NEUTRAL STRINGTABLE BEGIN 1 L"message text" ENDResource Retrieval
Several win32 functions that read application resources are MUI-enabled, including LoadString, FormatMessage, and LoadImage. Each function attempts to read a resource for a language as selected by global language preferences, from application resources or associated MUI files (co-located with LN file and following naming convention). Each uses the global language preferences to choose a language that is available. If loading the resource for the first preferred language fails either because the MUI file does not exist or the resource does not exist in the MUI file, the function will try the next preferred language and so on until all preferences have been tried. If load fails for all preferred languages, then tries the LN file. The most commonly used function is LoadString which loads strings from a string-table resource. Example using LoadString:Non-Resource Storage and Retrieval
MS documentation recommends storing UI assets as resources since MUI fully supports retrieving from this storage, but it notes that MUI supports any other file format, such as XML, JSON or flat text file. This implies that using the resource retrieval aspect of MUI is not required for an application to be MUI-enabled. An application can use its own, custom UI asset retrieval logic. To be MUI-enabled, the application must use the system language preferences. The custom UI asset retrieval logic might optionally use the MUI function GetFileMUIPath to leverage the MUI file location and naming conventions.Other Aspects
The MS MUI documentation describes the following concepts, but it is unclear how they relate to MUI and what value they offer: * Resource Configuration File * Registry String RedirectionImplementing
Basic tasks to support/implement MUI: * Use LoadString in the application code to read resources; it uses user preference, system settings to read resources that are in the language that is most preferred by the user based on availability * Author resource source code (RC) for each language; recommended to store each language in a separate RC file Upon completing the basic tasks, an application is MUI-enabled. But there are other features of MUI that an application can optionally take advantage of. The basic tasks imply storing all languages in the resources of the application binary -- which means it is ''not'' language neutral. This structure provides all runtime localization benefits of MUI and simple, single-file deployment but does not allow for deployment flexibility that MUI provides. In order to take advantage of the deployment flexibility: *Configure the application binary project to exclude all LS resources -- making it the LN file *Configure project(s) to build each language to a resource DLL; named the same as the LN file + "''LCID''.mui" -- MUI files *Deploy/install MUI files in same directory as the LN file To store localized assets in formats other than resource, the application must implement a mechanism for reading assets at runtime based on the language preference system settings (see GetThreadUILanguage). In other words, the application loads UI assets based on the system language preference settings without using LoadString. The application might leverage the MUI file-per-language location and naming convention by using GetFileMUIPath.Advantages over Localized Version
The MUI technology was developed in response and as an improvement to ''localized versions'' -- an older technology for globalizing and deploying software packages. This section describes the differences and advantages of MUI over localized versions. Windows localized via a MUI pack achieves the same goal as a localized version, but there are key differences. While both display menus and dialogs in the targeted language, only a localized version uses translated file and folder names. A localized version of Windows translates the base operating system, as well as all included programs , including file and folder names , objects names , strings in registry , and any other internal strings used by Windows into a particular language. Localized versions of Windows support upgrading from a previous localized version and user interface resources are completely localized, which is not the case for MUI versions of a product. A MUI version does not contain translated administrative functions such as registry entries and items inHistory
MUI was introduced withWindows 2000 and Windows XP
MUI products for these versions were available only through volume agreements from Microsoft. They were not available through retail channels. However, some OEMs distributed the product.Languages in Windows XP
Up to= Set 1
= * Deutsch * Français * 한국어 * 中文 (简体) * 中文 (繁體) * 日本語= Set 2
= * Español * Italiano * Nederlands * Português (Brasil) * Svenska * עברית * العربية= Set 3
= * Čeština * Dansk * Norsk bokmål * Suomi * Русский= Set 4
= * Magyar * Polski * Português (Portugal) * Türkçe * Ελληνικά= Set 5
= * Eesti * Hrvatski * Latviešu * Lietuvių * Română * Slovenčina * Slovenščina * Български * ไทยWindows Vista
Windows 7
MUI is available toList of languages in Windows 7 (PC)
At launch, the following 15 language packs were released (Chinese (Hong Kong) is not available on mobile): * Deutsch * English (United Kingdom) * English (United States) * Español * Français * Italiano * Nederlands * Polski * Português (Brasil) * Русский * 한국어 * 中文 (简体) * 中文 (繁體) * 中文 (香港) * 日本語 On October 31, 2009, the remaining 22 language packs were released (Estonian, Croatian, Latvian, Lithuanian, Romanian, Slovak, Slovenian, Serbian, Bulgarian, Hebrew, Arabic, and Thai are not available on mobile): * Čeština * Dansk * Eesti * Hrvatski * Latviešu * Lietuvių * Magyar * Norsk bokmål * Português (Portugal) * Română * Slovenčina * Slovenščina * Srpski * Suomi * Svenska * Türkçe * Ελληνικά * Български * Українська * עברית * العربية * ไทยList of languages in Windows Phone 7
At launch, only six languages were supported. * Deutsch * English (United Kingdom) * English (United States) * Español * Français * Italiano With the launch of Windows Phone 7.5 on September 27, 2011, twenty more languages are added (Turkish and Ukrainian are not supported as display languages until Windows Phone 8). The first LIPs for Windows Phone 7 were Indonesian and Malay with the Tango update. * Bahasa Indonesia * Bahasa Melayu * Čeština * Dansk * Magyar * Nederlands * Norsk bokmål * Polski * Português (Brasil) * Português (Portugal) * Suomi * Svenska * Türkçe * Ελληνικά * Русский * Українська * 한국어 * 中文 (简体) * 中文 (繁體) * 日本語Windows 8/8.1/RT
Beginning with Windows 8/RT, most editions of Windows are able to download and install all Language Packs, with a few exceptions: * In Single Language editions of Windows, only one language pack is allowed to be installed, the same behavior as editions of Windows 7 and earlier that are not Enterprise or Ultimate. * In OEM editions of Windows, the exact language packs that are preinstalled/available for download depend on the device manufacturer and country/region of purchase (and the mobile operator for devices with cellular connectivity). This is a mixture of a local-market feature and a feature for everyone everywhere. There may be multiple display languages preinstalled on the device by the manufacturer and/or wireless carrier, but each manufacturer and/or wireless carrier installs two different sets of languages: one set of preloaded languages and one set of languages that can be installed by the end user. This rule is currently used in Windows Phones as ofWindows 10
Beginning with Windows 10 version 1803, Microsoft started using the term "Local Experience Pack" (LXP) in some places tore?instead of the older term "Language Pack", but they work the same way. In addition to installing via Windows Settings, these 110 LXPs are also available through the Microsoft Store (app and web); the latter enabling remote installation for consumer editions of Windows. As with all applications from the Microsoft Store, only the LXPs that are compatible with that Windows device are shown in the Microsoft Store app. An LXP is updated through the Microsoft Store; outside of the normal Windows update cycle.Supported languages
Supported languages by OS version is as follows:PC
Mobile
The multilingual user interface for Windows Phones did not appear until version 7.0.Patent
The MUI technology is covered by an international patent titled "Multilingual User Interface for an Operating System". The inventors are Bjorn C. Rettig, Edward S. Miller, Gregory Wilson, and Shan Xu.See also
References
{{Microsoft APIs Windows administration