Información general sobre la globalización y la localización de WPFWPF Globalization and Localization Overview

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 6,5 mil millones de habitantes del mundo.When you limit your product's availability to only one language, you limit your potential customer base to a fraction of our world’s 6.5 billion population. 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.If you want your applications to reach a global audience, cost-effective localization of your product is one of the best and most economical ways to reach more customers.

Esta información general presenta la globalización y Windows Presentation Foundation (WPF)Windows Presentation Foundation (WPF)la localización en.This overview introduces globalization and localization in Windows Presentation Foundation (WPF)Windows Presentation Foundation (WPF). La globalización es el diseño y desarrollo de aplicaciones que funcionan en diversas ubicaciones.Globalization is the design and development of applications that perform in multiple locations. Por ejemplo, la globalización permite el uso de interfaces de usuario localizadas y datos regionales para usuarios de diferentes referencias culturales.For example, globalization supports localized user interfaces and regional data for users in different cultures. WPFWPFproporciona características de diseño globalizadas, incluidos el diseño automático, los ensamblados satélite y los atributos localizados y los comentarios.provides globalized design features, including automatic layout, satellite assemblies, and localized attributes and commenting.

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.Localization is the translation of application resources into localized versions for the specific cultures that the application supports. Al localizar en WPFWPF, se usan las API en el System.Windows.Markup.Localizer espacio de nombres.When you localize in WPFWPF, you use the APIs in the System.Windows.Markup.Localizer namespace. Estas API potencian la herramienta de línea de comandos de ejemplo de la herramienta LocBaml .These APIs power the LocBaml Tool Sample command-line tool. Para obtener información sobre cómo compilar y usar LocBaml, vea localizar una aplicación.For information about how to build and use LocBaml, see Localize an Application.

Procedimientos recomendados para la globalización y localización en WPFBest Practices for Globalization and Localization in WPF

Puede sacar el máximo partido de la funcionalidad de globalización y localización que se integra WPFWPF en siguiendo las sugerencias relacionadas con el diseño de la interfaz de usuario y la localización que proporciona esta sección.You can make the most of the globalization and localization functionality that is built into WPFWPF by following the UI design and localization-related tips that this section provides.

Procedimientos recomendados para el diseño de interfaces de usuario de WPFBest Practices for WPF UI Design

Al diseñar un basado WPFWPFen IUUI, considere la posibilidad de implementar estas prácticas recomendadas:When you design a WPFWPF–based IUUI, consider implementing these best practices:

  • Escriba en IUUI XAMLXAML; Evite crear IUUI en el código.Write your IUUI in XAMLXAML; avoid creating IUUI in code. Al crear el mediante IUUI XAMLXAML, lo expone a través de las API de localización integradas.When you create your IUUI by using XAMLXAML, you expose it through built-in localization APIs.

  • Evite usar posiciones absolutas y tamaños fijos para diseñar el contenido; en su lugar, utilice el ajuste de tamaño relativo o automático.Avoid using absolute positions and fixed sizes to lay out content; instead, use relative or automatic sizing.

    • Use SizeToContent y mantenga el ancho y el alto establecidos Autoen.Use SizeToContent and keep widths and heights set to Auto.

    • Evite usar Canvas para IUUIdisponer.Avoid using Canvas to lay out IUUIs.

    • Use Grid y su característica de uso compartido de tamaño.Use Grid and its size-sharing feature.

  • Proporcione espacio adicional en los márgenes, porque el texto localizado suele requerir más espacio.Provide extra space in margins because localized text often requires more space. El espacio adicional permite que sobresalga algún carácter.Extra space allows for possible overhanging characters.

  • Habilite TextWrapping enTextBlock para evitar el recorte.Enable TextWrapping on TextBlock to avoid clipping.

  • Defina el atributo xml:lang .Set the xml:lang attribute. Este atributo describe la referencia cultural de un elemento específico y sus elementos secundarios.This attribute describes the culture of a specific element and its child elements. El valor de esta propiedad cambia el comportamiento de varias características de WPFWPF.The value of this property changes the behavior of several features in WPFWPF. 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.For example, it changes the behavior of hyphenation, spell checking, number substitution, complex script shaping, and font fallback. Vea globalización de WPF para obtener más información sobre cómo establecer el control de XML: lang en XAML.See Globalization for WPF for more information about setting the xml:lang Handling in XAML.

  • Cree una fuente compuesta personalizada para obtener un mejor control de las fuentes que se usan para distintos idiomas.Create a customized composite font to obtain better control of fonts that are used for different languages. De forma predeterminada WPFWPF , usa la fuente GlobalUserInterface. composite en el directorio Windows\Fonts.By default, WPFWPF uses the GlobalUserInterface.composite font in your Windows\Fonts directory.

  • Cuando cree aplicaciones de navegación que se puedan localizar en una referencia cultural que presente texto en un formato de derecha a izquierda, establezca explícitamente la FlowDirection de cada página para asegurarse de que la página no FlowDirection se hereda NavigationWindowde.When you create navigation applications that may be localized in a culture that presents text in a right-to-left format, explicitly set the FlowDirection of every page to ensure the page does not inherit FlowDirection from the NavigationWindow.

  • Al crear aplicaciones de navegación independientes que se hospedan fuera de un explorador, establezca el StartupUri valor de para la aplicación inicial NavigationWindow en en lugar de en una página (por ejemplo <Application StartupUri="NavigationWindow.xaml">,).When you create stand-alone navigation applications that are hosted outside a browser, set the StartupUri for your initial application to a NavigationWindow instead of to a page (for example, <Application StartupUri="NavigationWindow.xaml">). Este diseño permite cambiar el FlowDirection de la ventana y la barra de navegación.This design enables you to change the FlowDirection of the Window and the navigation bar. Para obtener más información y un ejemplo, vea ejemplo de la Página principal de globalización.For more information and an example, see Globalization Homepage Sample.

Procedimientos recomendados para la localización de WPFBest Practices for WPF Localization

Al localizar WPFWPFaplicaciones basadas en, considere la posibilidad de implementar estas prácticas recomendadas:When you localize WPFWPF–based applications, consider implementing these best practices:

  • Use los comentarios de localización para proporcionar contexto adicional a los localizadores.Use localization comments to provide extra context for localizers.

  • Utilice los atributos de localización para controlar la localización en lugar de Uid omitir selectivamente las propiedades de los elementos.Use localization attributes to control localization instead of selectively omitting Uid properties on elements. Vea atributos y comentarios de localización para obtener más información.See Localization Attributes and Comments for more information.

  • Use msbuild -t:updateuid y Uid paraagregarXAMLXAMLy comprobar las propiedades de. -t:checkuidUse msbuild -t:updateuid and -t:checkuid to add and check Uid properties in your XAMLXAML. Use Uid las propiedades para realizar el seguimiento de los cambios entre el desarrollo y la localización.Use Uid properties to track changes between development and localization. Uidlas propiedades le ayudan a localizar nuevos cambios de desarrollo.Uid properties help you localize new development changes. Si agrega Uid propiedades manualmente a un IUUI, la tarea suele ser tediosa y menos precisa.If you manually add Uid properties to a IUUI, the task is typically tedious and less accurate.

    • No edite ni cambie Uid las propiedades después de comenzar la localización.Do not edit or change Uid properties after you begin localization.

    • No use propiedades duplicadas Uid (recuerde esta sugerencia al usar el comando Copiar y pegar).Do not use duplicate Uid properties (remember this tip when you use the copy-and-paste command).

    • Establezca la UltimateResourceFallback ubicación en AssemblyInfo. * para especificar el idioma adecuado para la reserva (por ejemplo [assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.Satellite)],).Set the UltimateResourceFallback location in AssemblyInfo.* to specify the appropriate language for fallback (for example, [assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.Satellite)]).

      Si decide incluir el idioma de origen en el ensamblado principal omitiendo la <UICulture> etiqueta en el archivo del proyecto, establezca la UltimateResourceFallback ubicación como el ensamblado principal en lugar del satélite (por ejemplo, [assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.MainAssembly)]).If you decide to include your source language in the main assembly by omitting the <UICulture> tag in your project file, set the UltimateResourceFallback location as the main assembly instead of the satellite (for example, [assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.MainAssembly)]).

Localizar una aplicación WPFLocalize a WPF Application

Al localizar una WPFWPF aplicación, tiene varias opciones.When you localize a WPFWPF application, you have several options. Por ejemplo, puede enlazar los recursos localizables de la aplicación a un XMLXML archivo, almacenar texto traducible en tablas resx o hacer que el localizador use Lenguaje XAML (Extensible Application Markup Language)Extensible Application Markup Language (XAML) archivos.For example, you can bind the localizable resources in your application to an XMLXML file, store localizable text in resx tables, or have your localizer use Lenguaje XAML (Extensible Application Markup Language)Extensible Application Markup Language (XAML) files. En esta sección se describe un flujo de trabajo de localización que usa el formato BAML de XAML, que ofrece varias ventajas:This section describes a localization workflow that uses the BAML form of XAML, which provides several benefits:

  • Puede localizarlo después de compilar.You can localize after you build.

  • Puede actualizar a una versión más reciente del formulario BAML de XAML con localizaciones de una versión anterior del formulario BAML de XAML para que pueda localizar al mismo tiempo que desarrolla.You can update to a newer version of the BAML form of XAML with localizations from an older version of the BAML form of XAML so that you can localize at the same time that you develop.

  • Puede validar los elementos de origen y la semántica originales en tiempo de compilación porque la forma BAML de XAML es la forma XAMLXAMLcompilada de.You can validate original source elements and semantics at compile time because the BAML form of XAML is the compiled form of XAMLXAML.

Proceso de compilación de la localizaciónLocalization Build Process

Al desarrollar una WPFWPF aplicación, el proceso de compilación para la localización es el siguiente:When you develop a WPFWPF application, the build process for localization is as follows:

  • El desarrollador crea y globaliza la WPFWPF aplicación.The developer creates and globalizes the WPFWPF application. En el archivo de proyecto, el <UICulture>en-US</UICulture> desarrollador establece de modo que, cuando se compila la aplicación, se genera un ensamblado principal independiente del idioma.In the project file the developer sets <UICulture>en-US</UICulture> so that when the application is compiled, a language-neutral main assembly is generated. Este ensamblado tiene un archivo satélite .resources.dll que contiene todos los recursos localizables.This assembly has a satellite .resources.dll file that contains all the localizable resources. Opcionalmente, puede mantener el idioma de origen en el ensamblado principal porque nuestras API de localización admiten la extracción del ensamblado principal.Optionally, you can keep the source language in the main assembly because our localization APIs support extraction from the main assembly.

  • Cuando el archivo se compila en la compilación, XAMLXAML se convierte al formato BAML de XAML.When the file is compiled into the build, the XAMLXAML is converted to the BAML form of XAML. Los archivos culturalmente MyDialog.exe neutro y culturalmente dependiente (Inglés) MyDialog.resources.dll se publican para el cliente en inglés.The culturally neutral MyDialog.exe and the culturally dependent (English) MyDialog.resources.dll files are released to the English-speaking customer.

Flujo de trabajo de localizaciónLocalization Workflow

El proceso de localización comienza después de compilar el MyDialog.resources.dll archivo no localizado.The localization process begins after the unlocalized MyDialog.resources.dll file is built. Los IUUI elementos y las propiedades de su XAMLXAML original se extraen de la forma BAML de XAML en pares clave-valor mediante el uso System.Windows.Markup.Localizerde las API de.The IUUI elements and properties in your original XAMLXAML are extracted from the BAML form of XAML into key-value pairs by using the APIs under System.Windows.Markup.Localizer. Los localizadores usan los pares clave-valor para localizar la aplicación.Localizers use the key-value pairs to localize the application. Puede generar un nuevo archivo .resource.dll a partir de los nuevos valores, una vez completada la localización.You can generate a new .resource.dll from the new values after localization is complete.

Las claves de los pares clave-valor son x:Uid valores que el desarrollador coloca en el original. XAMLXAMLThe keys of the key-value pairs are x:Uid values that are placed by the developer in the original XAMLXAML. Estos x:Uid valores permiten a la API realizar un seguimiento de los cambios que se producen entre el desarrollador y el localizador durante la localización y combinarlos.These x:Uid values enable the API to track and merge changes that happen between the developer and the localizer during localization. Por ejemplo, si el desarrollador cambia el IUUI después de que el localizador empiece a localizarse, puede combinar el cambio de desarrollo con el trabajo de localización ya completado para que se pierda el trabajo de traducción mínimo.For example, if the developer changes the IUUI after the localizer begins localizing, you can merge the development change with the already completed localization work so that minimal translation work is lost.

En el gráfico siguiente se muestra un flujo de trabajo de localización típico basado en el formato BAML de XAML.The following graphic shows a typical localization workflow that is based on the BAML form of XAML. En este diagrama se supone que el desarrollador escribe la aplicación en inglés.This diagram assumes the developer writes the application in English. El desarrollador crea y globaliza la aplicación WPF.The developer creates and globalizes the WPF application. En el archivo de proyecto, el <UICulture>en-US</UICulture> desarrollador establece de modo que, al compilar, se genere un ensamblado principal independiente del lenguaje con un archivo Satellite. Resources. dll que contenga todos los recursos localizables.In the project file the developer sets <UICulture>en-US</UICulture> so that on build, a language neutral main assembly gets generated with a satellite .resources.dll containing all localizable resources. 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.Alternately, one could keep the source language in the main assembly because WPF localization APIs support extraction from the main assembly. Después del proceso de compilación, el XAML se genera en BAML.After the build process, the XAML get compiled into BAML. El archivo MyDialog.exe.resources.dll culturalmente neutral se distribuye al cliente angloparlante.The culturally neutral MyDialog.exe.resources.dll get shipped to the English speaking customer.

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

Diagrama que muestra el flujo de trabajo no localizado.

Ejemplos de localización de WPFExamples of WPF Localization

Esta sección contiene ejemplos de aplicaciones localizadas que le ayudarán a entender cómo compilar WPFWPF y localizar aplicaciones.This section contains examples of localized applications to help you understand how to build and localize WPFWPF applications.

Ejemplo de cuadro de diálogo EjecutarRun Dialog Box Example

En los gráficos siguientes se muestra el resultado del ejemplo de cuadro de diálogo Ejecutar .The following graphics show the output of the Run dialog box sample.

Inglés:English:

Captura de pantalla que muestra un cuadro de diálogo de ejecución en inglés.

Alemán:German:

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

Diseñar un cuadro de diálogo Ejecutar globalDesigning a Global Run Dialog Box

En este ejemplo se genera un cuadro de diálogo WPFWPF de XAMLXAMLejecución mediante y.This example produces a Run dialog box by using WPFWPF and XAMLXAML. Este cuadro de diálogo es equivalente al cuadro de diálogo Ejecutar que está disponible en Microsoft WindowsMicrosoft Windows el menú Inicio.This dialog box is equivalent to the Run dialog box that is available from the Microsoft WindowsMicrosoft Windows Start menu.

Algunos puntos importantes para la creación de cuadros de diálogo globales son los siguientes:Some highlights for making global dialog boxes are:

Diseño automáticoAutomatic Layout

En Window1.xaml:In 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.The previous Window property automatically resizes the window according to the size of the content. 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.This property prevents the window from cutting off content that increases in size after localization; it also removes unneeded space when content decreases in size after localization.

<Grid x:Uid="Grid_1">

Uidlas propiedades son necesarias para que WPFWPF las API de localización funcionen correctamente.Uid properties are needed in order for WPFWPF localization APIs to work correctly.

Las API de WPFWPF localización las interfaz de usuario (UI)user interface (UI)usan para realizar el seguimiento de los cambios entre el desarrollo y la localización de.They are used by WPFWPF localization APIs to track changes between the development and localization of the interfaz de usuario (UI)user interface (UI). Uidlas propiedades permiten combinar una versión más reciente de IUUI con una localización anterior IUUIde.Uid properties enable you to merge a newer version of the IUUI with an older localization of the IUUI. Para agregar una Uid propiedad, ejecute msbuild -t:updateuid RunDialog.csproj en un shell de comandos.You add a Uid property by running msbuild -t:updateuid RunDialog.csproj in a command shell. Este es el método recomendado para agregar Uid propiedades porque la adición manual suele ser lenta y menos precisa.This is the recommended method of adding Uid properties because manually adding them is typically time-consuming and less accurate. Puede comprobar que Uid las propiedades se han establecido correctamente mediante msbuild -t:checkuid RunDialog.csprojla ejecución de.You can check that Uid properties are correctly set by running msbuild -t:checkuid RunDialog.csproj.

Se estructura mediante el Grid control, que es un control útil para aprovechar el diseño automático en WPFWPF. IUUIThe IUUI is structured by using the Grid control, which is a useful control for taking advantage of the automatic layout in WPFWPF. Observe que el cuadro de diálogo se divide en tres filas y cinco columnas.Note that the dialog box is split into three rows and five columns. No una de las definiciones de fila y columna tiene un tamaño fijo; por lo tanto IUUI , los elementos que se colocan en cada celda pueden adaptarse a los aumentos y disminuyen de tamaño durante la localización.Not one of the row and column definitions has a fixed size; hence, the IUUI elements that are positioned in each cell can adapt to increases and decreases in size during localization.

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

Las dos primeras columnas en las que la etiqueta Open: y ComboBox se colocan usan IUUI el 10 por ciento del ancho total.The first two columns where the Open: label and ComboBox are placed use 10 percent of the IUUI total width.

  <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 Gridajuste de tamaño compartido de.Note that of the example uses the shared-sizing feature of Grid. Las tres últimas columnas se aprovechan de esto colocando en el SharedSizeGroupmismo.The last three columns take advantage of this by placing themselves in the same SharedSizeGroup. Como cabe esperar del nombre de la propiedad, esto permite que las columnas compartan el mismo tamaño.As one would expect from the name of the property, this allows the columns to share the same size. Por tanto, cuando la "examinar..." se localiza a la cadena más larga "Durchsuchen...", todos los botones aumentan de ancho en lugar de tener un pequeño botón "Aceptar" y un "Durchsuchen..." de gran tamaño. botón.So when the "Browse…" gets localized to the longer string "Durchsuchen…", all buttons grow in width instead of having a small "OK" button and a disproportionately large "Durchsuchen…" button.

xml:langxml:lang

xml:lang="en-US"

Observe el control XML: lang en XAML colocado en el elemento raíz de IUUI.Notice the xml:lang Handling in XAML placed at the root element of the IUUI. Esta propiedad describe la referencia cultural de un elemento determinado y de sus elementos secundarios.This property describes the culture of a given element and its children. Este valor lo utilizan varias características de y WPFWPF debe cambiarse de forma adecuada durante la localización.This value is used by several features in WPFWPF and should be changed appropriately during localization. Este valor cambia qué diccionario de idioma se usa para separar las palabras con guiones y para la revisión ortográfica.This value changes what language dictionary is use to hyphenate and spell check words. También afecta a la presentación de dígitos y a cómo selecciona el sistema de reserva de fuentes qué fuente usar.It also affects the display of digits and how the font fallback system selects which font to use. 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.Finally, the property affects the way numbers are displayed and the way texts written in complex scripts are shaped. El valor predeterminado es "en-US".The default value is "en-US".

Crear un ensamblado de recursos satéliteBuilding a Satellite Resource Assembly

En .csproj:In .csproj:

Edite .csproj el archivo y agregue la siguiente etiqueta a un <PropertyGroup>incondicional:Edit the .csproj file and add the following tag to an unconditional <PropertyGroup>:

<UICulture>en-US</UICulture>

Observe la adición de un UICulture valor.Notice the addition of a UICulture value. Cuando se establece en un valor válido CultureInfo como en-US, al compilar el proyecto se generará un ensamblado satélite con todos los recursos localizables en él.When this is set to a valid CultureInfo value such as en-US, building the project will generate a satellite assembly with all localizable resources in it.

<Resource Include="RunIcon.JPG">

<Localizable>False</Localizable>

</Resource>

No RunIcon.JPG es necesario localizar el porque debe aparecer igual para todas las referencias culturales.The RunIcon.JPG does not need to be localized because it should appear the same for all cultures. Localizablese establece en false para que permanezca en el ensamblado principal independiente del idioma en lugar del ensamblado satélite.Localizable is set to false so that it remains in the language neutral main assembly instead of the satellite assembly. El valor predeterminado de todos los recursos de Localizable noncompilable se trueestablece en.The default value of all noncompilable resources is Localizable set to true.

Localizar el cuadro de diálogo EjecutarLocalizing the Run Dialog

AnalizarParse

Después de compilar la aplicación, el primer paso para localizarla es analizar los recursos localizables del ensamblado satélite.After building the application, the first step in localizing it is parsing the localizable resources out of the satellite assembly. Para los fines de este tema, use la herramienta LocBaml de ejemplo que encontrará en el ejemplo de la herramienta LocBaml.For the purposes of this topic, use the sample LocBaml tool which can be found at LocBaml Tool Sample. 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.Note that LocBaml is only a sample tool meant to help you get started in building a localization tool that fits into your localization process. Con LocBaml, ejecute lo siguiente para analizar: LocBaml/Parse runDialog. Resources. dll/out: para generar un archivo "runDialog. Resources. dll. csv".Using LocBaml, run the following to parse: LocBaml /parse RunDialog.resources.dll /out: to generate a "RunDialog.resources.dll.CSV" file.

LocalizarLocalize

Use su editor favorito de archivos .CSV compatible con Unicode para modificar este archivo.Use your favorite CSV editor that supports Unicode to edit this file. Filtre todas las entradas que tengan la categoría de localización "None".Filter out all entries with a localization category of "None". Debería ver las entradas siguientes:You should see the following entries:

Clave de recursoResource Key Categoría de localizaciónLocalization Category ValorValue
Button_1:System.Windows.Controls.Button.$ContentButton_1:System.Windows.Controls.Button.$Content BotónButton OKOK
Button_2:System.Windows.Controls.Button.$ContentButton_2:System.Windows.Controls.Button.$Content BotónButton CancelarCancel
Button_3:System.Windows.Controls.Button.$ContentButton_3:System.Windows.Controls.Button.$Content BotónButton Examinar...Browse...
ComboBox_1:System.Windows.Controls.ComboBox.$ContentComboBox_1:System.Windows.Controls.ComboBox.$Content ComboBoxComboBox
TextBlock_1:System.Windows.Controls.TextBlock.$ContentTextBlock_1:System.Windows.Controls.TextBlock.$Content TextText Escriba el nombre del programa, carpeta, documento o recurso de Internet que desea abrir con Windows.Type the name of a program, folder, document, or Internet resource, and Windows will open it for you.
TextBlock_2:System.Windows.Controls.TextBlock.$ContentTextBlock_2:System.Windows.Controls.TextBlock.$Content TextText Abrir:Open:
Window_1:System.Windows.Window.TitleWindow_1:System.Windows.Window.Title TítuloTitle RunRun

Localizar la aplicación a alemán requerirá las traducciones siguientes:Localizing the application to German would require the following translations:

Clave de recursoResource Key Categoría de localizaciónLocalization Category ValorValue
Button_1:System.Windows.Controls.Button.$ContentButton_1:System.Windows.Controls.Button.$Content BotónButton OKOK
Button_2:System.Windows.Controls.Button.$ContentButton_2:System.Windows.Controls.Button.$Content BotónButton AbbrechenAbbrechen
Button_3:System.Windows.Controls.Button.$ContentButton_3:System.Windows.Controls.Button.$Content BotónButton Durchsuchen…Durchsuchen…
ComboBox_1:System.Windows.Controls.ComboBox.$ContentComboBox_1:System.Windows.Controls.ComboBox.$Content ComboBoxComboBox
TextBlock_1:System.Windows.Controls.TextBlock.$ContentTextBlock_1:System.Windows.Controls.TextBlock.$Content TextoText Geben Sie den Namen eines Programms, Ordners, Dokuments oder einer Internetresource an.Geben Sie den Namen eines Programms, Ordners, Dokuments oder einer Internetresource an.
TextBlock_2:System.Windows.Controls.TextBlock.$ContentTextBlock_2:System.Windows.Controls.TextBlock.$Content TextText Öffnen:Öffnen:
Window_1:System.Windows.Window.TitleWindow_1:System.Windows.Window.Title TítuloTitle RunRun

GenerarGenerate

El último paso de localización implica la creación del nuevo ensamblado satélite localizado.The last step of localization involves creating the newly localized satellite assembly. Esto se puede hacer con el siguiente comando de LocBaml:This can be accomplished with the following LocBaml command:

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

En las ventanas alemanas, si este archivo resources. dll se coloca en una carpeta de-DE situada junto al ensamblado principal, este recurso se cargará automáticamente en lugar de en la carpeta en-US.On German Windows, if this resources.dll is placed in a de-DE folder next to the main assembly, this resource will automatically load instead of the one in the en-US folder. 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.If you do not have a German version of Windows to test this, set the culture to whatever culture of Windows you are using (for example, en-US), and replace the original resources DLL.

Carga de recursos satéliteSatellite Resource Loading

MyDialog.exeMyDialog.exe en-US\MyDialog.resources.dllen-US\MyDialog.resources.dll de-DE\MyDialog.resources.dllde-DE\MyDialog.resources.dll
CódigoCode BAML en inglés originalOriginal English BAML BAML localizadoLocalized BAML
Recursos culturalmente neutralesCulturally neutral resources Otros recursos en inglésOther resources in English Otros recursos localizados al alemánOther resources localized to German

.NET Framework elige automáticamente el ensamblado de recursos satélite que se va a cargar en función Thread.CurrentThread.CurrentUICulturede la de la aplicación.The .NET framework automatically chooses which satellite resources assembly to load based on the application’s Thread.CurrentThread.CurrentUICulture. El valor predeterminado es la referencia cultural de su sistema operativo Windows.This defaults to the culture of your Windows OS. Por lo tanto, si usa ventanas alemanas, el de-DE\MyDialog.resources.dll se carga, si usa ventanas en inglés, el en-US\MyDialog.resources.dll se carga.So if you are using German Windows, the de-DE\MyDialog.resources.dll loads, if you are using English Windows, the en-US\MyDialog.resources.dll loads. Puede establecer el recurso de reserva último para la aplicación especificando NeutralResourcesLanguage en AssemblyInfo.* del proyecto.You can set the ultimate fallback resource for your application by specifying the NeutralResourcesLanguage in your project’s AssemblyInfo.*. Por ejemplo, si especifica:For example if you specify:

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

se usará en-US\MyDialog.resources.dll con la versión alemana de Windows si no están disponibles de-DE\MyDialog.resources.dll ni de\MyDialog.resources.dll.then the en-US\MyDialog.resources.dll will be used with German Windows if a de-DE\MyDialog.resources.dll or de\MyDialog.resources.dll are both unavailable.

Página principal de Microsoft Arabia SaudíMicrosoft Saudi Arabia Homepage

En los gráficos siguientes se muestra una página principal en inglés y en árabe.The following graphics show an English and Arabic Homepage. Para obtener el ejemplo completo que genera estos gráficos, vea ejemplo de la Página principal de globalización.For the complete sample that produces these graphics see Globalization Homepage Sample.

Inglés:English:

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

Árabe:Arabic:

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

Diseño de una página principal de Microsoft globalDesigning a Global Microsoft home page

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.This mock up of the Microsoft Saudi Arabia web site illustrates the globalization features provided for RightToLeft languages. Los idiomas como el hebreo y el árabe tienen un orden de lectura de derecha a izquierda, por IUUI lo que el diseño de se debe diseñar con frecuencia de forma bastante diferente que en los idiomas de izquierda a derecha, como el inglés.Languages such as Hebrew and Arabic have a right-to-left reading order so the layout of IUUI must often be laid out quite differently than it would be in left-to-right languages such as English. Localizar de un idioma de izquierda a derecha a uno de derecha a izquierda, o viceversa, puede ser todo un reto.Localizing from a left-to-right language to a right-to-left language or vice versa can be quite challenging. WPFWPF se ha diseñado de modo que tales localizaciones resulten mucho más fáciles.has been designed to make such localizations much easier.

FlowDirectionFlowDirection

Homepage.xaml: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 FlowDirection propiedad en Page.Notice the FlowDirection property on Page. Al cambiar esta propiedad RightToLeft a, se FlowDirection cambiará Page el de y sus elementos secundarios para que el diseño IUUI de esto se invierta en de derecha a izquierda, como cabría esperar un usuario árabe.Changing this property to RightToLeft will change the FlowDirection of the Page and its children elements so that the layout of this IUUI is flipped to become right-to-left as an Arabic user would expect. Puede invalidar el comportamiento de la herencia especificando un FlowDirection explícito en cualquier elemento.One can override the inheritance behavior by specifying an explicit FlowDirection on any element. La FlowDirection propiedad está disponible en cualquier FrameworkElement elemento relacionado con el documento y tiene un valor implícito LeftToRightde.The FlowDirection property is available on any FrameworkElement or document related element and has an implicit value of LeftToRight.

Observe que incluso los pinceles de degradado de fondo se voltean FlowDirection correctamente cuando se cambia la raíz:Observe that even the background gradient brushes are flipped correctly when the root FlowDirection is changed:

FlowDirection="LeftToRight"FlowDirection="LeftToRight"

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

FlowDirection="RightToLeft"FlowDirection="RightToLeft"

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

Evitar usar dimensiones fijas para paneles y controlesAvoid Using Fixed Dimensions for Panels and Controls

Eche un vistazo a homepage. XAML, tenga en cuenta que, aparte del ancho y el alto fijos especificados para IUUI todo DockPanelen la parte superior, no hay otras dimensiones fijas.Take a look through Homepage.xaml, notice that aside from the fixed width and height specified for the entire IUUI on the top DockPanel, there are no other fixed dimensions. Evite usar dimensiones fijas para impedir que se recorte el texto localizado que sea más largo que el texto de origen.Avoid using fixed dimensions to prevent clipping localized text that may be longer than the source text. Los paneles y controles de WPFWPF ajustarán automáticamente su tamaño en función de su contenido.WPFWPF panels and controls will automatically resize based on the content that they contain. La mayoría de los controles también tienen dimensiones mínima y máxima que se pueden establecer para obtener más control (por ejemplo, MinWidth = "20").Most controls also have minimum and maximum dimensions that you can set for more control (for example, MinWidth="20"). Con Grid, también puede establecer anchos y altos relativos mediante "*" (por ejemplo, Width="0.25*") o usar su característica de uso compartido de tamaño de celda.With Grid, you can also set relative widths and heights by using ‘*’ (for example, Width="0.25*") or use its cell size sharing feature.

Comentarios de localizaciónLocalization Comments

En muchos casos, el contenido puede ser ambiguo y difícil de traducir.There are many cases where content may be ambiguous and difficult to translate. El desarrollador o el diseñador tiene la capacidad de proporcionar contexto y comentarios adicionales a los localizadores mediante comentarios de localización.The developer or designer has the ability to provide extra context and comments to localizers through localization comments. El ejemplo de Localization.Comments que aparece a continuación clarifica el uso del carácter "|".For example the Localization.Comments below clarifies the usage of the character ‘|’.

<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's y, en el caso de la herramienta LocBaml, (vea localizar una aplicación), se puede ver en la sexta columna de la fila TextBlock_1 del archivo output. csv:This comment becomes associated with TextBlock_1’s content and in the case of the LocBaml Tool, ( see Localize an Application), it can be seen in the 6th column of the TextBlock_1 row in the output .csv file:

Clave de recursoResource Key CategoríaCategory LegibleReadable ModificableModifiable ComentarioComment ValorValue
TextBlock_1:System.Windows.Controls.TextBlock.$ContentTextBlock_1:System.Windows.Controls.TextBlock.$Content TextText TRUETRUE TRUETRUE Este carácter se usa como una regla decorativa.This character is used as a decorative rule. ||

Se pueden colocar comentarios en el contenido o en las propiedades de cualquier elemento usando la sintaxis siguiente:Comments can be placed on the content or property of any element using the following syntax:

<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ónLocalization Attributes

A menudo, el desarrollador o el administrador de la localización necesita controlar lo que pueden leer y modificar los localizadores.Often the developer or localization manager needs control of what localizers can read and modify. Por ejemplo, quizá no quiera que el localizador traduzca el nombre de su compañía o la redacción legal.For example, you might not want the localizer to translate the name of your company or legal wording. WPFWPF 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.provides attributes that enable you to set the readability, modifiability, and category of an element’s content or property which your localization tool can use to lock, hide, or sort elements. Para obtener más información, consulta Attributes.For more information, see Attributes. Para este ejemplo, la herramienta LocBaml genera solamente los valores de estos atributos.For the purposes of this sample, the LocBaml Tool just outputs the values of these attributes. Todos los controles de WPFWPF tienen valores predeterminados para estos atributos, pero es posible invalidarlos.WPFWPF controls all have default values for these attributes, but you the can override them. Por ejemplo, en el ejemplo siguiente se reemplazan los atributos de localización TextBlock_1 predeterminados para y se establece que el contenido sea legible pero no modificable para los localizadores.For example, the following example overrides the default localization attributes for TextBlock_1 and sets the content to be readable but unmodifiable for localizers.

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

Además de los atributos de legibilidad y modificabilidad, WPFWPF proporciona una enumeración de las categorías comunesLocalizationCategoryde la interfaz de usuario () que se pueden usar para proporcionar más contexto a los localizadores.In addition to the readability and modifiability attributes, WPFWPF provides an enumeration of common UI categories (LocalizationCategory) that can be used to give localizers more context. Las WPFWPF categorías predeterminadas para los controles de plataforma se XAMLXAML pueden reemplazar también en:The WPFWPF default categories for platform controls can be overridden in XAMLXAML as well:

<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 WPFWPF proporciona también se pueden invalidar a través del código, por lo que puede establecer correctamente los valores predeterminados correctos para los controles personalizados.The default localization attributes that WPFWPF provides can also be overridden through code, so you can correctly set the right default values for custom controls. Por ejemplo:For example:

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

Los atributos por instancia establecidos en XAMLXAML tendrán prioridad sobre los valores establecidos en el código de los controles personalizados.The per instance attributes set in XAMLXAML will take precedence over the values set in code on custom controls. Para obtener más información sobre los atributos y los comentarios, vea atributos y comentarios de localización.For more information on attributes and comments, see Localization Attributes and Comments.

Reserva de fuente y fuentes compuestasFont Fallback and Composite Fonts

Si especifica una fuente que no admite un intervalo de punto de tipo determinado WPFWPF , se reservará automáticamente a una que lo hace mediante la interfaz de usuario global. CompositeFont que se encuentra en el directorio Windows\Fonts.If you specify a font that does not support a given codepoint range, WPFWPF will automatically fallback to one that does by using the Global User Interface.compositefont that is located in your Windows\Fonts directory. Las fuentes compuestas funcionan de la misma forma que cualquier otra fuente y se pueden usar FontFamily explícitamente mediante el FontFamily="Global User Interface"establecimiento de un elemento (por ejemplo,).Composite fonts work just as any other font and can be used explicitly by setting an element’s FontFamily (for instance, 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.You can specify your own font fallback preference by creating your own composite font and specifying what font to use for specific codepoint ranges and languages.

Para obtener más información acerca de las FontFamilyfuentes compuestas, vea.For more information on composite fonts see FontFamily.

Localizar la página principal de MicrosoftLocalizing the Microsoft Homepage

Puede seguir los mismos pasos que en el ejemplo del cuadro de diálogo Ejecutar para localizar esta aplicación.You can follow the same steps as the Run Dialog example to localize this application. El archivo. csv localizado para árabe está disponible en el ejemplo de página principal de globalización.The localized .csv file for Arabic is available for you in the Globalization Homepage Sample.