Delen via


Handleiding: Een applicatie lokaliseren

In deze zelfstudie wordt uitgelegd hoe u een gelokaliseerde toepassing maakt met behulp van het hulpprogramma LocBaml.

Opmerking

Het LocBaml-hulpprogramma is geen toepassing die gereed is voor productie. Het wordt weergegeven als een voorbeeld dat gebruikmaakt van een aantal lokalisatie-API's en laat zien hoe u een lokalisatieprogramma kunt schrijven.

Overzicht

In dit artikel krijgt u een stapsgewijze benadering voor het lokaliseren van een toepassing. Eerst bereidt u uw toepassing voor, zodat de tekst die wordt vertaald, kan worden geëxtraheerd. Nadat de tekst is vertaald, voegt u de vertaalde tekst samen in een nieuwe kopie van de oorspronkelijke toepassing.

Een voorbeeldtoepassing maken

In deze stap bereidt u uw app voor op lokalisatie. In de WPF-voorbeelden (Windows Presentation Foundation) wordt een HelloApp-voorbeeld geleverd dat wordt gebruikt voor de codevoorbeelden in deze discussie. Als u dit voorbeeld wilt gebruiken, downloadt u de XAML-bestanden (Extensible Application Markup Language) uit het LocBaml-hulpprogrammavoorbeeld.

  1. Ontwikkel uw toepassing tot het punt waar u de lokalisatie wilt starten.

  2. Geef de ontwikkeltaal in het projectbestand op, zodat MSBuild een hoofdassembly en een satellietassembly (een bestand met de extensie .resources.dll) genereert om de neutrale taalbronnen te bevatten. Het projectbestand in het HelloApp-voorbeeld is HelloApp.csproj. In dat bestand vindt u de ontwikkelingstaal die als volgt wordt geïdentificeerd:

    <UICulture>en-US</UICulture>

  3. Voeg Uids toe aan uw XAML-bestanden. Uids worden gebruikt om wijzigingen in bestanden bij te houden en items te identificeren die moeten worden vertaald. Als u Uids wilt toevoegen aan uw bestanden, voert u het volgende uit updateuid op het projectbestand:

    msbuild -t:updateuid helloapp.csproj

    Als u wilt controleren of u geen ontbrekende of dubbele Uids hebt, voert u het volgende uit checkuid:

    msbuild -t:checkuid helloapp.csproj

    Na het uitvoeren van updateuid moeten uw bestanden Uids bevatten. In het bestand Pane1.xaml van HelloApp vindt u bijvoorbeeld het volgende:

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

De satellietassemblage voor neutrale taalbronnen maken

Nadat de toepassing is geconfigureerd voor het genereren van een satellietassembly voor neutrale taalbronnen, bouwt u de toepassing. Hiermee wordt de hoofdtoepassingsassembly en de satellietassembly voor neutraal taalbronnen gegenereerd die door LocBaml is vereist voor lokalisatie.

De toepassing bouwen:

  1. Compileer HelloApp om een DLL (Dynamic Link Library) te maken:

    msbuild helloapp.csproj

  2. De zojuist gemaakte hoofdtoepassingsassembly, HelloApp.exe, wordt gemaakt in de volgende map: C:\HelloApp\Bin\Debug

  3. De recentelijk aangemaakte satellietsamenstelling voor neutrale taalbronnen, HelloApp.resources.dll, is aangemaakt in de volgende map: C:\HelloApp\Bin\Debug\en-US

Het locbaml-hulpprogramma bouwen

  1. Alle bestanden die nodig zijn om LocBaml te bouwen, bevinden zich in de WPF-voorbeelden. Download de C#-bestanden uit het LocBaml Tool-voorbeeld.

  2. Voer vanaf de opdrachtregel het projectbestand (locbaml.csproj) uit om het hulpprogramma te bouwen:

    msbuild locbaml.csproj

  3. Ga naar de map Bin\Release om het zojuist gemaakte uitvoerbare bestand (locbaml.exe) te vinden. Voorbeeld: C:\LocBaml\Bin\Release\locbaml.exe

  4. De opties die u kunt opgeven wanneer u LocBaml uitvoert, zijn als volgt.

    Optie Beschrijving
    parse of -p Parseert Baml-, resources- of DLL-bestanden om een .csv- of .txt-bestand te genereren.
    generate of -g Genereert een gelokaliseerd binair bestand met behulp van een vertaald bestand.
    out of -o {bestandsmap] Naam van uitvoerbestand.
    culture of -cul {cultuur} Taalinstelling van uitvoerassemblages.
    translation of -trans {translation.csv} Vertaald of gelokaliseerd bestand.
    asmpath of -asmpath {bestandsmap] Als uw XAML-code aangepaste besturingselementen bevat, moet u de asmpath opgeven voor de aangepaste besturingsassemblage.
    nologo Geeft geen logo- of copyrightgegevens weer.
    verbose Geeft uitgebreide modusgegevens weer.

    Opmerking

    Als u een lijst met de opties nodig hebt wanneer u het hulpprogramma uitvoert, voert u enter LocBaml.exe in en drukt u op Enter.

LocBaml gebruiken om een bestand te parseren

Nu u het hulpprogramma LocBaml hebt gemaakt, kunt u het gebruiken om HelloApp.resources.dll te parseren om de tekstinhoud te extraheren die wordt gelokaliseerd.

  1. Kopieer LocBaml.exe naar de map bin\debug van uw toepassing, waar de hoofdtoepassingsassembly is gemaakt.

  2. Gebruik de volgende opdracht om het satellietassemblybestand te parseren en de uitvoer op te slaan als een .csv-bestand:

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

    Opmerking

    Als het invoerbestand, HelloApp.resources.dll, zich niet in dezelfde map bevindt als LocBaml.exe een van de bestanden verplaatsen, zodat beide bestanden zich in dezelfde map bevinden.

  3. Wanneer u LocBaml uitvoert om bestanden te parseren, bestaat de uitvoer uit zeven velden gescheiden door komma's (.csv bestanden) of tabbladen (.txt bestanden). Hieronder ziet u het geparseerde .csv-bestand voor de HelloApp.resources.dll:

    Het .csv-bestand is geparseerd
    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,,Hallo Wereld
    HelloApp.g.en-US.resources:window1.baml,Text2:System.Windows.Controls.TextBlock.$Content,None,TRUE, TRUE,, Vaarwel Wereld

    De zeven velden zijn:

    In de volgende tabel ziet u hoe deze velden worden gekoppeld aan de afgebakende waarden van het .csv-bestand.

    BAML-naam Resourcesleutel Categorie Leesbaarheid Wijzigbaarheid Opmerkingen Waarde
    HelloApp.g.en-US.resources:window1.baml Stack1:System.Windows.Controls.StackPanel.$Content Negeren ONWAAR ONWAAR #Text1;#Text2
    HelloApp.g.en-US.resources:window1.baml Text1:System.Windows.Controls.TextBlock.$Content Geen WAAR WAAR Hallo mensen
    HelloApp.g.en-US.resources:window1.baml Text2:System.Windows.Controls.TextBlock.$Content Geen WAAR WAAR Vaarwel Wereld

    U ziet dat alle waarden voor het veld Opmerkingen geen waarden bevatten; als een veld geen waarde heeft, is het leeg. U ziet ook dat het item in de eerste rij niet leesbaar of wijzigbaar is en 'Negeren' heeft als categoriewaarde , die allemaal aangeeft dat de waarde niet kan worden gelokaliseerd.

  4. Om de detectie van lokaliseerbare items in geparseerde bestanden mogelijk te maken, met name in grote bestanden, kunt u de items sorteren of filteren op categorie, leesbaarheid en wijzigbaarheid. U kunt bijvoorbeeld onleesbare en niet-aanpasbare waarden filteren.

De lokaliseerbare inhoud vertalen

Gebruik elk hulpprogramma dat u beschikbaar hebt om de geëxtraheerde inhoud te vertalen. Een goede manier om dit te doen, is door de resources naar een .csv bestand te schrijven en deze weer te geven in Microsoft Excel, waardoor vertaalwijzigingen worden aangebracht in de laatste kolom (waarde).

LocBaml gebruiken om een nieuw .resources.dll-bestand te genereren

De inhoud die is geïdentificeerd door het parseren van HelloApp.resources.dll met LocBaml is vertaald en moet weer worden samengevoegd in de oorspronkelijke toepassing. Gebruik de generate of -g optie om een nieuw .resources.dll-bestand te genereren.

  1. Gebruik de volgende syntaxis om een nieuw HelloApp.resources.dll-bestand te genereren. Markeer de cultuur als en-US (/cul:en-US).

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

    Opmerking

    Als het invoerbestand, Hello.csv, zich niet in dezelfde map bevindt als het uitvoerbare bestand, LocBaml.exe, verplaatst u een van de bestanden zodat beide bestanden zich in dezelfde map bevinden.

  2. Vervang het oude HelloApp.resources.dll-bestand in de C:\HelloApp\Bin\Debug\en-US\HelloApp.resources.dll map door het zojuist gemaakte HelloApp.resources.dll-bestand .

  3. 'Hallo wereld' en 'Vaarwel wereld' dienen nu te worden vertaald in uw toepassing.

  4. Als u wilt vertalen naar een andere cultuur, gebruikt u de cultuur van de taal waarnaar u vertaalt. In het volgende voorbeeld ziet u hoe u vertaalt naar Frans-Canadees:

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

  5. Maak binnen dezelfde assembly als de hoofdtoepassingsassembly een nieuwe cultuurspecifieke map om de nieuwe satellietassembly in te plaatsen. Voor Frans-Canadees zou de map fr-CAzijn.

  6. Kopieer de gegenereerde satellietassemblage naar de nieuwe map.

  7. Als u de nieuwe satellietassembly wilt testen, moet u de cultuur wijzigen waaronder uw toepassing wordt uitgevoerd. U kunt dit op twee manieren doen:

    • Wijzig de landinstellingen van uw besturingssysteem.

    • Voeg in uw toepassing de volgende code toe aan 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
      

Tips voor het gebruik van LocBaml

  • Alle afhankelijke assembly's die aangepaste besturingselementen definiëren, moeten worden gekopieerd naar de lokale map van LocBaml of geïnstalleerd in de GAC. Dit is nodig omdat de lokalisatie-API toegang moet hebben tot de afhankelijke assembly's wanneer deze de binaire XAML (BAML) leest.

  • Als de hoofdassembly is ondertekend, moet ook de gegenereerde bron-DLL worden ondertekend om te kunnen worden geladen.

  • De versie van het gelokaliseerde bron-DLL-bestand moet worden gesynchroniseerd met de hoofdassembly.

Zie ook