Compartir a través de


Procedimiento para localizar una aplicación

En este tutorial se explica cómo crear una aplicación localizada mediante la herramienta LocBaml.

Nota:

La herramienta LocBaml no es una aplicación lista para producción. Se presenta como un ejemplo que usa algunas de las API de localización y muestra cómo puede escribir una herramienta de localización.

Información general

En este artículo se proporciona un enfoque paso a paso para localizar una aplicación. En primer lugar, prepare la aplicación para que se pueda extraer el texto que se traducirá. Una vez traducido el texto, se combina el texto traducido en una nueva copia de la aplicación original.

Crear una aplicación de ejemplo

En este paso, preparas tu app para la localización. En los ejemplos de Windows Presentation Foundation (WPF), se proporciona un ejemplo helloApp que se usará para los ejemplos de código de esta discusión. Si quieres usar este ejemplo, descarga los archivos de Lenguaje de marcado extensible de aplicaciones (XAML) del ejemplo de herramienta LocBaml.

  1. Desarrolle la aplicación hasta el punto en el que desea iniciar la localización.

  2. Especifique el lenguaje de desarrollo en el archivo del proyecto para que MSBuild genere un ensamblado principal y un ensamblado satélite (un archivo con la extensión .resources.dll) para contener los recursos de lenguaje neutro. El archivo de proyecto del ejemplo HelloApp es HelloApp.csproj. En ese archivo, encontrará el lenguaje de desarrollo identificado como se indica a continuación:

    <UICulture>en-US</UICulture>

  3. Agregue Uids a los archivos XAML. Los uids se usan para realizar un seguimiento de los cambios en los archivos e identificar los elementos que se deben traducir. Para agregar Uids a los archivos, ejecute updateuid en el archivo del proyecto:

    msbuild -t:updateuid helloapp.csproj

    Para comprobar que no hay Uids faltantes ni duplicados, ejecute checkuid:

    msbuild -t:checkuid helloapp.csproj

    Después de ejecutar updateuid, los archivos deben contener Uids. Por ejemplo, en el archivo Pane1.xaml de HelloApp, debería encontrar lo siguiente:

    <StackPanel x:Uid="StackPanel_1">
      <TextBlock x:Uid="TextBlock_1">Hello World</TextBlock>
      <TextBlock x:Uid="TextBlock_2">Goodbye World</TextBlock>
    </StackPanel>
    

Creación del ensamblado satélite de recursos de lenguaje neutro

Una vez configurada la aplicación para generar un ensamblado satélite de recursos de lenguaje neutro, compile la aplicación. Esto genera el ensamblado de aplicación principal, así como el ensamblado satélite de recursos de lenguaje neutro requerido por LocBaml para la localización.

Para compilar la aplicación:

  1. Compile HelloApp para crear una biblioteca de vínculos dinámicos (DLL):

    msbuild helloapp.csproj

  2. El ensamblado de aplicación principal recién creado, HelloApp.exe, se crea en la siguiente carpeta: C:\HelloApp\Bin\Debug

  3. El ensamblaje satélite de recursos de idioma neutral recién creado, HelloApp.resources.dll, se crea en la carpeta siguiente: C:\HelloApp\Bin\Debug\en-US

Compilación de la herramienta LocBaml

  1. Todos los archivos necesarios para compilar LocBaml se encuentran en los ejemplos de WPF. Descargue los archivos de C# del ejemplo de herramienta LocBaml.

  2. Desde la línea de comandos, ejecute el archivo del proyecto (locbaml.csproj) para compilar la herramienta:

    msbuild locbaml.csproj

  3. Vaya al directorio Bin\Release para buscar el archivo ejecutable recién creado (locbaml.exe). Ejemplo: C:\LocBaml\Bin\Release\locbaml.exe

  4. Las opciones que puede especificar al ejecutar LocBaml son las siguientes.

    Opción Descripción
    parse o -p Analiza los archivos Baml, resources o DLL para generar un archivo .csv o .txt.
    generate o -g Genera un archivo binario localizado mediante un archivo traducido.
    out o -o {directorio de archivos] Nombre del archivo de salida.
    culture o -cul {cultura] Configuración regional de ensamblajes de salida.
    translation o -trans {translation.csv] Archivo traducido o localizado.
    asmpath o -asmpath {directorio de archivos] Si el código XAML contiene controles personalizados, debes proporcionar el asmpath al ensamblado del control personalizado.
    nologo No muestra información sobre el logotipo ni los derechos de autor.
    verbose Muestra información detallada del modo.

    Nota:

    Si necesita una lista de las opciones al ejecutar la herramienta, escriba LocBaml.exe y presione Entrar.

Uso de LocBaml para analizar un archivo

Ahora que ha creado la herramienta LocBaml, está listo para usarla y analizar HelloApp.resources.dll, con el fin de extraer el contenido de texto que se va a localizar.

  1. Copie LocBaml.exe en la carpeta bin\debug de la aplicación, donde se creó el ensamblado de aplicación principal.

  2. Para analizar el archivo de ensamblado satélite y almacenar la salida como un archivo .csv, use el siguiente comando:

    LocBaml.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 mover uno de los archivos para que ambos archivos estén en el mismo directorio.

  3. Al ejecutar LocBaml para analizar archivos, la salida consta de siete campos delimitados por comas (archivos.csv) o pestañas (archivos.txt). A continuación se muestra el archivo de .csv analizado para el HelloApp.resources.dll:

    Archivo .csv procesado
    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,,Hola Mundo
    HelloApp.g.en-US.resources:window1.baml,Text2:System.Windows.Controls.TextBlock.$Content,None,TRUE, TRUE,,Adiós Mundo

    Los siete campos son:

    En la tabla siguiente se muestra cómo estos campos se asignan a los valores delimitados del archivo .csv:

    Nombre BAML Clave de recurso Categoría Legibilidad Modificabilidad Comentarios Importancia
    HelloApp.g.en-US.resources:window1.baml Stack1:System.Windows.Controls.StackPanel.$Content Ignorar FALSO FALSO #Text1;#Text2
    HelloApp.g.en-US.resources:window1.baml Text1:System.Windows.Controls.TextBlock.$Content Ninguno VERDADERO VERDADERO Hola mundo
    HelloApp.g.en-US.resources:window1.baml Text2:System.Windows.Controls.TextBlock.$Content Ninguno VERDADERO VERDADERO Adiós mundo

    Observe que todos los valores del campo Comentarios no contienen valores; si un campo no tiene un valor, está vacío. Observe también que el elemento de la primera fila no es legible ni modificable y tiene "Ignore" como su valor Category , todos los cuales indican que el valor no es localizable.

  4. Para facilitar la detección de elementos localizables en archivos analizados, especialmente en archivos grandes, puede ordenar o filtrar los elementos por Categoría, Legibilidad y Modificabilidad. Por ejemplo, puede filtrar los valores no legibles y no modificables.

Traducción del contenido localizable

Use cualquier herramienta que tenga disponible para traducir el contenido extraído. Una buena manera de hacerlo es escribir los recursos en un archivo .csv y verlos en Microsoft Excel, realizando cambios de traducción en la última columna (valor).

Uso de LocBaml para generar un nuevo archivo .resources.dll

El contenido identificado mediante el análisis HelloApp.resources.dll con LocBaml se ha traducido y debe combinarse de nuevo en la aplicación original. Use la generate opción o -g para generar un nuevo archivo .resources.dll.

  1. Use la siguiente sintaxis para generar un nuevo archivo HelloApp.resources.dll. Marque la referencia cultural como en-US (/cul:en-US).

    LocBaml.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 archivos estén en el mismo directorio.

  2. Reemplace el archivo HelloApp.resources.dll antiguo en el directorio C:\HelloApp\Bin\Debug\en-US\HelloApp.resources.dll por el archivo deHelloApp.resources.dll recién creado.

  3. "Hola mundo" y "Adiós mundo" ahora deben traducirse en la aplicación.

  4. Para traducir a una referencia cultural diferente, use la referencia cultural del idioma al que se va a traducir. En el ejemplo siguiente se muestra cómo traducir a francés-canadiense:

    LocBaml.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 hospedar el nuevo ensamblado satélite. En francés-canadiense, la carpeta sería fr-CA.

  6. Copie el ensamblado satélite generado en la nueva carpeta.

  7. Para probar el nuevo conjunto satélite, debe cambiar la configuración regional bajo la cual se ejecutará su aplicación. Puede hacerlo de una de las maneras siguientes:

    • Cambie la configuración regional del sistema operativo.

    • En la aplicación, agregue el código siguiente a 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
      

Sugerencias para usar LocBaml

  • Todos los ensamblados dependientes que definen controles personalizados deben copiarse en el directorio local de LocBaml o instalarse en la GAC. Esto es necesario porque la API de localización debe tener acceso a los ensamblados dependientes cuando lee el XAML binario (BAML).

  • Si el ensamblado principal está firmado, el archivo DLL del recurso generado también debe estar firmado para que se cargue.

  • La versión del archivo DLL de recursos localizados debe sincronizarse con el ensamblado principal.

Consulte también