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.
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:
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.
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.
Nieuwe projecten en sjablonen voor Windows Phone 8 XAML-apps bieden verschillende handige nieuwe functies:
LocalizedStrings
helper klasse is al geconfigureerd om gemakkelijke toegang te bieden tot de bronnen die overeenkomen met de huidige cultuur van een app.Laten we eens kijken hoe dit allemaal werkt door een voorbeeldapp te maken, met Engels als basistaal.
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);
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.
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:
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.
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;
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.
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.
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.