¿En qué consiste una versión localizada de Windows Vista/7? [Parte II]

Artículos anteriores

En el anterior artículo vimos de forma resumida en qué consiste la nueva arquitectura MUI de Windows Vista/7, así como los beneficios que conlleva el separar físicamente los recursos dependientes del idioma del resto de binarios del sistema. En esta parte vamos a ver que la configuración de idioma va más alla de la interfaz que se le muestra al usuario.

Es importante que resalte un punto que comenté en mi anterior artículo: Cuando se separan los archivos binarios (independientes del idioma) de los archivos de recursos, se corre el riesgo de juntarse con miles de ficheros si la aplicación tiene el calibre de un sistema operativo. Y lo que es más importante, se trata en su mayoría de ficheros muy pequeños (menos de 4 KB), lo que tiene un importante impacto negativo en el sistema pues las reservas de memoria física se hacen con una granularidad de 4 KB (64 KB en el caso de memoria virtual). Por este motivo, Microsoft decidió que un mismo fichero alojara recursos de múltiples idiomas.

Los recursos que forman parte de un módulo de recursos suelen ser los de los componentes adicionales de los que dependa la aplicación (como DLL, por ejemplo), pues el sistema va a requerirlos en algún momento y el tenerlos simultáneamente en memoria ahorra operaciones de E/S, que como son difícilmente optimizables hay que intentar reducirlas a toda costa.

En Windows Vista/7 existen varios ámbitos para un idioma o conjunto de idiomas instalados. En este epígrafe se explicarán cuáles son estos ámbitos, cuándo y dónde se configuran y qué implicaciones prácticas tienen.

Idioma de instalación

También denominado idioma por defecto de la interfaz de sistema, es el idioma que selecciona el usuario al comenzar la instalación del sistema operativo.

La lista de idiomas se genera a partir del fichero \sources\Lang.ini del DVD de instalación. En caso de que el idioma o idiomas no estuviera(n) ya instalado(s) en la imagen WIM de Windows, el programa de instalación lo(s) instala. En Windows Vista esto se realiza llamando a la herramienta Pkgmgr.exe, pero en Windows 7 se usa la nueva herramienta Dism.exe. Concretamente, el parámetro /Add-Package permite instalar paquetes (ya sea paquetes de idiomas o actualizaciones) en una imagen de Windows 7. Puede obtener más información sobre Dism.exe en esta página: http://technet.microsoft.com/en-us/library/dd744382(WS.10).aspx

En caso de que la imagen tenga instalados varios idiomas y la edición de Windows no fuera Ultimate o Enterprise, el resto de idiomas se desinstalan automáticamente al finalizar la instalación, mediante la tarea programada LPRemove.

Resumidamente, el idioma de instalación por así decirlo es el idioma “por defecto” del sistema operativo; es el primer idioma que se configura en el sistema y no se puede cambiar posteriormente. En general, tiene un uso bastante reducido pues se tiene más en cuenta la lista de idiomas por sistema, que se describe a continuación. Si desarrolla aplicaciones y quiere saber qué idioma es el idioma de instalación, puede usar la API GetSystemDefaultUILanguage. Ojo, tenga especialmente en cuenta que el idioma de instalación y el idioma de la interfaz gráfica del usuario pueden ser diferentes.

Lista de idiomas por sistema

La lista de idiomas por sistema contiene el idioma de instalación, el idioma principal de sistema, y una lista de idiomas de apoyo (fallback languages) para el caso en que el idioma principal fuese un idioma parcialmente traducido o un LIP (Language Interface Pack) como el hindi o el catalán.

El idioma de sistema es el idioma que se usa cuando no hay ningún usuario con sesión iniciada o bien cuando el usuario no ha cambiado su configuración de idioma. Se puede cambiar siguiendo los pasos de este artículo de la documentación de Windows 7: http://windows.microsoft.com/es-ES/windows7/Apply-regional-and-language-settings-to-reserved-accounts. Una aplicación no puede cambiar la lista de idiomas por sistema, pero sí consultarla mediante la API de Win32 GetSystemPreferredUILanguages.

Lista de idiomas por usuario

En Windows Vista/7 cada usuario puede establecer un idioma de su elección (si la edición de Windows 7 así lo permite). Para cambiarlo se deben seguir los pasos de este artículo de la documentación de Windows 7: http://windows.microsoft.com/es-ES/windows7/Install-or-change-a-display-language. Como en el caso anterior, para dar el control al usuario las aplicaciones no pueden modificar esta lista de idiomas. Para consultarla puede llamar a la API GetUserPreferredUILanguages. El primer idioma de la lista es el idioma de la interfaz gráfica.

Lista de idiomas por proceso

Cada proceso puede establecer una lista de hasta 5 idiomas. Esta lista se almacena en el bloque de control de proceso (PEB), que es una estructura del núcleo de Windows que mantiene información sobre cada uno de los procesos del sistema. En un próximo artículo se detallará qué información sobre MUI está almacenada en el bloque de control de proceso y de qué forma.

Para consultar el idioma por proceso una aplicación puede llamar a la API GetProcessPreferredUILanguages. Para modificar esa lista, se puede usar la función SetProcessPreferredUILanguages.

Lista de idiomas por hilo

Cada hilo de un proceso puede establecer su lista de 5 idiomas preferidos.  Esta lista se almacena en el bloque de control de hilo (TEB), que es una estructura del núcleo de Windows que mantiene información sobre cada uno de los hilos de un proceso. En un próximo artículo se detallará qué información sobre MUI está almacenada en el hilo de control de proceso y de qué forma.

Para consultar el idioma por proceso una aplicación puede llamar a la API GetThreadPreferredUILanguages. Para modificar esa lista, se puede usar la función SetThreadPreferredUILanguages.

Este diagrama muestra una posible configuración de idioma en Windows 7:

En el ejemplo la lista de idiomas por hilo son el español y el inglés, el idioma por proceso es el alemán, se ha instalado el paquete de idiomas catalán, que junto al idioma español forman la lista de idiomas por usuario; la lista de idiomas por sistema es el árabe, apoyado en el inglés para aquellos recursos que no estén traducidos; y por último, el idioma en el que se instaló el sistema operativo es el inglés. La nueva arquitectura MUI de Windows Vista/7 permite este tipo de escenarios con múltiples idiomas.

¿Es mejor instalar una versión en inglés y aplicarle el MUI en español o instalar directamente una versión en español?

En este punto surge esta duda que asalta a no pocas personas que usan Windows. Realmente, la versión en español y en inglés no son más que una versión independiente del idioma a la que se le ha aplicado el correspondiente paquete de idiomas. Por este motivo, no hay diferencias ni de rendimiento, estabilidad, seguridad, etc.

En cuanto a la versión inglesa con el MUI español aplicado, es una versión casi idéntica a la versión en español; la única diferencia es que en este caso tanto el idioma de instalación como la lista de idiomas por sistema se mantienen en inglés, lo único que cambia es el idioma por usuario. Aunque el idioma de sistema se puede cambiar (tal y como se ha explicado anteriormente), no ocurre lo mismo con el idioma de instalación, que aunque tiene poca relevancia sí que condiciona algunos aspectos de la máquina, como puede ser algunas rutas o nombres de usuarios del sistema. En ningún caso hay diferencias de rendimiento, ni de estabilidad, ni de disponibilidad de actualizaciones.

En general mi consejo es el siguiente:

Si el usuario se maneja nativamente en un idioma, se debería instalar la versión en ese idioma en concreto. Instalar la versión en inglés solo va a complicar el aprendizaje del sistema, sin ningún beneficio por parte del usuario.

Si la máquina la usan personas que hablan distintos idiomas y la versión de Windows 7 lo permite, lo ideal es configurar cada cuenta de usuario para que muestre la interfaz en un idioma distinto, instalando antes los correspondientes paquetes de idiomas. Este es el escenario típico de una multinacional.

En próximos artículos veremos qué estructuras tiene el sistema para almacenar toda la información MUI, así como las caches, tanto en modo usuario como en modo núcleo, que sirven para aligerar la carga de recursos en un determinado idioma por parte de una aplicación o del propio sistema operativo. También veremos en qué consiste el cargador de recursos de Windows, que es el componente encargado de proporcionar a una aplicación un recurso en un determinado idioma.

2 thoughts on “¿En qué consiste una versión localizada de Windows Vista/7? [Parte II]

  1. @Santiago José López Borrazás: No, para la mayoría de usuarios precisamente lo que recomiendo es instalar la versión en el idioma que se use.

    Instalar la versión en inglés y aplicarle el MUI en español no ofrece absolutamente ninguna ventaja y va a consumir espacio en disco (no demasiado) inútilmente.

Leave a Reply

Your email address will not be published. Required fields are marked *