Lokalisatie van een Windows Phone 8-toepassing

Recente winkeltrends tonen aan dat het aanbieden van uw app in het Engels slechts betrekking heeft op ongeveer 25% van de Windows Phone-klanten. Het toevoegen van Spaans, Frans, Mandarijn, Russisch en Duits kan de dekking voor meer dan 75% van de Windows Phone-klanten vergroten.

Invoering

In deze zelfstudie leer ik je hoe je een Windows Phone 8-app kunt lokaliseren om meer potentiële klanten te bereiken. Ik zal u laten zien hoe u uw Windows Phone 8-project zo kunt instellen dat de volledige gebruikersinterface, inclusief foutmeldingen, kan worden gelokaliseerd. Aan het einde van de zelfstudie zult u hebben geleerd hoe u uw app moet voorbereiden, zodat deze in meerdere talen kan worden vertaald. 

Overweeg de volgende praktische tips om een ​​app te maken die eenvoudig kan worden gelokaliseerd:

  • Maak afzonderlijke bronbestanden voor strings, afbeeldingen en video's om uw codetaal onafhankelijk te maken. Dit zorgt ervoor dat het verschillende talen kan ondersteunen.
  • Schakel multiline-ondersteuning en tekstomloop in besturingselementen in. Dit geeft u meer ruimte voor het weergeven van tekenreeksen.
  • Lokaliseer zinnen in plaats van woorden. Dit lijkt misschien extra werk, maar het is de beste oplossing. Het zorgt ervoor dat bijvoorbeeld foutmeldingen in elke taal correct worden vertaald.
  • Ga er niet van uit dat elke taal parameters in dezelfde volgorde gebruikt.
  • Gebruik geen tekenreeksen opnieuw, omdat dit lokaliseringsproblemen kan veroorzaken als de context van de reeks verandert. Een reeks zoals "tekst" en "fax" kan bijvoorbeeld worden gebruikt als zowel een werkwoord als een zelfstandig naamwoord in het Engels, wat het vertaalproces kan bemoeilijken. Maak een afzonderlijke reeks voor elke context.
  • Gebruik unieke kenmerken om uw bronnen te identificeren. U hebt alleen toegang tot een resource door de unieke waarde te gebruiken, die niet verandert, in plaats van de werkelijke waarde van de resource te gebruiken.

We zullen eerst de cultuur- en taalondersteuning van Windows Phone 8 bespreken en vervolgens de stappen bespreken die nodig zijn bij het voorbereiden van een app voor lokalisatie. Hierna zullen we zien hoe een gelokaliseerde toepassingsbalk te bouwen. We zullen eindelijk bespreken hoe je een gelokaliseerde app kunt testen.  

1. Cultuur en taalondersteuning

Nummers, valuta's, datum en tijd worden in verschillende culturen anders opgemaakt. Elke ondersteunde cultuur wordt vermeld in de CultureInfo klasse. De CultureInfo klasse stelt eigenschappen bloot voor toegang tot regio-indelinggegevens voor een specifieke cultuur. U kunt ook de CultureInfo klasse met een cultuurcode om toegang te krijgen tot de ingebouwde formatterings- en regels voor die cultuur.

De weergavetaal bepaalt het standaardlettertype van de gebruikersinterface. De gebruikersinterface van Windows Phone 8.1 is gelokaliseerd in 50 talen, maar uw app kan een veel grotere selectie talen weergeven. Wanneer u ondersteuning voor uw app toevoegt voor extra talen, genereert Visual Studio een .resx bestand voor elke taal.

De InitializeLanguage functie in de App.xaml.cs bestand stelt de app's in RootFrame.Language op basis van de waarde van de AppResources.ResourceLanguage hulpbron.

2. Standaardlokalisatiestappen

Nieuwe projecten en sjablonen voor Windows Phone 8 XAML-apps bieden verschillende handige nieuwe functies:

  • Een bronbestand met neutrale talen, AppResources.resx, wordt standaard toegevoegd aan elk nieuw project.
  • De LocalizedStrings helper klasse is al geconfigureerd om gemakkelijke toegang te bieden tot de bronnen die overeenkomen met de huidige cultuur van een app.
  • Er wordt een nieuw bronbestand gemaakt met locale-specifieke naam en app-taalinitialisatieparameters bij het toevoegen van een Ondersteunde cultuur van de Projecteigenschappen in Visual Studio.

Laten we eens kijken hoe dit allemaal werkt door een voorbeeldapp te maken, met Engels als basistaal.

Stap 1: Bindende XAML-tekstelementen

We binden eerst de XAML-tekstelementen aan stringmiddelen. 

Kopieer elke hardgecodeerde tekenreeks in de XAML van de app die moet worden gelokaliseerd naar een nieuwe rij in de tekenreekstabel van uw AppResources.resx het dossier.

Verwijs vervolgens de XAML-elementen naar deze tekenreeksbron door de unieke naam en een standaardbindende clausule toe te voegen in plaats van de hardgecodeerde waarde. 

De TextBlock hieronder weergegeven is gebonden met behulp van de tekenreeksbron in plaats van de hardgecodeerde tekst.

Zoek door de code achter het project naar plaatsen waar de code een tekstattribuut van een gebruikersinterface-element wijzigt. Vervang de hardgecodeerde waarde door een verwijzing naar de tekenreeksresource voor elk element.

ApplicationBarMenuItem about_appBarMenuItem = new ApplicationBarMenuItem (AppResources.AppBarOver MenuItem);

Stap 2: Talen toevoegen

Het toevoegen van talen aan een Windows Phone 8-project in Visual Studio is eenvoudig. Navigeer naar de eigenschappenpagina van het project en selecteer de talen die u wilt ondersteunen vanuit de Ondersteunde culturen lijst.

In het voorbeeldproject heb ik toegevoegd Versimpeld Chinees) en Spaans (Spanje), waarvan de locale codes zijn zh-Hans en es-ES, respectievelijk. Selecteer de talen die u wilt dat uw app ondersteunt in de Ondersteunde culturen vak op het project eigenschappen pagina.

Wanneer u het project opslaat, maakt Visual Studio een AppResources.resx bestand voor elke locale. Het nieuw gemaakte bronbestand wordt vooraf ingevuld met de bestaande bronnen van het hoofdbestand AppResources.resx het dossier.

Elk bronbestand bevat twee speciale bronnen met de naam ResourceLanguage en ResourceFlowDirection. Deze twee bronnen worden gebruikt wanneer de InitializeLanguage methode wordt aangeroepen vanuit de App.xaml.cs constructeur. Hun waarden worden automatisch gecontroleerd om ervoor te zorgen dat ze overeenkomen met de cultuur van het bronbestand dat tijdens runtime is geladen.

De ResourceLanguage waarde wordt geïnitialiseerd met de locale naam van het bronbestand en wordt gebruikt om de RootFrame.Language waarde. De ResourceFlowDirection waarde wordt ingesteld op de traditionele richting van die brontaal.

Let daar op ResourceLanguage en ResourceFlowDirection kan worden aangepast om in lijn te komen met de ontwerpstijl van uw app.

Stap 3: De meertalige app-toolkit gebruiken voor vertaling

De Multilingual App Toolkit (MAT), dat is geïntegreerd in Visual Studio, biedt vertaalondersteuning, beheer van vertaalbestanden en lokalisatietools om Windows Phone- en Windows Store-apps te maken. Hier zijn enkele voordelen van het gebruik van de Multilingual App Toolkit:

  • Het centraliseert string resource en metadata management.
  • De tool maakt het gemakkelijk om vertaalbestanden te maken, importeren en exporteren in het XLIFF-formaat, een standaard in de branche.
  • Het is niet nodig om heen en weer te schakelen tussen bronbestanden.
  • Het is gemakkelijk om nieuwe vertaalde talen toe te voegen vanuit het contextmenu van het project.

Als u de Multilingual App Toolkit voor uw Windows Phone-project wilt gaan gebruiken, downloadt en installeert u de Visual Studio-extensie van MSDN. Met de toolkit geïnstalleerd, selecteert u het project en selecteert u Meertalige app-toolkit inschakelen van de Hulpmiddelen menu zoals hieronder getoond.

Merk op dat gelokaliseerde bronnen per project worden gedefinieerd, niet per oplossing. Dit betekent dat de focus van Visual Studio binnen het project moet liggen voor de Meertalige app-toolkit inschakelen optie beschikbaar vanaf de Hulpmiddelen menu.

Na het inschakelen van de Multilingual App Toolkit zal Visual Studio bestanden toevoegen aan de hulpbron map van uw project, waarvan één een nieuw type en nieuwe naam heeft, AppResources.qps.ploc.xlf. De .XLF extensie verwijst naar het standaard bestandsformaat van XLIFF dat ik eerder noemde.

Extra talen kunnen worden toegevoegd via de Multilingual App Toolkit. Dit resulteert in een nieuwe ondersteunde cultuur die aan uw project wordt toegevoegd. Het veroorzaakt ook de toevoeging van een ondersteunde taal in de projecten WMAppManifest.xml.

Om de middelen te vertalen naar Versimpeld Chinees) en Spaans (Spanje), klik met de rechtermuisknop op de .XLF bestand en selecteer Genereer automatische vertalingen uit het contextuele menu. Pas de vertalingen toe en herbouw het project om te zien welke veranderingen worden weerspiegeld in de .resx bestanden voor de twee extra talen.

3. Een gelokaliseerde toepassingsbalk bouwen

U kunt een app-balk toevoegen aan een pagina in uw app, hetzij op de pagina XAML of met behulp van C # in de paginacode achter. ApplicationBar is geen DependencyObject en biedt geen ondersteuning voor bindingen. Dit betekent dat als je het moet lokaliseren, dan het ApplicationBar van code achter C #.

Wanneer een nieuw Windows Phone 8- of een Windows Phone 8.1 Silverlight-project wordt gemaakt, wordt een opmerking bij een opmerking over het lokaliseren van de toepassingsbalk toegevoegd aan MainPage.xaml.cs standaard. Maak de methode uncomment BuildLocalizedApplicationBar en voeg de knoppen, menu-items en bijbehorende bronnen toe die u in uw app wilt gebruiken.

private void BuildLocalizedApplicationBar () // Stel de ApplicationBar van de pagina in op een nieuw exemplaar van ApplicationBar. ApplicationBar = nieuwe ApplicationBar (); // Maak een nieuwe knop en stel de tekstwaarde in op de gelokaliseerde tekenreeks van AppResources. ApplicationBarIconButton-appBarButton = new ApplicationBarIconButton (nieuwe Uri ("/ Assets / Check.png", UriKind.Relative)); appBarButton.Text = AppResources.AppBarButtonText; appBarButton.Click + = appBarButton_Click; ApplicationBar.Buttons.Add (appBarButton); // Maak een nieuw menu-item met de gelokaliseerde tekenreeks van AppResources. ApplicationBarMenuItem zh_appBarMenuItem = new ApplicationBarMenuItem ("中文"); ApplicationBar.MenuItems.Add (zh_appBarMenuItem); zh_appBarMenuItem.Click + = nieuwe EventHandler (zh_appBarMenuItem_Click); ApplicationBarMenuItem en_appBarMenuItem = new ApplicationBarMenuItem ("Engels"); ApplicationBar.MenuItems.Add (en_appBarMenuItem); en_appBarMenuItem.Click + = nieuwe EventHandler (en_appBarMenuItem_Click); ApplicationBarMenuItem es_appBarMenuItem = new ApplicationBarMenuItem ("español"); ApplicationBar.MenuItems.Add (es_appBarMenuItem); es_appBarMenuItem.Click + = nieuwe EventHandler (es_appBarMenuItem_Click); 

De BuildLocalizedApplicationBar methode maakt een nieuw exemplaar van ApplicationBar. Knoppen en menu-items worden eraan toegevoegd en de tekstwaarde wordt ingesteld op de gelokaliseerde tekenreeks uit AppResources. De app-balkknop heeft een binding met AppBarButtonText, die is gedefinieerd in de AppResouces.resx het dossier. Bel de BuildLocalizedApplicationBar methode van de constructor van de pagina om de ApplicationBar.

In de voorbeeldapp kunnen gebruikers hun weergavetaal selecteren via de ApplicationBar menu. Zoals in de onderstaande schermafbeelding wordt getoond, blijven de menu-items consistent in verschillende display-talen terwijl de app-balkknop is gelokaliseerd.

Wanneer een gebruiker op een weergavetaal tikt in de ApplicationBar menu, de SetUILanguage methode wordt genoemd. De SetUILanguage methode, met de naam van de doeltaal doorgegeven als een parameter, wordt gebruikt om de display-taal in te stellen.

private void SetUILanguage (String locale) CultureInfo newCulture = new CultureInfo (locale); Thread.CurrentThread.CurrentCulture = newCulture; Thread.CurrentThread.CurrentUICulture = newCulture; FlowDirection-stroom = (FlowDirection) Enum.Parse (typeof (FlowDirection), AppResources.ResourceFlowDirection); App.RootFrame.FlowDirection = flow; // Stel de taal van het RootFrame in op de nieuwe cultuur. App.RootFrame.Language = XmlLanguage.GetLanguage (AppResources.ResourceLanguage); 

De SetUILanguage methode reset eerst de CurrentUICulture van de app naar de locale die wordt geleverd in de oproep. Bij elke resource-gebonden tekst die door de app wordt weergegeven, worden de bronnen van de opgegeven locale na deze oproep gebruikt.

Stel vervolgens de FlowDirection en Taal van de RootFrame, waardoor de gebruikersinterface die wordt weergegeven door de app de nieuwe instellingen volgt.

De BuildLocalizedApplicationBar methode wordt aangeroepen vanaf de constructor van de pagina na de aanroep naar InitializeComponent om het te lokaliseren ApplicationBar.

public MainPage () InitializeComponent (); // code om ApplicationBar BuildLocalizedApplicationBar () te lokaliseren; 

4. Een gelokaliseerde app testen

De Windows Phone-emulator kan worden gebruikt om de gelokaliseerde app te testen. Wijzig de weergavetaal in de taal die de app target om te controleren of de inhoud correct wordt weergegeven.

  • Klik Start debugging van de debug menu.
  • Navigeren naar regio en taal van instellingen in de app-lijst.
  • Klik Schermtaal en selecteer een van de talen. Gebruik de tabel in de Cultuurnamen aan display-talen toewijzen sectie om te bepalen welke tekentaalstring moet worden geselecteerd.
  • Accepteer de wijzigingen en start de emulator opnieuw.
  • Start uw app door terug te keren naar de lijst met apps en controleer of de taal van elke gelokaliseerde reeks overeenkomt met de instelling voor de displaytaal die u eerder hebt geselecteerd.

Hier ziet u hoe de tekst verandert wanneer de displaytaal wordt gewijzigd. Merk op dat de menu-items consistent blijven, zelfs als de weergavetaal verandert.

Om de taal dynamisch te veranderen, belt u de SetUILanguage methode met de naam van de doeltaal doorgegeven als een parameter.

In de voorbeeldapp, elk element van de gebruikersinterface van de MainPage.xaml is al weergegeven, dus de momenteel weergegeven elementen moeten worden vernieuwd nadat de taal is gewijzigd. De updateUI methode vernieuwt de elementen van de gebruikersinterface van MainPage.xaml.

private void updateUI () apptitle.Text = AppResources.ApplicationTitle; pagetitle.Text = AppResources.mainpagetitle; usermessage.Text = AppResources.displayMessage; checkbutton.Content = AppResources.checkEligibility; enterage.Text = AppResources.userMessage; 

Merk op dat de plaatsing van elk element van de gebruikersinterface op het scherm ongewijzigd is, ongeacht de weergavetaal.

Conclusie

In deze zelfstudie hebt u geleerd hoe u uw app kunt voorbereiden op lokalisatie. XAML-codes met harde codering en code-behind-strings die moeten worden gelokaliseerd, worden in een stringtabel voor resourcebestanden geplaatst en krijgen een unieke sleutel.

Elke hardgecodeerde waarde wordt vervangen door een bindende clausule in XAML of een bronverwijzing in code met behulp van de sleutel voor de verwante tekenreeksbron.

U kunt extra weergavetalen toevoegen en de Multilingual App Toolkit gebruiken om het end-to-end-proces van het vertalen van uw app aanzienlijk eenvoudiger te maken. Download de bronbestanden van de zelfstudie om te gebruiken als referentie.