Dela via


Översikt över WPF-globalisering och lokalisering

När du begränsar produktens tillgänglighet till endast ett språk begränsar du din potentiella kundbas till en bråkdel av vår världens 7,5 miljarder invånare. Om du vill att dina program ska nå en global målgrupp är kostnadseffektiv lokalisering av din produkt ett av de bästa och mest ekonomiska sätten att nå fler kunder.

Den här översikten introducerar globalisering och lokalisering i Windows Presentation Foundation (WPF). Globalisering är design och utveckling av program som utförs på flera platser. Globalisering stöder till exempel lokaliserade användargränssnitt och regionala data för användare i olika kulturer. WPF tillhandahåller globaliserade designfunktioner, inklusive automatisk layout, satellitsammansättningar och lokaliserade attribut och kommentarer.

Lokalisering är översättning av programresurser till lokaliserade versioner för de specifika kulturer som programmet stöder. När du lokaliserar i WPF använder du API:erna i System.Windows.Markup.Localizer namnområdet. Dessa API:er driver kommandoradsverktyget LocBaml Tool Sample . Information om hur du skapar och använder LocBaml finns i Lokalisera ett program.

Varning

LocBaml-verktyget fungerar bara med WPF för .NET Framework-projekt. Det fungerar inte med WPF för .NET.

Metodtips för globalisering och lokalisering i WPF

Du kan få ut mesta möjliga av den globaliserings- och lokaliseringsfunktion som är inbyggd i WPF genom att följa de UI-design- och lokaliseringsrelaterade tips som det här avsnittet innehåller.

Metodtips för WPF-användargränssnittsdesign

När du utformar ett WPF-baserat användargränssnitt bör du överväga att implementera dessa metodtips:

  • Skriv ditt användargränssnitt i XAML; undvika att skapa användargränssnittet i kod. När du skapar användargränssnittet med hjälp av XAML exponerar du det via inbyggda lokaliserings-API:er.

  • Undvik att använda absoluta positioner och fasta storlekar för att lägga ut innehåll; använd i stället relativ eller automatisk storleksändring.

    • Använd SizeToContent och behåll bredd och höjd inställd på Auto.

    • Undvik att använda Canvas för att lägga ut UIs.

    • Använd Grid och dess funktion för storleksdelning.

  • Ge extra utrymme i marginaler eftersom lokaliserad text ofta kräver mer utrymme. Extra utrymme möjliggör möjliga överhängande tecken.

  • Aktivera TextWrappingTextBlock för att undvika klippning.

  • Ange attributet xml:lang . Det här attributet beskriver kulturen för ett visst element och dess underordnade element. Värdet för den här egenskapen ändrar beteendet för flera funktioner i WPF. Den ändrar till exempel beteendet för avstavning, stavningskontroll, nummerersättning, komplex skriptformning och återställning av teckensnitt. Mer information om hur du anger xml:lang-hantering i XAML finns iGlobalisering för WPF.

  • Skapa ett anpassat sammansatt teckensnitt för att få bättre kontroll över teckensnitt som används för olika språk. Som standard använder WPF teckensnittet GlobalUserInterface.composite i katalogen Windows\Fonts.

  • När du skapar navigeringsprogram som kan lokaliseras i en kultur som visar text i ett format från höger till vänster anger du uttryckligen FlowDirection varje sida för att säkerställa att sidan inte ärver FlowDirection från NavigationWindow.

  • När du skapar fristående navigeringsprogram som finns utanför en webbläsare anger du StartupUri för ditt första program till en NavigationWindow i stället för till en sida (till exempel <Application StartupUri="NavigationWindow.xaml">). Med den här designen FlowDirection kan du ändra fönstret och navigeringsfältet. Mer information och ett exempel finns i Exempel på globaliseringssida.

Metodtips för WPF-lokalisering

När du lokaliserar WPF-baserade program bör du överväga att implementera dessa metodtips:

  • Använd lokaliseringskommenterar för att ge extra kontext för lokaliserare.

  • Använd lokaliseringsattribut för att styra lokaliseringen i stället för att Uid selektivt utelämna egenskaper för element. Mer information finns i Lokaliseringsattribut och kommentarer .

  • Använd msbuild -t:updateuid och -t:checkuid för att lägga till och kontrollera Uid egenskaper i din XAML. Använd Uid egenskaper för att spåra ändringar mellan utveckling och lokalisering. Uid egenskaper hjälper dig att lokalisera nya utvecklingsändringar. Om du lägger till Uid egenskaper i ett användargränssnitt manuellt är uppgiften vanligtvis omständlig och mindre exakt.

    • Ändra eller redigera inte Uid egenskaper när du har påbörjat lokaliseringen.

    • Använd inte duplicerade Uid egenskaper (kom ihåg det här tipset när du använder kommandot kopiera och klistra in).

    • Ange UltimateResourceFallback i AssemblyInfo.* för att ställa in ett lämpligt språk som reserv (till exempel [assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.Satellite)]).

      Om du bestämmer dig för att inkludera källspråket i huvudsammansättningen genom att utelämna taggen <UICulture> i projektfilen anger du UltimateResourceFallback platsen som huvudsammansättningen i stället för satelliten (till exempel [assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.MainAssembly)]).

Lokalisera ett WPF-program

När du lokaliserar ett WPF-program har du flera alternativ. Du kan till exempel binda de lokala resurserna i ditt program till en XML-fil, lagra lokaliserbar text i resx-tabeller eller låta din språkvariant använda XAML-filer. I det här avsnittet beskrivs ett lokaliseringsarbetsflöde som använder BAML-formen av XAML, vilket ger flera fördelar:

  • Du kan lokalisera efter att du har byggt.

  • Du kan uppdatera till en nyare version av BAML-formen av XAML med lokaliseringar från en äldre version av BAML-formen av XAML så att du kan lokalisera samtidigt som du utvecklar.

  • Du kan verifiera ursprungliga källelement och semantik vid kompileringstillfället eftersom BAML-formen av XAML är den kompilerade formen av XAML.

Byggprocess för lokalisering

När du utvecklar ett WPF-program är lokaliseringsprocessen följande:

  • Utvecklaren skapar och globaliserar WPF-programmet. I projektfilen ställer utvecklaren in <UICulture>en-US</UICulture> så att en språkneutral huvudsammansättning genereras när programmet kompileras. Den här sammansättningen har en satellit-.resources.dll fil som innehåller alla lokala resurser. Du kan också behålla källspråket i huvudsammansättningen eftersom våra lokaliserings-API:er stöder extrahering från huvudsammansättningen.

  • När filen kompileras till bygget konverteras XAML till BAML-formen av XAML. De kulturellt neutrala MyDialog.exe och kulturellt beroende filerna (engelska) MyDialog.resources.dll släpps till den engelsktalande kunden.

Arbetsflöde för lokalisering

Lokaliseringsprocessen börjar när den oallokerade MyDialog.resources.dll filen har skapats. Gränssnittselementen och egenskaperna i din ursprungliga XAML extraheras från BAML-formen av XAML till nyckel/värde-par med hjälp av API:erna under System.Windows.Markup.Localizer. Localizers använder nyckel/värde-paren för att lokalisera programmet. Du kan generera en ny .resource.dll från de nya värdena när lokaliseringen är klar.

Nycklarna för nyckel/värde-paren är x:Uid värden som placeras av utvecklaren i den ursprungliga XAML:en. Dessa x:Uid värden gör det möjligt för API:et att spåra och sammanfoga ändringar som sker mellan utvecklaren och lokaliseraren under lokaliseringen. Om utvecklaren till exempel ändrar användargränssnittet när lokaliseringen har börjat lokaliseras kan du sammanfoga utvecklingsändringen med det redan slutförda lokaliseringsarbetet så att minimalt översättningsarbete går förlorat.

Följande bild visar ett typiskt lokaliseringsarbetsflöde som baseras på BAML-formen av XAML. Det här diagrammet förutsätter att utvecklaren skriver programmet på engelska. Utvecklaren skapar och globaliserar WPF-programmet. I projektfilen konfigurerar utvecklaren <UICulture>en-US</UICulture> så att en språkneutral huvudsaklig assembly genereras med en satellit .resources.dll som innehåller alla lokaliserbara resurser. Alternativt kan man behålla källspråket i huvudsammansättningen eftersom API:er för WPF-lokalisering stöder extrahering från huvudsammansättningen. Efter byggprocessen kompileras XAML till BAML. Den kulturellt neutrala MyDialog.exe.resources.dll skickas till den engelsktalande kunden.

Diagram som visar arbetsflödet för lokalisering.

Diagram som visar det oallokerade arbetsflödet.

Exempel på WPF-lokalisering

Det här avsnittet innehåller exempel på lokaliserade program som hjälper dig att förstå hur du skapar och lokaliserar WPF-program.

Exempel på körningsdialogruta

Följande grafik visar utdata från exemplet i dialogrutan Kör .

Engelska:

Skärmbild som visar en Kör-dialogruta.

Tyska:

Skärmbild som visar en dialogruta för att köra program på tyska.

Utforma en global körningsdialogruta

I det här exemplet skapas en Kör dialogruta med hjälp av WPF och XAML. Den här dialogrutan motsvarar dialogrutan Kör som är tillgänglig från Microsoft Windows Start-menyn.

Några höjdpunkter för att skapa globala dialogrutor är:

Automatisk layout

I Window1.xaml:

<Window SizeToContent="WidthAndHeight">

Den tidigare window-egenskapen ändrar automatiskt storlek på fönstret efter innehållets storlek. Den här egenskapen förhindrar att fönstret stänger av innehåll som ökar i storlek efter lokaliseringen. Det tar också bort onödigt utrymme när innehållet minskar i storlek efter lokalisering.

<Grid x:Uid="Grid_1">

Uid egenskaper krävs för att WPF-lokaliserings-API:er ska fungera korrekt.

De används av API:er för WPF-lokalisering för att spåra ändringar mellan utveckling och lokalisering av användargränssnittet (UI). Uid med egenskaper kan du sammanfoga en nyare version av användargränssnittet med en äldre lokalisering av användargränssnittet. Du lägger till en Uid egenskap genom att köra msbuild -t:updateuid RunDialog.csproj i ett kommandogränssnitt. Det här är den rekommenderade metoden för att lägga till Uid egenskaper eftersom det vanligtvis är tidskrävande och mindre exakt att lägga till dem manuellt. Du kan kontrollera att egenskaperna är korrekt inställda genom att köra Uidmsbuild -t:checkuid RunDialog.csproj.

Användargränssnittet är strukturerat med kontrollen Grid, som är användbar för att dra nytta av den automatiska layouten i WPF. Observera att dialogrutan är uppdelad i tre rader och fem kolumner. Inte någon av rad- och kolumndefinitionerna har en fast storlek. Därför kan gränssnittselementen som placeras i varje cell anpassas till ökningar och minskningar i storlek under lokaliseringen.

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

De första två kolumnerna där etiketten Öppna: och ComboBox placeras använder 10 procent av användargränssnittets totala bredd.

  <ColumnDefinition x:Uid="ColumnDefinition_3" SharedSizeGroup="Buttons" />
  <ColumnDefinition x:Uid="ColumnDefinition_4" SharedSizeGroup="Buttons" />
  <ColumnDefinition x:Uid="ColumnDefinition_5" SharedSizeGroup="Buttons" />
</Grid.ColumnDefinitions>

Observera att i exemplet används funktionen för delad storleksändring i Grid. De tre sista kolumnerna utnyttjar detta genom att placera sig själva i samma SharedSizeGroup. Som man kan förvänta sig av egenskapens namn kan kolumnerna ha samma storlek. Så när "Bläddra..." blir lokaliserad till den längre strängen "Durchsuchen...", alla knappar växer i bredd istället för att ha en liten "OK"-knapp och en oproportionerligt stor "Durchsuchen..." knapp.

xml:lang

xml:lang="en-US"

Observera xml:lang-hanteringen i XAML som placeras i rotelementet i användargränssnittet. Den här egenskapen beskriver kulturen hos ett visst element och dess underordnade element. Det här värdet används av flera funktioner i WPF och bör ändras på lämpligt sätt under lokaliseringen. Det här värdet ändrar vilken språkordlista som används för att bindestrecka och stavningskontrollord. Det påverkar också visningen av siffror och hur återställningssystemet för teckensnitt väljer vilket teckensnitt som ska användas. Slutligen påverkar egenskapen hur tal visas och hur texter som skrivs i komplexa skript formas. Standardvärdet är "en-US".

Skapa en satellitresurssammansättning

I .csproj:

Redigera .csproj-filen och lägg till följande tagg i en ovillkorlig <PropertyGroup>:

<UICulture>en-US</UICulture>

Observera tillägget av ett UICulture värde. När detta är inställt på ett giltigt CultureInfo värde, till exempel en-US, genererar projektet en satellitsammansättning med alla lokala resurser i det.

<Resource Include="RunIcon.JPG">

<Localizable>False</Localizable>

</Resource>

Behöver RunIcon.JPG inte lokaliseras eftersom den ska se likadan ut för alla kulturer. Localizable är inställd på false så att den förblir i den språkneutrala huvudenheten i stället för satellitenheten. Standardvärdet för alla icke-kompatibla resurser är Localizable inställt på true.

Lokalisera dialogrutan Kör

Tolka

När du har skapat programmet tolkar det första steget när det gäller att lokalisera de lokala resurserna från satellitsammansättningen. I det här avsnittet använder du exempelverktyget LocBaml som finns i LocBaml Tool Sample. Observera att LocBaml bara är ett exempelverktyg som hjälper dig att komma igång med att skapa ett lokaliseringsverktyg som passar in i lokaliseringsprocessen. Använd LocBaml och kör följande för att parsa: LocBaml /parsa RunDialog.resources.dll /out: för att generera en "RunDialog.resources.dll. CSV-fil.

Varning

LocBaml-verktyget fungerar bara med WPF för .NET Framework-projekt. Det fungerar inte med WPF för .NET.

Lokalisera

Använd din csv-favoritredigerare som har stöd för Unicode för att redigera den här filen. Filtrera bort alla poster med lokaliseringskategorin "Ingen". Du bör se följande objekt:

Resursnyckel Lokaliseringskategori Värde
Button_1:System.Windows.Controls.Button.$Content Knapp OKEJ
Button_2:System.Windows.Controls.Button.$Content Knapp Annullera
Button_3:System.Windows.Controls.Button.$Content Knapp Bläddra...
ComboBox_1:System.Windows.Controls.ComboBox.$Content Kombinationsruta
TextBlock_1:System.Windows.Controls.TextBlock.$Content SMS Skriv namnet på ett program, en mapp, ett dokument eller en Internetresurs så öppnas den åt dig i Windows.
TextBlock_2:System.Windows.Controls.TextBlock.$Content SMS Öppna:
Fönster_1:System.Windows.Fönster.Titel Titel Springa

Att lokalisera programmet till tyska skulle kräva följande översättningar:

Resursnyckel Lokaliseringskategori Värde
Button_1:System.Windows.Controls.Button.$Content Knapp OKEJ
Button_2:System.Windows.Controls.Button.$Content Knapp Avbryt
Button_3:System.Windows.Controls.Button.$Content Knapp Durchsuchen...
ComboBox_1:System.Windows.Controls.ComboBox.$Content Kombinationsruta
TextBlock_1:System.Windows.Controls.TextBlock.$Content SMS Geben Sie den Namen eines Programms, Ordners, Dokuments oder einer Internetresource an.
TextBlock_2:System.Windows.Controls.TextBlock.$Content SMS Öppna:
Window_1:System.Windows.Window.Title Titel Springa

Generera

Det sista lokaliseringssteget handlar om att skapa den nyligen lokaliserade satellitsammansättningen. Detta kan göras med följande LocBaml-kommando:

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

Om den här resources.dll placeras i en de-DE mapp bredvid huvudsammansättningen i tyska Windows läses den här resursen in automatiskt i stället för den i mappen en-US. Om du inte har en tysk version av Windows för att testa detta anger du kulturen till vilken kultur i Windows du använder (till exempel en-US) och ersätter de ursprungliga resursernas DLL.

Inläsning av satellitresurser

MyDialog.exe en-US\MyDialog.resources.dll de-DE\MyDialog.resources.dll
Kod Original BAML på engelska Lokaliserad BAML
Kulturellt neutrala resurser Andra resurser på engelska Andra resurser lokaliserade till tyska

.NET väljer automatiskt vilken satellitresursuppsättning som ska läsas in baserat på programmets Thread.CurrentUICulture. Detta är standard för kulturen i ditt Windows-operativsystem. Om du använder tyska Windows läses de-DE\MyDialog.resources.dll filen in. Om du använder det engelska Windows läses filen en-US\MyDialog.resources.dll in. Du kan ange den ultimata återställningsresursen NeutralResourcesLanguage för ditt program genom att ange attributet i projektets AssemblyInfo-fil . Om du till exempel anger:

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

sedan används en-US\MyDialog.resources.dll-filen med tyska Windows om ingen av följande filer är tillgängliga: de-DE\MyDialog.resources.dll eller de\MyDialog.resources.dll.

Startsida för Microsoft Saudiarabien

Följande grafik visar en engelsk och arabisk startsida. Det fullständiga exemplet som producerar dessa bilder finns i Exempel på globaliseringssida.

Engelska:

Skärmbild som visar en engelsk startsida.

Arabiska:

Skärmbild som visar en arabisk startsida.

Designa Microsofts globala startsida

Den här modellen av Microsoft Saudi Arabias webbplats illustrerar de globaliseringsfunktioner som tillhandahålls för RightToLeft-språk. Språk som hebreiska och arabiska har en läsordning från höger till vänster, så layouten för användargränssnittet måste ofta anges på ett helt annat sätt än på vänster-till-höger-språk som engelska. Att lokalisera från ett språk från vänster till höger till ett höger-till-vänster-språk eller vice versa kan vara ganska svårt. WPF har utformats för att göra sådana lokaliseringar mycket enklare.

FlödeRiktning

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">

Observera egenskapen FlowDirectionPage. Om du ändrar den här egenskapen till RightToLeft ändras elementen FlowDirectionPage och dess underordnade element så att layouten för det här användargränssnittet ändras till att bli höger till vänster som en arabisk användare kan förvänta sig. Man kan åsidosätta arvsbeteendet genom att ange en explicit FlowDirection för alla element. Egenskapen FlowDirection är tillgänglig för valfritt FrameworkElement eller dokumentrelaterat element och har ett implicit värde på LeftToRight.

Observera att även bakgrundsgradientens penslar vänds korrekt när roten FlowDirection ändras.

FlowDirection="LeftToRight"

Skärmbild som visar flytet i toningen från vänster till höger.

Flödesriktning="HögerTillVänster"

Skärmbild som visar toningsflödet från höger till vänster.

Undvik att använda fasta dimensioner för paneler och kontroller

Ta en titt på Homepage.xaml, observera att förutom den fasta bredd och höjd som angetts för hela användargränssnittet överst DockPanelfinns det inga andra fasta dimensioner. Undvik att använda fasta dimensioner för att förhindra urklipp av lokaliserad text som kan vara längre än källtexten. WPF-paneler och -kontroller ändrar automatiskt storlek baserat på innehållet som de innehåller. De flesta kontroller har också minsta och högsta dimensioner som du kan ange för mer kontroll (till exempel MinWidth="20"). Med Gridkan du också ange relativa bredder och höjder med hjälp av *( till exempel Width="0.25*") eller använda dess delningsfunktion för cellstorlek.

Lokaliseringskommentar

Det finns många fall där innehållet kan vara tvetydigt och svårt att översätta. Utvecklaren eller designern har möjlighet att ge extra kontext och kommentarer till lokaliserare via lokaliseringskommentare. Till exempel lokalisering.Kommentarer nedan klargör användningen av tecknet |.

<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>

Den här kommentaren associeras med TextBlock_1 innehåll och när det gäller LocBaml-verktyget ( se Lokalisera ett program) visas den i den 6:e kolumnen i raden TextBlock_1 i utdatafilen .csv:

Resursnyckel Kategori Läsbar Kan ändras Kommentar Värde
TextBlock_1:System.Windows.Controls.TextBlock.$Content SMS SANN SANN Det här tecknet används som en dekorativ regel. |

Kommentarer kan placeras på innehållet eller egenskapen för ett element med hjälp av följande 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>

Lokaliseringsattribut

Ofta behöver utvecklaren eller lokaliseringschef kontroll över vad lokalisatörer kan hantera. Du kanske till exempel inte vill att språkvarianten ska översätta namnet på ditt företag eller juridiska formuleringar. WPF tillhandahåller attribut som gör att du kan ange läsbarhet, modifiering och kategori för ett elements innehåll eller egenskap som lokaliseringsverktyget kan använda för att låsa, dölja eller sortera element. Mer information finns i Attributes. I det här exemplet matar LocBaml-verktyget bara ut värdena för dessa attribut. WPF-kontroller har alla standardvärden för dessa attribut, men du kan åsidosätta dem. I följande exempel åsidosätts till exempel standardattributen för lokalisering för TextBlock_1 och anger att innehållet ska vara läsbart men ommodifierbart för lokaliserare.

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

Utöver läsbarhets- och modifieringsattributen tillhandahåller WPF en uppräkning av vanliga användargränssnittskategorier (LocalizationCategory) som kan användas för att ge lokaliserare mer kontext. WPF-standardkategorierna för plattformskontroller kan också åsidosättas i XAML:

<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>

Standardlokaliseringsattributen som WPF tillhandahåller kan också åsidosättas genom kod, så att du korrekt kan ange rätt standardvärden för anpassade kontroller. Till exempel:

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

De attribut per instans som anges i XAML har företräde framför de värden som anges i kod för anpassade kontroller. Mer information om attribut och kommentarer finns i Lokaliseringsattribut och kommentarer.

Teckensnittsåterställning och sammansatta teckensnitt

Om du anger ett teckensnitt som inte stöder ett visst kodpunktsintervall återgår WPF automatiskt till ett som gör det med hjälp av det globala användargränssnittet.compositefont som finns i katalogen Windows\Fonts. Sammansatta teckensnitt fungerar precis som andra teckensnitt och kan användas explicit genom att ange ett elements FontFamily (till exempel FontFamily="Global User Interface"). Du kan ange egna inställningar för teckensnittsåterställning genom att skapa ett eget sammansatt teckensnitt och ange vilket teckensnitt som ska användas för specifika kodpunktsintervall och språk.

Mer information om sammansatta teckensnitt finns i FontFamily.

Lokalisera Microsofts startsida

Du kan följa samma steg som exemplet Kör dialogruta för att lokalisera det här programmet. Den lokaliserade .csv-filen för arabiska finns tillgänglig för dig på Globaliseringens hemsides-exempel.