Procedimiento Localizar una aplicaciónHow to: Localize an Application

En este tutorial se explica cómo crear una aplicación localizada mediante la herramienta LocBaml.This tutorial explains how to create a localized application by using the LocBaml tool.

Nota

La herramienta LocBaml no es una aplicación lista para producción.The LocBaml tool is not a production-ready application. Se presenta como un ejemplo que usa algunas de las API de localización y muestra cómo se podría escribir una herramienta de localización.It is presented as a sample that uses some of the localization APIs and illustrates how you might write a localization tool.

Información generalOverview

En este artículo se ofrece un enfoque detallado para la localización de una aplicación.This discussion gives you a step-by-step approach to localizing an application. En primer lugar, prepare su aplicación para que se puede extraer el texto que se va a traducir.First, you will prepare your application so that the text that will be translated can be extracted. Una vez traducido el texto, tendrá que combinar el texto traducido en una nueva copia de la aplicación original.After the text is translated, you will merge the translated text into a new copy of the original application.

RequisitosRequirements

En el transcurso de este debate, usará Microsoft Build Engine (MSBuild), que es un compilador que se ejecuta desde la línea de comandos.Over the course of this discussion, you will use Microsoft build engine (MSBuild), which is a compiler that runs from the command line.

Además, se le pedirá que use un archivo de proyecto.Also, you will be instructed to use a project file. Para obtener instrucciones sobre cómo usar MSBuild y archivos de proyecto, vea compilar e implementar.For instructions on how to use MSBuild and project files, see Build and Deploy.

Todos los ejemplos de este artículo usan en-US (inglés-Estados Unidos) como referencia cultural.All the examples in this discussion use en-US (English-US) as the culture. Esto le permitirá trabajar siguiendo los pasos de los ejemplos sin necesidad de instalar un idioma diferente.This enables you to work through the steps of the examples without installing a different language.

Crear una aplicación de ejemploCreate a Sample Application

En este paso, preparará la aplicación para la localización.In this step, you will prepare your application for localization. En los ejemplos de Windows Presentation Foundation (WPF)Windows Presentation Foundation (WPF) se proporciona una HelloApp que se usará para los ejemplos de código de este artículo.In the Windows Presentation Foundation (WPF)Windows Presentation Foundation (WPF) samples, a HelloApp sample is supplied that will be used for the code examples in this discussion. Si desea usar este ejemplo, descargue los Lenguaje XAML (Extensible Application Markup Language)Extensible Application Markup Language (XAML) archivos desde el ejemplo de la herramienta LocBaml.If you would like to use this sample, download the Lenguaje XAML (Extensible Application Markup Language)Extensible Application Markup Language (XAML) files from the LocBaml Tool Sample.

  1. Desarrolle su aplicación hasta el punto donde desea iniciar la localización.Develop your application to the point where you want to start localization.

  2. Especifique el lenguaje de desarrollo en el archivo de proyecto para que MSBuild genere un ensamblado principal y un ensamblado satélite (un archivo con la extensión. Resources. dll) para que contenga los recursos de idioma neutro.Specify the development language in the project file so that MSBuild generates a main assembly and a satellite assembly (a file with the .resources.dll extension) to contain the neutral language resources. El archivo de proyecto en el ejemplo HelloApp es HelloApp.csproj.The project file in the HelloApp sample is HelloApp.csproj. En ese archivo, encontrará el lenguaje de desarrollo que se identifica como sigue:In that file, you will find the development language identified as follows:

    <UICulture>en-US</UICulture>

  3. Agregue UID a sus archivos XAMLXAML.Add Uids to your XAMLXAML files. Los UID se usan para realizar un seguimiento de los cambios en los archivos y para identificar los elementos que se deben traducir.Uids are used to keep track of changes to files and to identify items that must be translated. Para agregar UID a los archivos, ejecute updateuid en el archivo de proyecto:To add Uids to your files, run updateuid on your project file:

    msbuild -t:updateuid helloapp.csprojmsbuild -t:updateuid helloapp.csproj

    Para comprobar que no faltan UID ni están duplicados, ejecute checkuid:To verify that you have no missing or duplicate Uids, run checkuid:

    msbuild -t:checkuid helloapp.csprojmsbuild -t:checkuid helloapp.csproj

    Después de ejecutar updateuid, los archivos deben contener UID.After running updateuid, your files should contain Uids. Por ejemplo, en el archivo Pane1.xaml de HelloApp, busque lo siguiente:For example, in the Pane1.xaml file of HelloApp, you should find the following:

    <StackPanel x:Uid="StackPanel_1">

    <TextBlock x:Uid="TextBlock_1">Hello World</TextBlock>

    <TextBlock x:Uid="TextBlock_2">Goodbye World</TextBlock>

    </StackPanel>

Crear el ensamblado satélite de recursos de idioma neutroCreate the Neutral Language Resources Satellite Assembly

Después de configurar la aplicación para que genere un ensamblado satélite de recursos de idioma neutro, compile la aplicación.After the application is configured to generate a neutral language resources satellite assembly, you build the application. Esto genera el ensamblado de aplicación principal, así como el ensamblado satélite de recursos de idioma neutro que LocBaml necesita para la localización.This generates the main application assembly, as well as the neutral language resources satellite assembly that is required by LocBaml for localization. Para compilar la aplicación:To build the application:

  1. Compile HelloApp para crear una biblioteca de vínculos dinámicos (DLL):Compile HelloApp to create a dynamic-link library (DLL):

    msbuild helloapp.csprojmsbuild helloapp.csproj

  2. El ensamblado de aplicación principal que se acaba de crear, HelloApp.exe, se encuentra en la carpeta siguiente:The newly created main application assembly, HelloApp.exe, is created in the following folder:

    C:\HelloApp\Bin\Debug\

  3. El ensamblado satélite de recursos de idioma neutro que se acaba de crear, HelloApp.resources.dll, se crea en la carpeta siguiente:The newly created neutral language resources satellite assembly, HelloApp.resources.dll, is created in the following folder:

    C:\HelloApp\Bin\Debug\en-US\

Compilar la herramienta LocBamlBuild the LocBaml Tool

  1. Todos los archivos necesarios para compilar LocBaml se encuentran en los ejemplos de WPFWPF.All the files necessary to build LocBaml are located in the WPFWPF samples. Descargue los C# archivos desde el ejemplo de la herramienta LocBaml.Download the C# files from the LocBaml Tool Sample.

  2. Desde la línea de comandos, ejecute el archivo de proyecto (locbaml.csproj) para compilar la herramienta:From the command line, run the project file (locbaml.csproj) to build the tool:

    msbuild locbaml.csprojmsbuild locbaml.csproj

  3. Vaya al directorio Bin\Release para buscar el archivo ejecutable recién creado (locbaml.exe).Go to the Bin\Release directory to find the newly created executable file (locbaml.exe). Ejemplo: C:\LocBaml\Bin\Release\locbaml.exe.Example:C:\LocBaml\Bin\Release\locbaml.exe.

  4. Las opciones que puede especificar al ejecutar LocBaml son las siguientes:The options that you can specify when you run LocBaml are as follows:

    • Parse o -p: Analiza los archivos BAML, Resources o DLL para generar un archivo. csv o. txt.parse or -p: Parses Baml, resources, or DLL files to generate a .csv or .txt file.

    • generar o -g: Genera un archivo binario localizado mediante un archivo traducido.generate or -g: Generates a localized binary file by using a translated file.

    • out o -o {filedirectory] : Nombre del archivo de salida.out or -o {filedirectory] : Output file name.

    • Culture o -CUL {Culture] : Configuración regional de los ensamblados de salida.culture or -cul {culture] : Locale of output assemblies.

    • Translation o -Trans {Translation. csv] : Archivo traducido o localizado.translation or -trans {translation.csv] : Translated or localized file.

    • asmpath o -asmpath: {filedirectory] : Si el XAMLXAML código contiene controles personalizados, debe proporcionar el asmpath al ensamblado del control personalizado.asmpath or -asmpath: {filedirectory] : If your XAMLXAML code contains custom controls, you must supply the asmpath to the custom control assembly.

    • nologo No muestra ningún logotipo ni información de copyright.nologo: Displays no logo or copyright information.

    • verbose: Muestra información de modo detallado.verbose: Displays verbose mode information.

    Nota

    Si necesita una lista de las opciones cuando ejecute la herramienta, escriba LocBaml. exe y presione Entrar.If you need a list of the options when you are running the tool, type LocBaml.exe and press ENTER.

Usar LocBaml para analizar un archivoUse LocBaml to Parse a File

Ahora que ya ha creado la herramienta LocBaml, está listo para usarla para analizar HelloApp.resources.dll y extraer el contenido de texto que se traducirá.Now that you have created the LocBaml tool, you are ready to use it to parse HelloApp.resources.dll to extract the text content that will be localized.

  1. Copie LocBaml.exe en la carpeta bin\debug de la aplicación, que es donde se creó el ensamblado de aplicación principal.Copy LocBaml.exe to your application's bin\debug folder, where the main application assembly was created.

  2. Para analizar el archivo de ensamblado satélite y almacenar la salida como un archivo .csv, use el siguiente comando:To parse the satellite assembly file and store the output as a .csv file, use the following command:

    LocBaml.exe /parse HelloApp.resources.dll /out:Hello.csvLocBaml.exe /parse HelloApp.resources.dll /out:Hello.csv

    Nota

    Si el archivo de entrada, HelloApp.resources.dll, no está en el mismo directorio que LocBaml.exe, mueva uno de los archivos para que ambos archivos se encuentren en el mismo directorio.If the input file, HelloApp.resources.dll, is not in the same directory as LocBaml.exe move one of the files so that both files are in the same directory.

  3. Cuando se ejecuta LocBaml para analizar los archivos, la salida se compone de siete campos delimitados por comas (archivos .csv) o tabuladores (archivos .txt).When you run LocBaml to parse files, the output consists of seven fields delimited by commas (.csv files) or tabs (.txt files). A continuación se muestra el archivo .csv analizado para HelloApp.resources.dll:The following shows the parsed .csv file for the HelloApp.resources.dll:

    HelloApp.g.en-US.resources:window1.baml,Stack1:System.Windows.Controls.StackPanel.$Content,Ignore,FALSE, FALSE,,#Text1;#Text2;HelloApp.g.en-US.resources:window1.baml,Stack1:System.Windows.Controls.StackPanel.$Content,Ignore,FALSE, FALSE,,#Text1;#Text2;
    HelloApp.g.en-US.resources:window1.baml,Text1:System.Windows.Controls.TextBlock.$Content,None,TRUE, TRUE,,Hello WorldHelloApp.g.en-US.resources:window1.baml,Text1:System.Windows.Controls.TextBlock.$Content,None,TRUE, TRUE,,Hello World
    HelloApp.g.en-US.resources:window1.baml,Text2:System.Windows.Controls.TextBlock.$Content,None,TRUE, TRUE,,Goodbye WorldHelloApp.g.en-US.resources:window1.baml,Text2:System.Windows.Controls.TextBlock.$Content,None,TRUE, TRUE,,Goodbye World

    Los siete campos son:The seven fields are:

    1. Nombre de BAML.BAML Name. Es el nombre del recurso BAML con respecto al ensamblado satélite de lenguaje de origen.The name of the BAML resource with respect to the source language satellite assembly.

    2. Clave de recurso.Resource Key. Es el identificador de recursos localizado.The localized resource identifier.

    3. Categoría.Category. Tipo de valor.The value type. Vea atributos y comentarios de localización.See Localization Attributes and Comments.

    4. Legibilidad.Readability. Indica si un localizador puede leer el valor.Whether the value can be read by a localizer. Vea atributos y comentarios de localización.See Localization Attributes and Comments.

    5. Modificabilidad.Modifiability. Indica si un localizador puede modificar el valor.Whether the value can be modified by a localizer. Vea atributos y comentarios de localización.See Localization Attributes and Comments.

    6. Comentarios.Comments. Descripción adicional del valor para ayudar a determinar cómo se localiza.Additional description of the value to help determine how a value is localized. Vea atributos y comentarios de localización.See Localization Attributes and Comments.

    7. Valor.Value. Es el valor de texto que se va a traducir a la referencia cultural deseada.The text value to translate to the desired culture.

    En la tabla siguiente se muestra la correspondencia entre estos campos y los valores delimitados del archivo CSV:The following table shows how these fields map to the delimited values of the .csv file:

    Nombre de BAMLBAML name Clave de recursoResource key CategoríaCategory LegibilidadReadability ModificabilidadModifiability ComentariosComments ValueValue
    HelloApp.g.en-US.resources:window1.bamlHelloApp.g.en-US.resources:window1.baml Stack1:System.Windows.Controls.StackPanel.$ContentStack1:System.Windows.Controls.StackPanel.$Content IgnorarIgnore FALSEFALSE FALSEFALSE #Text1;#Text2#Text1;#Text2
    HelloApp.g.en-US.resources:window1.bamlHelloApp.g.en-US.resources:window1.baml Text1:System.Windows.Controls.TextBlock.$ContentText1:System.Windows.Controls.TextBlock.$Content NoneNone TRUETRUE TRUETRUE Hello WorldHello World
    HelloApp.g.en-US.resources:window1.bamlHelloApp.g.en-US.resources:window1.baml Text2:System.Windows.Controls.TextBlock.$ContentText2:System.Windows.Controls.TextBlock.$Content NoneNone TRUETRUE TRUETRUE Goodbye WorldGoodbye World

    Observe que todos los valores del campo comentarios no contienen valores; Si un campo no tiene un valor, está vacío.Notice that all the values for the Comments field contain no values; if a field doesn't have a value, it is empty. Observe también que el elemento de la primera fila no es legible ni modificable y tiene "ignore" como su valor de categoría , lo que indica que el valor no es localizable.Also notice that the item in the first row is neither readable nor modifiable, and has "Ignore" as its Category value, all of which indicates that the value is not localizable.

  4. Para facilitar la detección de los elementos localizables en los archivos analizados, especialmente en los archivos de gran tamaño, puede ordenar o filtrar los elementos por categoría, legibilidady modificabilidad.To facilitate discovery of localizable items in parsed files, particularly in large files, you can sort or filter the items by Category, Readability, and Modifiability. Por ejemplo, puede filtrar los valores ilegibles y no modificables.For example, you can filter out unreadable and unmodifiable values.

Traducir el contenido LocalizableTranslate the Localizable Content

Use cualquier herramienta disponible traducir el contenido extraído.Use any tool that you have available to translate the extracted content. Una buena forma de hacerlo es escribir los recursos en un archivo .csv, verlos en Microsoft ExcelMicrosoft Excel y realizar los cambios de traducción cambios en la última columna (valor).A good way to do this is to write the resources to a .csv file and view them in Microsoft ExcelMicrosoft Excel, making translation changes to the last column (value).

Usar LocBaml para generar un nuevo archivo .resources.dllUse LocBaml to Generate a New .resources.dll File

El contenido que se identificó al analizar HelloApp.resources.dll con LocBaml se ha traducido y debe combinarse en la aplicación original.The content that was identified by parsing HelloApp.resources.dll with LocBaml has been translated and must be merged back into the original application. Use la opción Generate o -g para generar un nuevo archivo. Resources. dll.Use the generate or -g option to generate a new .resources.dll file.

  1. Use la sintaxis siguiente para generar un nuevo archivo HelloApp.resources.dll.Use the following syntax to generate a new HelloApp.resources.dll file. Marque la referencia cultural como en-US (/cul:en-US).Mark the culture as en-US (/cul:en-US).

    LocBaml.exe /generate HelloApp.resources.dll /trans:Hello.csv /out:c:\ /cul:en-USLocBaml.exe /generate HelloApp.resources.dll /trans:Hello.csv /out:c:\ /cul:en-US

    Nota

    Si el archivo de entrada, Hello.csv, no está en el mismo directorio que el ejecutable, LocBaml.exe, mueva uno de los archivos para que ambos se encuentren en el mismo directorio.If the input file, Hello.csv, is not in the same directory as the executable, LocBaml.exe, move one of the files so that both files are in the same directory.

  2. Reemplace el archivo HelloApp.resources.dll anterior en el directorio C:\HelloApp\Bin\Debug\en-US\HelloApp.resources.dll por el archivo HelloApp.resources.dll recién creado.Replace the old HelloApp.resources.dll file in the C:\HelloApp\Bin\Debug\en-US\HelloApp.resources.dll directory with your newly created HelloApp.resources.dll file.

  3. “Hello World” y “Goodbye World” deberían aparecer ya traducidos en la aplicación."Hello World" and "Goodbye World" should now be translated in your application.

  4. Para traducir a una referencia cultural diferente, use la referencia cultural del idioma al que va a traducir.To translate to a different culture, use the culture of the language that you are translating to. En el ejemplo siguiente se muestra cómo traducir al francés canadiense:The following example shows how to translate to French-Canadian:

    LocBaml.exe /generate HelloApp.resources.dll /trans:Hellofr-CA.csv /out:c:\ /cul:fr-CALocBaml.exe /generate HelloApp.resources.dll /trans:Hellofr-CA.csv /out:c:\ /cul:fr-CA

  5. En el mismo ensamblado que el ensamblado de aplicación principal, cree una nueva carpeta específica de la referencia cultural para alojar el nuevo ensamblado satélite.In the same assembly as the main application assembly, create a new culture-specific folder to house the new satellite assembly. Para el francés canadiense, la carpeta sería fr-CA.For French-Canadian, the folder would be fr-CA.

  6. Copie el ensamblado satélite generado en la nueva carpeta.Copy the generated satellite assembly to the new folder.

  7. Para probar el nuevo ensamblado satélite, deberá cambiar la referencia cultural en la que se ejecutará la aplicación.To test the new satellite assembly, you need to change the culture under which your application will run. Hay dos maneras de hacerlo:You can do this in one of two ways:

    • Cambie la configuración regional de su sistema operativo (Inicio | configuración regional y de idiomadel panel | de control ).Change your operating system's regional settings (Start | Control Panel | Regional and Language Options).

    • En la aplicación, agregue el código siguiente a App.xaml.cs:In your application, add the following code to App.xaml.cs:

    <Application
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        x:Class="SDKSample.App"
        x:Uid="Application_1"
        StartupUri="Window1.xaml">
    </Application>
    
    using System.Windows;
    using System.Globalization;
    using System.Threading;
    
    namespace SDKSample
    {
        public partial class App : Application
        {
            public App()
            {
                // Change culture under which this application runs
                CultureInfo ci = new CultureInfo("fr-CA");
                Thread.CurrentThread.CurrentCulture = ci;
                Thread.CurrentThread.CurrentUICulture = ci;
            }
        }
    }
    
    
    Imports System.Windows
    Imports System.Globalization
    Imports System.Threading
    
    Namespace SDKSample
        Partial Public Class App
            Inherits Application
            Public Sub New()
                ' Change culture under which this application runs
                Dim ci As New CultureInfo("fr-CA")
                Thread.CurrentThread.CurrentCulture = ci
                Thread.CurrentThread.CurrentUICulture = ci
            End Sub
        End Class
    End Namespace
    

Algunas sugerencias para el uso de LocBamlSome Tips for Using LocBaml

  • Todos los ensamblados dependientes que definen controles personalizados se deben copiar en el directorio local de LocBaml o instalarse en la GAC (caché global de ensamblados).All dependent assemblies that define custom controls must be copied into the local directory of LocBaml or installed into the GAC. Esto es necesario porque la API de localización debe tener acceso a los ensamblados dependientes cuando lee el XAML binario (BAML).This is necessary because the localization API must have access to the dependent assemblies when it reads the binary XAML (BAML).

  • Si el ensamblado principal está firmado, la DLL de recursos generada también debe estar firmada para que se pueda cargar.If the main assembly is signed, the generated resource DLL must also be signed in order for it to be loaded.

  • La versión de la DLL de recursos localizados debe estar sincronizada con el ensamblado principal.The version of the localized resource DLL needs to be synchronized with the main assembly.

Pasos adicionalesWhat's Next

Ahora que ya tiene un conocimiento básico de cómo usar la herramienta LocBaml,You should now have a basic understanding of how to use the LocBaml tool. será capaz de crear un archivo que contenga UID.You should be able to make a file that contains Uids. Al usar la herramienta LocBaml, podrá analizar un archivo para extraer el contenido localizable y, después de traducir el contenido, podrá generar un archivo .resources.dll en el que se combine el contenido traducido.By using the LocBaml tool, you should be able to parse a file to extract the localizable content, and after the content is translated, you should be able to generate a .resources.dll file that merges the translated content. En este tema no incluyen todos los detalles posibles, pero ahora ya dispone de los conocimientos necesarios para usar LocBaml en la localización de aplicaciones.This topic does not include every possible detail, but you now have the knowledge necessary to use LocBaml for localizing your applications.

Vea tambiénSee also