Globalización para Windows Presentation Foundation
Actualización: noviembre 2007
En este tema se presentan las cuestiones que debe tener en cuenta al escribir aplicaciones Windows Presentation Foundation (WPF) para el mercado global. En Microsoft .NET, los elementos de programación de globalización se definen en System.Globalization.
Este tema contiene las secciones siguientes.
- Globalización XAML
- Diseñar una interfaz de usuario internacional con XAML
- Desarrollar aplicaciones localizables
- Utilizar ClickOnce con aplicaciones localizadas
- Temas relacionados
Globalización XAML
Lenguaje de marcado de aplicaciones extensible (XAML) se basa en XML y se beneficia de la compatibilidad con la globalización definida en la especificación XML. En las secciones siguientes se describen algunas características de XAML que debe tener en cuenta.
Referencias de caracteres
Una referencia de carácter proporciona el número del carácter Unicode concreto que representa, en formato decimal o hexadecimal. En el ejemplo siguiente se muestra una referencia de carácter en formato decimal.
Ϩ
En este ejemplo se muestra una referencia de carácter en formato hexadecimal. Observe que tiene una x delante del número hexadecimal.
Ϩ
Codificación
Las codificaciones compatibles con XAML son ASCII, Unicode UTF-16 y UTF-8. La instrucción de codificación se encuentra al principio del documento XAML. Si no existe ningún atributo de codificación y no se especifica ningún orden de bytes, el analizador utiliza el valor predeterminado UTF-8. UTF-8 y UTF-16 son las codificaciones preferentes. UTF-7 no se admite. En el ejemplo siguiente se muestra cómo especificar una codificación UTF-8 en un archivo XAML.
?xml encoding="UTF-8"?
Atributo Language
XAML utiliza xml:lang para representar el atributo de idioma de un elemento. Para sacar partido de la clase CultureInfo, el valor del atributo de idioma debe ser uno de los nombres de referencias culturales predefinidos por CultureInfo. xml:lang se puede heredar en el árbol de elementos (según las reglas XML, no necesariamente debido a la herencia de propiedades de dependencia) y su valor predeterminado es una cadena vacía si no se asigna de manera explícita.
El atributo de idioma es muy útil para especificar dialectos. Por ejemplo, el francés tiene una ortografía, un vocabulario y una pronunciación diferentes en Francia, Quebec, Bélgica y Suiza. También el chino, el japonés y el coreano comparten puntos de código en Unicode, pero las formas ideográficas son diferentes y utilizan fuentes totalmente distintas.
En el ejemplo de Lenguaje de marcado de aplicaciones extensible (XAML) siguiente se utiliza el atributo de idioma fr-CA para especificar el francés canadiense.
<TextBlock xml:lang="fr-CA">Découvrir la France</TextBlock>
Unicode
XAML admite todas las características de Unicode, incluso los suplentes. Siempre y cuando el juego de caracteres se pueda asignar a Unicode, se admite. Por ejemplo, GB18030 introduce algunos caracteres que se asignan a la extensión A y B del chino, japonés y coreano (CFK) y pares suplentes, de manera que es totalmente compatible. Una aplicación WPF puede utilizar StringInfo para manipular las cadenas sin reconocer si tienen pares suplentes o caracteres combinables.
Diseñar una interfaz de usuario internacional con XAML
En esta sección se describen características de interfaz de usuario (UI) que debe tener en cuenta al escribir una aplicación.
Texto internacional
WPF incluye el procesamiento integrado para todos los sistemas de escritura de Microsoft .NET Framework admitidos.
En la actualidad, se admiten los sistemas de escritura siguientes:
Árabe
Bengalí
Devanagari
Cirílico
Griego
Gujarati
Gurmukhi
Hebreo
Sistemas de escritura ideográficos
Kannada
Lao
Latino
Malayalam
Mongol
Oriya
Sirio
Tamil
Telugu
Thaana
Tailandés*
Tibetano
*En esta versión se admite la presentación y edición de texto tailandés, pero no la separación de palabras.
En la actualidad, no se admiten los sistemas de escritura siguientes:
Khmer
Hangul coreano antiguo
Birmano
Cingalés
Todos los motores de sistema de escritura admiten las fuentes OpenType. Las fuentes OpenType pueden incluir las tablas de diseño OpenType que permiten a los creadores de fuentes diseñar mejor las fuentes tipográficas internacionales y de tecnología avanzada. Las tablas de diseño de fuentes OpenType contienen información sobre sustituciones de glifos, colocación de glifos, justificación y la posición básica, lo que permite mejorar el diseño del texto en las aplicaciones de procesamiento de textos.
Las fuentes OpenType permiten controlar juegos de glifos grandes mediante la codificación Unicode. Esta codificación permite una amplia compatibilidad internacional, además de variaciones tipográficas de los glifos.
La representación de texto en WPF es posible gracias a la tecnología de subpíxel de Microsoft ClearType, que admite la independencia de la resolución. Con ello se mejora significativamente la legibilidad y se proporciona compatibilidad con documentos en un estilo de revista de gran calidad para todos los sistemas de escritura.
Diseño internacional
WPF proporciona una manera muy cómoda de admitir los diseños horizontales, bidireccionales y verticales. En el marco de trabajo de presentación, se puede utilizar la propiedad FlowDirection para definir el diseño. Los modelos de dirección de flujo son:
LeftToRight: diseño horizontal para fuentes latinas, de Asia oriental, etc.
RightToLeft: diseño bidireccional para fuentes árabes, hebreas, etc.
Desarrollar aplicaciones localizables
Cuando se escribe una aplicación para su consumo en todo el mundo, debe tener presente que la aplicación debe poder localizarse. En los temas siguientes se señalan aspectos que debe tener en cuenta.
Interfaz de usuario multilingüe
Las interfaces de usuario multilingües (MUI) son una característica de compatibilidad de Microsoft para pasar de un idioma a otro en las UIs. Una aplicación WPF utiliza el modelo de ensamblado que admite las MUI. Una aplicación contiene los ensamblados neutrales con respecto al idioma, así como los ensamblados de recursos satélite dependientes del idioma. El punto de entrada es un .EXE administrado en el ensamblado principal. El cargador de recursos de WPF aprovecha el administrador de recursos de Framework para admitir la búsqueda y reserva de recursos. Los ensamblados satélite de varios idiomas funcionan con el mismo ensamblado principal. El ensamblado de recursos que se carga depende de la propiedad CurrentUICulture del subproceso actual.
Interfaz de usuario localizable
Las aplicaciones WPF utilizan XAML para definir su interfaz de usuario. XAML permite a los programadores especificar una jerarquía de objetos con un conjunto de propiedades y lógica. El uso primario de XAML es programar aplicaciones WPF, pero se puede utilizar para especificar una jerarquía de cualesquiera objetos common language runtime (CLR). La mayoría de los programadores utilizan XAML para especificar la interfaz de usuario de su aplicación y utilizan un lenguaje de programación como C# para reaccionar a las interacciones con el usuario.
Desde un punto de vista de los recursos, un archivo XAML diseñado para describir una interfaz de usuario dependiente del idioma es un elemento de recurso y, por consiguiente, su formato de distribución definitivo deberá poder localizarse para admitir distintos idiomas internacionales. Dado que XAML no puede controlar eventos, muchas aplicaciones XAML contienen bloques de código para ello. Para obtener más información, consulte Información general sobre XAML. El código se secciona y compila en distintos binarios cuando un archivo XAML se convierte en XAML binario (BAML) con símbolos. Los archivos, las imágenes y otros tipos de objetos BAML de recursos administrados se incrustan en el ensamblado de recursos satélite, que se puede localizar a otros idiomas, o en el ensamblado principal si no se requiere localización.
Nota
Las aplicaciones WPF admiten todos los recursos CLRFramework, incluidas las tablas de cadenas, imágenes, etc.
Generar aplicaciones localizables
La localización significa adaptar una interfaz de usuario a otras referencias culturales. Para que una aplicación WPF sea localizable, los programadores deben integrar todos los recursos localizables en un ensamblado de recursos. El ensamblado de recursos se localiza a distintos idiomas y el código subyacente utiliza la API de administración de recursos para cargarse. Uno de los archivos requeridos para una aplicación WPF es un archivo de proyecto (.proj). Todos los recursos que se utilizan en una aplicación deben incluirse en el archivo de proyecto. En el ejemplo siguiente de un archivo .csproj se muestra cómo hacerlo.
<Resource Include="data\picture1.jpg"/>
<EmbeddedResource Include="data\stringtable.en-US.restext"/>
Para utilizar un recurso en la aplicación, cree una instancia de ResourceManager y cargue el recurso que desea utilizar. En el ejemplo siguiente se muestra cómo hacerlo:
void OnClick(object sender, RoutedEventArgs e)
{
ResourceManager rm = new ResourceManager ("MySampleApp.data.stringtable",
Assembly.GetExecutingAssembly());
Text1.Text = rm.GetString("Message");
}
Utilizar ClickOnce con aplicaciones localizadas
ClickOnce es una nueva tecnología de implementación de formularios Windows Forms que se distribuirá con Microsoft Visual Studio 2005. Permite la instalación de aplicaciones y la actualización de aplicaciones web. Cuando se localiza una aplicación que se implementó con ClickOnce, únicamente se podrá ver en la referencia cultural en la que se haya localizado. Por ejemplo, si una aplicación implementada se localiza a japonés, únicamente se podrá ver en la versión japonesa de Microsoft Windows, y no en la versión inglesa de Windows. Esto presenta un problema porque es frecuente que los usuarios japoneses ejecuten una versión inglesa de Windows.
La solución a este problema reside en establecer el atributo de recursos de reserva neutrales con respecto al idioma. Un programador de aplicaciones puede quitar recursos del ensamblado principal, si lo desea, y especificar que los recursos se encuentran en un ensamblado satélite que corresponde a una referencia cultural concreta. Para controlar este proceso, se utiliza la clase NeutralResourcesLanguageAttribute. El constructor de la clase NeutralResourcesLanguageAttribute tiene dos firmas, una de ellas acepta un parámetro UltimateResourceFallbackLocation para especificar la ubicación de la que ResourceManager debería extraer los recursos de reserva: el ensamblado principal o el ensamblado satélite. En el ejemplo siguiente se muestra cómo utilizar el atributo. En el caso de la ubicación de los recursos de reserva definitivos, el código hace que ResourceManager busque los recursos en el subdirectorio "de" del directorio del ensamblado que se está ejecutando actualmente.
[assembly: NeutralResourcesLanguageAttribute(
"de" , UltimateResourceFallbackLocation.Satellite)]
Vea también
Conceptos
Información general sobre la localización y globalización de WPF