Dela via


Så här gör du: Lokalisera ett program

I den här självstudien beskrivs hur du skapar ett lokaliserat program med hjälp av LocBaml-verktyget.

Anmärkning

LocBaml-verktyget är inte ett produktionsklart program. Det visas som ett exempel som använder några av lokaliserings-API:erna och illustrerar hur du kan skriva ett lokaliseringsverktyg.

Översikt

Den här artikeln ger dig en stegvis metod för att lokalisera ett program. Först förbereder du applikationen så att den text som ska översättas kan extraheras. När texten har översatts sammanfogar du den översatta texten till en ny kopia av det ursprungliga programmet.

Skapa ett exempelprogram

I det här steget förbereder du appen för lokalisering. I WPF-exempel (Windows Presentation Foundation) tillhandahålls ett HelloApp-exempel som används för kodexemplen i den här diskussionen. Om du vill använda det här exemplet laddar du ned XAML-filerna (Extensible Application Markup Language) från LocBaml Tool Sample.

  1. Utveckla programmet till den punkt där du vill starta lokaliseringen.

  2. Ange utvecklingsspråket i projektfilen så att MSBuild genererar en huvudsammansättning och en satellitsammansättning (en fil med .resources.dll-tillägget) för att innehålla neutrala språkresurser. Projektfilen i HelloApp-exemplet är HelloApp.csproj. I den filen hittar du det utvecklingsspråk som identifieras på följande sätt:

    <UICulture>en-US</UICulture>

  3. Lägg till Uids i dina XAML-filer. Uid:er används för att hålla reda på ändringar i filer och för att identifiera objekt som måste översättas. Om du vill lägga till Uids i dina filer kör du updateuid på projektfilen:

    msbuild -t:updateuid helloapp.csproj

    Kontrollera att du inte saknar eller duplicerar Uid:er genom att köra checkuid:

    msbuild -t:checkuid helloapp.csproj

    När du har kört updateuid ska filerna innehålla Uids. I filen Pane1.xaml i HelloApp bör du till exempel hitta följande:

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

Skapa satellitmonteringen för neutrala språkresurser

När programmet har konfigurerats för att generera en satellitsammansättning för neutrala resurser skapar du programmet. Detta genererar huvudprogramförsamlingen samt satellitförsamlingen för resurser på ett neutralt språk som krävs av LocBaml för lokalisering.

Så här skapar du programmet:

  1. Kompilera HelloApp för att skapa ett DLL-bibliotek (Dynamic Link Library):

    msbuild helloapp.csproj

  2. Den nyligen skapade huvudprogramsammansättningen, HelloApp.exe, skapas i följande mapp: C:\HelloApp\Bin\Debug

  3. Den nyligen skapade satellitsammansättningen för neutrala resurser, HelloApp.resources.dll, skapas i följande mapp: C:\HelloApp\Bin\Debug\en-US

Skapa LocBaml-verktyget

  1. Alla filer som behövs för att skapa LocBaml finns i WPF-exemplen. Ladda ned C#-filerna från LocBaml-verktygsexemplet.

  2. Från kommandoraden kör du projektfilen (locbaml.csproj) för att skapa verktyget:

    msbuild locbaml.csproj

  3. Gå till katalogen Bin\Release för att hitta den nyligen skapade körbara filen (locbaml.exe). Exempel: C:\LocBaml\Bin\Release\locbaml.exe

  4. De alternativ som du kan ange när du kör LocBaml är följande.

    Alternativ Beskrivning
    parse eller -p Parsar Baml-, resurser- eller DLL-filer för att generera en .csv- eller .txt-fil.
    generate eller -g Genererar en lokaliserad binär fil med hjälp av en översatt fil.
    out eller -o {filedirectory] Namn på utdatafil.
    culture eller -cul {kultur] Regionala inställningar för utdataenheter.
    translation eller -trans {translation.csv] Översatt eller lokaliserad fil.
    asmpath eller -asmpath {filedirectory] Om XAML-koden innehåller anpassade kontroller måste du ange asmpath till den anpassade kontrollsammansättningen.
    nologo Visar ingen logotyp eller upphovsrättsinformation.
    verbose Visar utförlig lägesinformation.

    Anmärkning

    Om du behöver en lista över alternativen när du kör verktyget anger LocBaml.exe du och trycker sedan på Retur.

Använda LocBaml för att parsa en fil

Nu när du har skapat LocBaml-verktyget är du redo att använda det för att parsa HelloApp.resources.dll för att extrahera textinnehållet som ska lokaliseras.

  1. Kopiera LocBaml.exe till programmets bin\debug-mapp, där huvudprogramsammansättningen skapades.

  2. Använd följande kommando för att parsa satellitsammansättningsfilen och lagra utdata som en .csv fil:

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

    Anmärkning

    Om indatafilen, HelloApp.resources.dll, inte finns i samma katalog som LocBaml.exe flytta en av filerna så att båda filerna finns i samma katalog.

  3. När du kör LocBaml för att parsa filer består utdata av sju fält avgränsade med kommatecken (.csv filer) eller flikar (.txt filer). Följande visar den parsade .csv-filen för HelloApp.resources.dll:

    Parsed .csv-filen
    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,,Hej Världen
    HelloApp.g.en-US.resources:window1.baml,Text2:System.Windows.Controls.TextBlock.$Content,None,TRUE, TRUE,,Hej då Världen

    De sju fälten är:

    I följande tabell visas hur dessa fält mappas till de avgränsade värdena för .csv-filen:

    BAML-namn Resursnyckel Kategori Läsbarhet Modifierbarhet Kommentarer Värde
    HelloApp.g.en-US.resources:window1.baml Stack1:System.Windows.Controls.StackPanel.$Content Ignorera Falskt Falskt #Text1;#Text2
    HelloApp.g.en-US.resources:window1.baml Text1:System.Windows.Controls.TextBlock.$Content Ingen SANN SANN Hej världen
    HelloApp.g.en-US.resources:window1.baml Text2:System.Windows.Controls.TextBlock.$Content Ingen SANN SANN Hej då världen

    Observera att alla värden för fältet Kommentarer inte innehåller några värden. Om ett fält inte har något värde är det tomt. Observera också att objektet på den första raden varken är läsbart eller ändringsbart och har "Ignorera" som kategorivärde , vilket alla anger att värdet inte kan lokaliseras.

  4. För att underlätta identifiering av lokaliserade objekt i parsade filer, särskilt i stora filer, kan du sortera eller filtrera objekten efter kategori, läsbarhet och modifiering. Du kan till exempel filtrera bort oläsbara och omodifierbara värden.

Översätta det lokaliserade innehållet

Använd alla verktyg som du har tillgängliga för att översätta det extraherade innehållet. Ett bra sätt att göra detta är att skriva resurserna till en .csv fil och visa dem i Microsoft Excel och göra översättningsändringar i den sista kolumnen (värde).

Använd LocBaml för att generera en ny .resources.dll fil

Innehållet som identifierades genom att parsa HelloApp.resources.dll med LocBaml har översatts och måste sammanfogas tillbaka till det ursprungliga programmet. generate Använd alternativet eller -g för att generera en ny .resources.dll fil.

  1. Använd följande syntax för att generera en ny HelloApp.resources.dll fil. Markera kulturen som en-US (/cul:en-US).

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

    Anmärkning

    Om indatafilen, Hello.csv, inte finns i samma katalog som den körbara filen LocBaml.exeflyttar du en av filerna så att båda filerna finns i samma katalog.

  2. Ersätt den gamla HelloApp.resources.dll-filen i katalogenC:\HelloApp\Bin\Debug\en-US\HelloApp.resources.dll med din nyligen skapade HelloApp.resources.dll-fil .

  3. "Hello World" och "Goodbye World" bör nu översättas i ditt program.

  4. Om du vill översätta till en annan kultur använder du kulturen i det språk som du översätter till. I följande exempel visas hur du översätter till fransk-kanadensisk:

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

  5. I samma sammansättning som huvudprogramsammansättningen skapar du en ny kulturspecifik mapp som rymmer den nya satellitsammansättningen. För fransk-kanadensiska skulle mappen vara fr-CA.

  6. Kopiera den genererade satellitsammansättningen till den nya mappen.

  7. För att testa den nya satellitsammansättningen måste du ändra den kultur som programmet ska köras under. Du kan göra detta på något av två sätt:

    • Ändra operativsystemets regionala inställningar.

    • Lägg till följande kod i App.xaml.cs i ditt program:

      <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 för att använda LocBaml

  • Alla beroende sammansättningar som definierar anpassade kontroller måste kopieras till den lokala katalogen för LocBaml eller installeras i GAC. Detta är nödvändigt eftersom lokaliserings-API:et måste ha åtkomst till de beroende sammansättningarna när det läser det binära XAML (BAML).

  • Om huvudsammansättningen är signerad måste den genererade resurs-DLL:en också signeras för att den ska kunna läsas in.

  • Versionen av den lokaliserade resurs-DLL:en måste synkroniseras med huvudsammansättningen.

Se även