Información general sobre la globalización y la localización de WPF

Cuando se limita la disponibilidad de un producto a un solo idioma, se limita la base de clientes potenciales a una fracción de los 7,5 mil millones de habitantes del mundo. Si quiere que las aplicaciones alcancen una audiencia global, la localización rentable del producto es una de las formas mejores y más económicas de llegar a más clientes.

En esta información general se presentan la globalización y la localización en Windows Presentation Foundation (WPF). La globalización es el diseño y desarrollo de aplicaciones que funcionan en diversas ubicaciones. Por ejemplo, la globalización permite el uso de interfaces de usuario localizadas y datos regionales para usuarios de diferentes referencias culturales. WPF ofrece características de diseño globalizadas, entre las que se encuentran el diseño automático, los ensamblados satélite, y los atributos y comentarios localizados.

La localización es la traducción de los recursos de una aplicación en versiones localizadas para las referencias culturales específicas que admite la aplicación. Cuando localice en WPF, usará las API del espacio de nombres System.Windows.Markup.Localizer. Estas API son la base de la herramienta de línea de comandos LocBaml Tool Sample. Para obtener información sobre cómo compilar y usar LocBaml, vea Localizar una aplicación.

Advertencia

La herramienta LocBaml solo funciona con WPF para proyectos de .NET Framework, no funciona con WPF para .NET.

Procedimientos recomendados para la globalización y localización en WPF

Puede aprovechar al máximo la función de globalización y localización integrada en WPF siguiendo las sugerencias relacionadas con el diseño y localización de interfaces de usuario que proporciona esta sección.

Procedimientos recomendados para el diseño de interfaces de usuario de WPF

Cuando diseñe una interfaz de usuario basada en WPF, considere la posibilidad de implementar estos procedimientos recomendados:

  • Escriba la interfaz de usuario en XAML; evite crear la interfaz de usuario en el código. Cuando cree la interfaz de usuario usando XAML, expóngala a través de las API de localización integradas.

  • Evite usar posiciones absolutas y tamaños fijos para el diseño de contenido; en su lugar, use el ajuste de tamaño relativo o automático.

    • Use SizeToContent; y mantenga los altos y anchos establecidos en Auto.

    • Evite usar Canvas para diseñar las interfaces de usuario.

    • Use Grid y su característica del uso compartido del tamaño.

  • Proporcione espacio adicional en los márgenes, porque el texto localizado suele requerir más espacio. El espacio adicional permite que sobresalga algún carácter.

  • Habilite TextWrapping en TextBlock para evitar el recorte.

  • Defina el atributo xml:lang . Este atributo describe la referencia cultural de un elemento concreto y sus elementos secundarios. El valor de esta propiedad cambia el comportamiento de varias características de WPF. Por ejemplo, cambia el comportamiento de los guiones, la revisión ortográfica, la sustitución de números, la forma de la escritura compleja y la reserva de fuentes. Vea Globalización de WPF para obtener más información sobre la configuración del Control de xml:lang en XAML.

  • Cree una fuente compuesta personalizada para controlar mejor las fuentes que se usan para los diferentes idiomas. De manera predeterminada, WPF usa la fuente de GlobalUserInterface.composite del directorio Windows\Fonts.

  • Cuando cree aplicaciones de navegación que puedan localizarse en una referencia cultural que presente el texto en formato de derecha a izquierda, establezca explícitamente la propiedad FlowDirection de cada una de las páginas para asegurarse de que no hereda FlowDirection de NavigationWindow.

  • Cuando cree aplicaciones de navegación independientes que se hospeden fuera de un explorador, establezca la propiedad StartupUri de la aplicación inicial en un objeto NavigationWindow en lugar de en una página (por ejemplo,<Application StartupUri="NavigationWindow.xaml">). Este diseño le permite cambiar la propiedad FlowDirection de la ventana y la barra de navegación. Para obtener más información y un ejemplo, vea Globalization Homepage Sample (Ejemplo de la página de inicio para la globalización).

Procedimientos recomendados para la localización de WPF

Cuando localice aplicaciones basadas en WPF, considere implementar estos procedimientos recomendados:

  • Use comentarios de localización para proporcionar contexto adicional a los localizadores.

  • Use atributos de localización para controlar la localización, en lugar de omitir selectivamente propiedades Uid en los elementos. Vea Atributos y comentarios sobre localización para obtener más información.

  • Use msbuild -t:updateuid y -t:checkuid para agregar y comprobar las propiedades Uid en el código XAML. Use propiedades Uid para realizar el seguimiento de los cambios entre el desarrollo y la localización. Las propiedades Uid le ayudan a localizar los nuevos cambios de desarrollo. Si agrega manualmente propiedades Uid a una interfaz de usuario, la tarea suele ser tediosa y poco precisa.

    • No modifique ni cambie las propiedades Uid después de iniciar la localización.

    • No use propiedades Uid duplicadas (recuerde esta sugerencia al usar el comando copiar y pegar).

    • Establezca la ubicación de UltimateResourceFallback en AssemblyInfo.* para especificar el idioma adecuado para la reserva (por ejemplo, [assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.Satellite)]).

      Si decide incluir su idioma de origen en el ensamblado principal omitiendo la etiqueta <UICulture> en el archivo de proyecto, establezca la ubicación de UltimateResourceFallback como el ensamblado principal en lugar del satélite (por ejemplo, [assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.MainAssembly)]).

Localizar una aplicación WPF

Cuando localiza una aplicación WPF, tiene varias opciones. Por ejemplo, puede enlazar los recursos localizables de la aplicación a un archivo XML, almacenar el texto localizable en tablas resx o hacer que el localizador use archivos XAML. En esta sección se describe un flujo de trabajo de localización que usa el formato BAML de XAML, lo que ofrece varias ventajas:

  • Puede localizar después de compilar.

  • Puede actualizar a una versión más reciente del formato BAML de XAML con localizaciones de una versión anterior del formato BAML de XAML, de modo que pueda localizar al mismo tiempo que desarrolla.

  • Puede validar los elementos y semánticas de origen originales en tiempo de compilación, porque el formato BAML de XAML es el formato compilado de XAML.

Proceso de compilación de la localización

Cuando desarrolle una aplicación WPF, el proceso de compilación para la localización será el siguiente:

  • El desarrollador crea y globaliza la aplicación WPF. En el archivo de proyecto, el desarrollador establece <UICulture>en-US</UICulture> de modo que, cuando se compile la aplicación, se genere un ensamblado principal independiente del idioma. Este ensamblado tiene un archivo satélite .resources.dll que contiene todos los recursos localizables. De manera opcional, puede mantener el idioma de origen en el ensamblado principal, porque nuestras API de localización permiten la extracción desde el ensamblado principal.

  • Cuando se compila el archivo, el XAML se convierte al formato BAML de XAML. Los archivos MyDialog.exe culturalmente neutro y MyDialog.resources.dll culturalmente dependiente (inglés) se publican para el cliente angloparlante.

Flujo de trabajo de localización

El proceso de la localización comienza una vez compilado el archivo MyDialog.resources.dll sin localizar. Los elementos y propiedades de la interfaz de usuario del XAML original se extraen del formato BAML de XAML en forma de pares clave-valor usando las API en System.Windows.Markup.Localizer. Los localizadores usan los pares clave-valor para localizar la aplicación. Puede generar un nuevo archivo .resource.dll a partir de los nuevos valores, una vez completada la localización.

Las claves de los pares clave-valor son valores x:Uid que el desarrollador coloca en el código XAML original. Estos valores x:Uid permiten que la API realice el seguimiento de los cambios y combine los que se producen entre el desarrollador y el localizador durante la localización. Por ejemplo, si el desarrollador cambia la interfaz de usuario después de que el localizador inicie la localización, puede combinar el cambio de desarrollo con el trabajo de localización ya completado, de modo que el trabajo de traducción que se pierda sea mínimo.

En el gráfico siguiente se muestra un flujo de trabajo de localización típico basado en el formato BAML de XAML. En este diagrama se presupone que el desarrollador escribe la aplicación en inglés. El desarrollador crea y globaliza la aplicación WPF. En el archivo de proyecto, el desarrollador establece <UICulture>en-US</UICulture> para que, en la compilación, se genere un ensamblado principal independiente del idioma con archivos satélite .resources.dll que contienen todos los recursos localizables. De manera alternativa, puede mantenerse el idioma de origen en el ensamblado principal porque las API de localización de WPF admiten la extracción desde el ensamblado principal. Después del proceso de compilación, el XAML se genera en BAML. El archivo MyDialog.exe.resources.dll culturalmente neutral se distribuye al cliente angloparlante.

Diagrama que muestra el flujo de trabajo de localización.

Diagrama que muestra el flujo de trabajo sin localización.

Ejemplos de localización de WPF

En esta sección se incluyen ejemplos de aplicaciones localizadas para ayudarle a entender cómo compilar y localizar aplicaciones WPF.

Ejemplo de cuadro de diálogo Ejecutar

En los gráficos siguientes se muestra el resultado del ejemplo del cuadro de diálogo Ejecutar.

Inglés:

Captura de pantalla que muestra un cuadro de diálogo Ejecutar en inglés.

Alemán:

Captura de pantalla que muestra un cuadro de diálogo Ejecutar en alemán.

Diseñar un cuadro de diálogo Ejecutar global

En este ejemplo se genera un cuadro de diálogo Ejecutar usando WPF y XAML. Este cuadro de diálogo es equivalente al cuadro de diálogo Ejecutar que está disponible en el menú Inicio de Microsoft Windows.

Algunos puntos importantes para la creación de cuadros de diálogo globales son los siguientes:

Diseño automático

En Window1.xaml:

<Window SizeToContent="WidthAndHeight">

La propiedad Window anterior cambia automáticamente el tamaño de la ventana en función del tamaño del contenido. Esta propiedad evita que la ventana recorte el contenido que aumenta de tamaño después de la localización; también quita el espacio innecesario cuando el contenido disminuye de tamaño después de la localización.

<Grid x:Uid="Grid_1">

Se necesitan propiedades Uid para que las API de localización de WPF funcionen correctamente.

Se usan en las API de localización de WPF para realizar el seguimiento de los cambios entre el desarrollo y la localización de la interfaz de usuario (IU). Las propiedades Uid permiten combinar una versión más reciente de la interfaz de usuario con una localización anterior de la interfaz de usuario. Para agregar una propiedad Uid, ejecute msbuild -t:updateuid RunDialog.csproj en un shell de comandos. Este es el método recomendado para agregar propiedades Uid, porque agregarlas manualmente suele exigir mucho tiempo y es menos preciso. Para comprobar que las propiedades Uid están correctamente establecidas, ejecute msbuild -t:checkuid RunDialog.csproj.

La interfaz de usuario se estructura mediante el control Grid, que es un control útil para aprovechar el diseño automático de WPF. Observe que el cuadro de diálogo se divide en tres filas y cinco columnas. Ninguna de las definiciones de columna y fila tiene un tamaño fijo; por tanto, los elementos de la interfaz de usuario que se colocan en cada celda se pueden adaptar a aumentos y reducciones de tamaño durante la localización.

<Grid.ColumnDefinitions>
  <ColumnDefinition x:Uid="ColumnDefinition_1" />
  <ColumnDefinition x:Uid="ColumnDefinition_2" />

Las primeras dos columnas donde se colocan la etiqueta Open: y ComboBox usan el 10 por ciento del ancho total de la interfaz de usuario.

  <ColumnDefinition x:Uid="ColumnDefinition_3" SharedSizeGroup="Buttons" />
  <ColumnDefinition x:Uid="ColumnDefinition_4" SharedSizeGroup="Buttons" />
  <ColumnDefinition x:Uid="ColumnDefinition_5" SharedSizeGroup="Buttons" />
</Grid.ColumnDefinitions>

Tenga en cuenta que en el ejemplo se usa la característica de tamaño compartido de Grid. Las últimas tres columnas la aprovechan colocándose en el mismo SharedSizeGroup. Como cabe esperar del nombre de la propiedad, esto permite que las columnas compartan el mismo tamaño. Cuando "Browse…" se localiza a la cadena "Durchsuchen..." más larga, todos los botones crecen en ancho en lugar de obtenerse un botón "OK" pequeño y un botón "Durchsuchen..." desproporcionadamente grande.

xml:lang

xml:lang="en-US"

Observe el xml:lang Handling in XAML colocado en el elemento raíz de la interfaz de usuario. Esta propiedad describe la referencia cultural de un elemento determinado y de sus elementos secundarios. Este valor lo usan varias características de WPF y debe cambiarse en consecuencia durante la localización. Este valor cambia qué diccionario de idioma se usa para separar las palabras con guiones y para la revisión ortográfica. También afecta a la presentación de dígitos y a cómo selecciona el sistema de reserva de fuentes qué fuente usar. Finalmente, la propiedad afecta a la manera en que se muestran los números y la manera en que se aplica formato a los textos escritos de escritura compleja. El valor predeterminado es "en-US".

Crear un ensamblado de recursos satélite

En .csproj:

Edite el archivo .csproj y agregue la siguiente etiqueta a un <PropertyGroup> incondicional:

<UICulture>en-US</UICulture>

Observe la adición de un valor UICulture. Cuando se establece en un valor CultureInfo válido como en-US, al compilar el proyecto se generará un ensamblado satélite que contiene todos los recursos localizables.

<Resource Include="RunIcon.JPG">

<Localizable>False</Localizable>

</Resource>

No es necesario localizar RunIcon.JPG, porque debe aparecer igual para todas las referencias culturales. Localizable se establece en false, para que permanezca en el ensamblado principal independiente del idioma en lugar de en el ensamblado satélite. El valor predeterminado de todos los recursos no compilables es Localizable establecido en true.

Localizar el cuadro de diálogo Ejecutar

Parse

Después de compilar la aplicación, el primer paso para localizarla es analizar los recursos localizables del ensamblado satélite. Para los propósitos de este tema, use la herramienta de ejemplo LocBaml, que encontrará en LocBaml Tool Sample (Herramienta de ejemplo LocBaml). Tenga en cuenta que LocBaml es solamente una herramienta de ejemplo, cuyo propósito es ayudarle a iniciarse en la compilación de una herramienta de localización adecuada para el proceso de localización. Con LocBaml, ejecute lo siguiente para analizar: LocBaml /parse RunDialog.resources.dll /out: y generar un archivo "RunDialog.resources.dll.CSV".

Advertencia

La herramienta LocBaml solo funciona con WPF para proyectos de .NET Framework, no funciona con WPF para .NET.

Localizar

Use su editor favorito de archivos .CSV compatible con Unicode para modificar este archivo. Filtre todas las entradas que tengan la categoría de localización "None". Debería ver las entradas siguientes:

Clave de recurso Categoría de localización Value
Button_1:System.Windows.Controls.Button.$Content Botón Aceptar
Button_2:System.Windows.Controls.Button.$Content Botón Cancelar
Button_3:System.Windows.Controls.Button.$Content Botón Examinar...
ComboBox_1:System.Windows.Controls.ComboBox.$Content ComboBox
TextBlock_1:System.Windows.Controls.TextBlock.$Content Texto Escriba el nombre del programa, carpeta, documento o recurso de Internet que desea abrir con Windows.
TextBlock_2:System.Windows.Controls.TextBlock.$Content Texto Abierta:
Window_1:System.Windows.Window.Title Título Ejecutar

Localizar la aplicación a alemán requerirá las traducciones siguientes:

Clave de recurso Categoría de localización Value
Button_1:System.Windows.Controls.Button.$Content Botón Aceptar
Button_2:System.Windows.Controls.Button.$Content Botón Abbrechen
Button_3:System.Windows.Controls.Button.$Content Botón Durchsuchen…
ComboBox_1:System.Windows.Controls.ComboBox.$Content ComboBox
TextBlock_1:System.Windows.Controls.TextBlock.$Content Texto Geben Sie den Namen eines Programms, Ordners, Dokuments oder einer Internetresource an.
TextBlock_2:System.Windows.Controls.TextBlock.$Content Texto Abrir:
Window_1:System.Windows.Window.Title Título Ejecutar

Generate

El último paso de localización implica la creación del nuevo ensamblado satélite localizado. Esto se puede hacer con el siguiente comando de LocBaml:

LocBaml.exe /generate RunDialog.resources.dll /trans:RunDialog.resources.dll.CSV /out: . /cul:de-DE

En la versión alemana de Windows, si se coloca este archivo resources.dll en una carpeta de-DE junto al ensamblado principal, este recurso se cargará automáticamente en lugar del de la carpeta en-US. Si no tiene una versión alemana de Windows para probarlo, establezca la referencia cultural en la referencia cultural de Windows que esté usando (por ejemplo, en-US) y reemplace el archivo DLL de recursos original.

Carga de recursos satélite

MyDialog.exe en-US\MyDialog.resources.dll de-DE\MyDialog.resources.dll
Código BAML en inglés original BAML localizado
Recursos culturalmente neutrales Otros recursos en inglés Otros recursos localizados al alemán

.NET elige automáticamente el ensamblado de recursos satélite que debe cargar en función de la Thread.CurrentUICulture de la aplicación. Esto tiene como valor predeterminado la referencia cultural de su SO Windows. Si usa la versión alemana de Windows, se carga el archivo de-DE\MyDialog.resources.dll. Si usa la versión inglesa de Windows, se carga el archivo en-US\MyDialog.resources.dll. Puede establecer el recurso de reserva último para la aplicación especificando el atributo NeutralResourcesLanguage en el archivo AssemblyInfodel proyecto. Por ejemplo, si especifica:

[assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.Satellite)]

a continuación, se usará el archivo en-US\MyDialog.resources.dll con la versión alemana de Windows si ninguno de los archivos siguientes está disponible: de-DE\MyDialog.resources.dll o de\MyDialog.resources.dll.

Página principal de Microsoft Arabia Saudí

En los gráficos siguientes se muestra una página principal en inglés y en árabe. Para ver el ejemplo completo que genera estos gráficos, vea Globalization Homepage Sample (Ejemplo de la página principal para la globalización).

Inglés:

Captura de pantalla que muestra una página principal en inglés.

Árabe:

Captura de pantalla que muestra una página principal en árabe.

Diseño de una página principal de Microsoft global

En este ejemplo de sitio web de Microsoft Arabia Saudí se muestran las características de globalización que se proporcionan para los idiomas de derecha a izquierda. Los idiomas como el hebreo y el árabe se leen de derecha a izquierda, así que el diseño de la interfaz de usuario suele ser muy diferente del que sería en idiomas de izquierda a derecha como el inglés. Localizar de un idioma de izquierda a derecha a uno de derecha a izquierda, o viceversa, puede ser todo un reto. WPF se ha diseñado de modo que tales localizaciones resulten mucho más fáciles.

FlowDirection

Homepage.xaml:

<Page x:Uid="Page_1" x:Class="MicrosoftSaudiArabiaHomepage.Homepage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"   
    FlowDirection="LeftToRight" 
    Localization.Comments="FlowDirection(This FlowDirection controls the actual content of the homepage)"
    xml:lang="en-US">

Observe la propiedad FlowDirection en Page. Al cambiar esta propiedad a RightToLeft, se cambiará la propiedad FlowDirection de Page y de sus elementos secundarios, de modo que el diseño de la interfaz de usuario se invierte para que se lea de derecha a izquierda, como esperaría un usuario árabe. Se puede invalidar el comportamiento de herencia especificando un valor explícito para la propiedad FlowDirection de cualquier elemento. La propiedad FlowDirection está disponible en cualquier FrameworkElement o elemento relacionado con documentos y tiene un valor implícito de LeftToRight.

Observe que incluso los pinceles de degradado de fondo se invierten correctamente al cambiar la propiedad FlowDirection raíz:

FlowDirection="LeftToRight"

Captura de pantalla que muestra el flujo de degradado de izquierda a derecha.

FlowDirection="RightToLeft"

Captura de pantalla que muestra el flujo de degradado de derecha a izquierda.

Evitar usar dimensiones fijas para paneles y controles

Eche un vistazo a Homepage.xaml; observe que, aparte del ancho y el alto fijos especificados para toda la interfaz de usuario en el DockPanel superior, no hay ninguna otra dimensión fija. Evite usar dimensiones fijas para impedir que se recorte el texto localizado que sea más largo que el texto de origen. Los paneles y controles de WPF ajustarán automáticamente su tamaño en función de su contenido. La mayoría de los controles tienen también dimensiones máximas y mínimas que puede establecer para mejorar el control (por ejemplo, MinWidth= "20"). Con Grid, puede establecer también anchos y altos relativos usando "*" (por ejemplo, Width="0.25*") o usar la característica de uso compartido del tamaño de celda.

Comentarios de localización

En muchos casos, el contenido puede ser ambiguo y difícil de traducir. El desarrollador o el diseñador tiene la capacidad de proporcionar contexto y comentarios adicionales a los localizadores mediante comentarios de localización. El ejemplo de Localization.Comments que aparece a continuación clarifica el uso del carácter "|".

<TextBlock 
  x:Uid="TextBlock_2" 
  DockPanel.Dock="Right" 
  Foreground="White" 
  Margin="5,0,5,0"
  Localization.Comments="$Content(This character is used as a decorative rule.)">
  |
</TextBlock>

Este comentario se asocia con el contenido de TextBlock_1 y, en el caso de la herramienta LocBaml, (vea Localizar una aplicación) se puede ver en la sexta columna de la fila de TextBlock_1 en el archivo .csv resultante:

Clave de recurso Category Legible Modificable Comentario Value
TextBlock_1:System.Windows.Controls.TextBlock.$Content Texto TRUE TRUE Este carácter se usa como una regla decorativa. |

Se pueden colocar comentarios en el contenido o en las propiedades de cualquier elemento usando la sintaxis siguiente:

<TextBlock 
  x:Uid="TextBlock_1" 
  DockPanel.Dock="Right" 
  Foreground="White" 
  Margin="5,0,5,0"
  Localization.Comments="$Content(This is a comment on the TextBlock's content.)
     Margin(This is a comment on the TextBlock's Margin property.)">
  |
 </TextBlock>

Atributos de localización

A menudo, el desarrollador o el administrador de la localización necesita controlar lo que pueden leer y modificar los localizadores. Por ejemplo, quizá no quiera que el localizador traduzca el nombre de su compañía o la redacción legal. WPF proporciona atributos que permiten establecer la legibilidad, modificabilidad y categoría del contenido o las propiedades de un elemento que la herramienta de localización puede usar para bloquear, ocultar u ordenar elementos. Para obtener más información, vea Attributes. Para este ejemplo, la herramienta LocBaml genera solamente los valores de estos atributos. Todos los controles de WPF tienen valores predeterminados para estos atributos, pero es posible invalidarlos. Por ejemplo, en el ejemplo siguiente se invalidan los atributos de localización predeterminados para TextBlock_1 y se establece que el contenido sea legible pero no modificable para los localizadores.

<TextBlock
x:Uid="TextBlock_1"
Localization.Attributes=
"$Content(Readable Unmodifiable)">
  Microsoft Corporation
</TextBlock>

Además de los atributos que facilitan la lectura y las modificaciones, WPF proporciona una enumeración de categorías comunes de la interfaz de usuario (LocalizationCategory) que se pueden usar para proporcionar más contexto a los localizadores. Las categorías predeterminadas de WPF para los controles de plataforma también se pueden invalidar en XAML:

<TextBlock x:Uid="TextBlock_2">
<TextBlock.ToolTip>
<TextBlock
x:Uid="TextBlock_3"
Localization.Attributes=
"$Content(ToolTip Readable Unmodifiable)">
Microsoft Corporation
</TextBlock>
</TextBlock.ToolTip>
Windows Vista
</TextBlock>

Los atributos de localización predeterminados que WPF proporciona también se pueden invalidar mediante código, de modo que se puedan establecer correctamente los valores predeterminados de los controles personalizados. Por ejemplo:

[Localizability(Readability = Readability.Readable, Modifiability=Modifiability.Unmodifiable, LocalizationCategory.None)]
public class CorporateLogo : TextBlock
{
    // ...
}

Los atributos establecidos por instancia en XAML tendrán precedencia sobre los valores establecidos en el código sobre los controles personalizados. Para obtener más información sobre los atributos y los comentarios, vea Atributos y comentarios sobre localización.

Reserva de fuente y fuentes compuestas

Si especifica una fuente que no admite un intervalo de punto de codificación determinado, WPF recurrirá automáticamente a una que lo haga usando Global User Interface.compositefont, que se encuentra en el directorio Windows\Fonts. Las fuentes compuestas funcionan como cualquier otra fuente y se pueden usar explícitamente estableciendo la propiedad FontFamily de un elemento (por ejemplo, FontFamily="Global User Interface"). Puede especificar sus propias preferencias de reserva de fuentes creando fuentes compuestas propias y especificando qué fuente quiere usar para los intervalos de punto de codificación e idiomas concretos.

Para obtener más información sobre fuentes compuestas, vea FontFamily.

Localizar la página principal de Microsoft

Puede seguir los mismos pasos que en el ejemplo del cuadro de diálogo Ejecutar para localizar esta aplicación. El archivo .csv localizado para árabe está disponible en Globalization Homepage Sample (Ejemplo de la página principal para la globalización).