Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Zie Globalization and localizationvoor meer informatie over de waardepropositie van het lokaliseren van uw app.
Als u wilt dat uw app verschillende weergavetalen ondersteunt en u letterlijke tekenreeksen in uw code of XAML-markering of app-pakketmanifest hebt, verplaatst u deze tekenreeksen naar een resourcesbestand (.resw). U kunt vervolgens een vertaalde kopie maken van dat resourcesbestand voor elke taal die door uw app wordt ondersteund.
Hardgecodeerde letterlijke tekenreeksen kunnen voorkomen in imperatieve code of in XAML-opmaak, bijvoorbeeld als de eigenschap Text van een TextBlock. Ze kunnen ook worden weergegeven in het manifestbestand van het app-pakket (het Package.appxmanifest
bestand), bijvoorbeeld als de waarde voor weergavenaam op het tabblad Toepassing van de Visual Studio Manifest Designer. Verplaats deze tekenreeksen naar een resourcesbestand (.resw) en vervang de letterlijke tekenreeksen in uw app en in uw manifest door verwijzingen naar resource-id's.
In tegenstelling tot afbeeldingsresources, waarbij slechts één afbeeldingsresource zich in een afbeeldingsresourcebestand bevindt, bevinden meerdere tekenreeksresources zich in een tekenreeksresourcebestand. Een tekenreeksresourcebestand is een resourcesbestand (.resw) en u maakt meestal dit type resourcebestand in een map \Strings in uw project. Voor achtergrondinformatie over het gebruik van kwalificaties in de namen van uw resourcesbestanden (.resw), raadpleegt u Uw resources aanpassen voor taal, schaal en andere kwalificaties.
Tekenreeksen opslaan in een hulpbronnenbestand
Stel de standaardtaal van uw app in.
- Met uw oplossing open in Visual Studio, opent u
Package.appxmanifest
. - Controleer op het tabblad Toepassing of de standaardtaal juist is ingesteld (bijvoorbeeld 'en' of 'en-US'). In de resterende stappen wordt ervan uitgegaan dat u de standaardtaal hebt ingesteld op 'en-US'.
Opmerking
U moet minimaal tekenreeksbronnen opgeven die zijn gelokaliseerd voor deze standaardtaal. Dit zijn de resources die worden geladen als er geen betere overeenkomst kan worden gevonden voor de voorkeurstaal of weergavetaalinstellingen van de gebruiker.
- Met uw oplossing open in Visual Studio, opent u
Maak een resourcesbestand (.resw) voor de standaardtaal.
- Maak onder het projectknooppunt een nieuwe map en geef deze
Strings
een naam. - Maak onder
Strings
een nieuwe submap en geef dezeen-US
een naam. - Maak onder
en-US
Een nieuw resourcesbestand (.resw) (onder de XAML-bestandstypen in het dialoogvenster Nieuw item toevoegen ) en bevestig dat het de naamResources.resw
heeft.
Opmerking
Als u .NET-resourcebestanden (.resx) hebt die u wilt overzetten, raadpleegt u XAML en UI overzetten.
- Maak onder het projectknooppunt een nieuwe map en geef deze
Open
Resources.resw
en voeg deze tekenreeksbronnen toe.Strings/en-US/Resources.resw
In dit voorbeeld is 'Greeting' een tekenreeksresource-identificatie waarnaar u kunt verwijzen vanuit uw markup, zoals we zullen laten zien. Voor de id 'Begroeting' wordt een tekenreeks opgegeven voor een tekstattribuut en wordt er een tekenreeks opgegeven voor een attribuut Breedte. 'Greeting.Text' is een voorbeeld van een eigenschaps-id omdat deze overeenkomt met een eigenschap van een UI-element. U kunt bijvoorbeeld 'Greeting.Foreground' toevoegen in de kolom Naam en de waarde ervan instellen op Rood. De identificator 'Afscheid' is een eenvoudige tekenreeksbronidentificator; het heeft geen subeigenschappen en kan worden geladen vanuit imperatieve code, zoals we zullen laten zien. De kolom Opmerking is een goede plek om speciale instructies aan vertalers te geven.
Omdat we in dit voorbeeld een eenvoudige tekenreeksbron-id-vermelding met de naam 'Farewell' hebben, kunnen we ook geen eigenschaps-id's hebben op basis van diezelfde id. Het toevoegen van 'Farewell.Text' zal dus een "Duplicate Entry"-fout veroorzaken tijdens het samenstellen van
Resources.resw
.Resource-id's zijn niet hoofdlettergevoelig en moeten uniek zijn per resourcebestand. Zorg ervoor dat u zinvolle resource-id's gebruikt om extra context te bieden voor vertalers. Wijzig de resource-id's niet nadat de tekenreeksresources zijn verzonden voor vertaling. Lokalisatieteams gebruiken de resource-id om toevoegingen, verwijderingen en updates in de resources bij te houden. Wijzigingen in resource-id's, ook wel bekend als 'resource-id's shift', vereisen dat tekenreeksen opnieuw worden doorgevoerd, omdat deze worden weergegeven alsof tekenreeksen zijn verwijderd en anderen zijn toegevoegd.
Verwijzen naar een stringresource ID vanuit XAML
U gebruikt een x:Uid-instructie om een controle of ander element in uw opmaak te koppelen aan een string resource-ID.
<TextBlock x:Uid="Greeting"/>
Tijdens runtime \Strings\en-US\Resources.resw
wordt geladen (omdat dit nu het enige resourcesbestand in het project is). De x:Uid richtlijn op de TextBlock zorgt ervoor dat er een opzoekactie plaatsvindt om eigenschap-ID's te vinden in Resources.resw
die de tekenreeksresource-id 'Begroeting' bevatten. De eigenschap-id's 'Greeting.Text' en 'Greeting.Width' worden gevonden en de bijbehorende waarden worden toegepast op textblock, waarbij waarden die lokaal in de markering zijn ingesteld, worden overschreven. De waarde 'Greeting.Foreground' wordt ook toegepast als u dat hebt toegevoegd. Maar alleen eigenschaps-id's worden gebruikt om eigenschappen in te stellen op XAML-opmaakelementen, dus het instellen van x:Uid op 'Afscheid' op deze TextBlock zou geen effect hebben.
Resources.resw
bevat de tekenreeksresource-id 'Afscheid', maar er zijn geen eigenschaps-id's voor.
Wanneer u een tekenreeksresource-id toewijst aan een XAML-element, moet u ervoor zorgen dat alle de eigenschaps-id's voor die id geschikt zijn voor het XAML-element. Als u bijvoorbeeld x:Uid="Greeting"
instelt op een TextBlock dan wordt "Greeting.Text" opgelost omdat het type TextBlock een teksteigenschap heeft. Maar als u x:Uid="Greeting"
op een Button instelt, veroorzaakt "Greeting.Text" een runtime-fout, omdat het type Button geen eigenschap Text heeft. Een oplossing voor dat geval is het schrijven van een eigenschaps-id met de naam ButtonGreeting.Content en het instellen x:Uid="ButtonGreeting"
op de knop.
In plaats van breedte in te stellen vanuit een resourcesbestand, wilt u waarschijnlijk dat besturingselementen zich dynamisch aanpassen aan de grootte van de inhoud.
Notitie Voor gekoppelde eigenschappen hebt u een speciale syntaxis nodig in de kolom Naam van een RESW-bestand. Als u bijvoorbeeld een waarde wilt instellen voor de gekoppelde eigenschap AutomationProperties.Name voor de "Begroeting" identifier, voert u dit in de kolom 'Naam' in.
Greeting.[using:Windows.UI.Xaml.Automation]AutomationProperties.Name
Verwijzen naar een tekenreeksresource-id uit code
U kunt een tekenreeksresource expliciet laden op basis van een eenvoudige tekenreeksresource-id.
Opmerking
Als u een aanroep hebt naar een GetForCurrentView-methode die mogelijk wordt uitgevoerd op een achtergrond- of worker thread, voorziet u die aanroep van een if (Windows.UI.Core.CoreWindow.GetForCurrentThread() != null)
test. Het aanroepen van GetForCurrentView- vanaf een achtergrond-/werkthread leidt tot de uitzondering "<typenaam> kan niet worden aangemaakt op threads die geen CoreWindow hebben."
var resourceLoader = Windows.ApplicationModel.Resources.ResourceLoader.GetForCurrentView();
this.myXAMLTextBlockElement.Text = resourceLoader.GetString("Farewell");
auto resourceLoader{ Windows::ApplicationModel::Resources::ResourceLoader::GetForCurrentView() };
myXAMLTextBlockElement().Text(resourceLoader.GetString(L"Farewell"));
auto resourceLoader = Windows::ApplicationModel::Resources::ResourceLoader::GetForCurrentView();
this->myXAMLTextBlockElement->Text = resourceLoader->GetString("Farewell");
U kunt dezelfde code gebruiken vanuit een UWP-klassebibliotheek (.NET Native) of een UWP Windows Runtime Component-project (.NET Native). Tijdens runtime worden de resources van de app die als host fungeert voor de bibliotheek geladen. We raden u aan om resources uit de app te laden die deze hosten, omdat de app waarschijnlijk een grotere mate van lokalisatie heeft. Als een bibliotheek wel resources moet leveren, moet deze de hosting-app de optie geven om deze resources te vervangen als invoer.
Als een resourcenaam is gesegmenteerd (deze bevat "."-tekens), vervangt u puntjes door slashtekens (/) in de resourcenaam. Eigenschap-ID's bevatten bijvoorbeeld puntjes, dus u moet deze vervangingsactie uitvoeren om er een vanuit de code te laden.
this.myXAMLTextBlockElement.Text = resourceLoader.GetString("Fare/Well"); // <data name="Fare.Well" ...> ...
Als u twijfelt, kunt u MakePri.exe gebruiken om het PRI-bestand van uw app te dumpen. Van elke resource wordt uri
weergegeven in het gedumpte bestand.
<ResourceMapSubtree name="Fare"><NamedResource name="Well" uri="ms-resource://<GUID>/Resources/Fare/Well">...
Raadpleeg een resource-id voor tekenreeksen uit het manifest voor uw app-pakket
Het app-pakketmanifest is het Package.appxmanifest
bestand in uw project. Het bevat metagegevens over uw app, zoals de naam, beschrijving en mogelijkheden. U kunt tekenreeksen in het manifest localiseren met behulp van een resourcesbestand (.resw) en verwijzen naar resource-id's voor tekenreeksen in het manifest.
Open het manifestbestand van het app-pakket (het
Package.appxmanifest
bestand), waarin standaard de appDisplay name
wordt uitgedrukt als een letterlijke tekenreeks.Als u een lokaliseerbare versie van deze tekenreeks wilt maken, opent
Resources.resw
en voegt u een nieuwe tekenreeksresource toe met de naam 'AppDisplayName' en de waarde 'Adventure Works Cycles'.Vervang de letterlijke weergavenaamtekenreeks door een verwijzing naar de tekenreeksresource-id die u zojuist hebt gemaakt ('AppDisplayName'). Hiervoor gebruikt u het
ms-resource
URI-schema (Uniform Resource Identifier).Herhaal dit proces voor elke tekenreeks in uw manifest die u wilt lokaliseren. Bijvoorbeeld de korte naam van uw app (die u kunt configureren om weer te geven op de tegel van uw app op het startscherm). Zie Lokaliseerbare manifestitems voor een lijst met alle items in het manifest van het app-pakket dat u kunt lokaliseren.
De tekenreeksbronnen lokaliseren
De volgende stap is het maken van een vertaalde kopie van uw resourcesbestand (.resw) voor elke taal die door uw app wordt ondersteund. Daarna kunt u de tekenreeksen in die bestanden vertalen.
Maak een kopie van het resourcesbestand (.resw) voor een andere taal.
- Maak onder "Strings" een nieuwe submap aan en noem deze "de-DE" voor Deutsch (Deutschland).
Notitie Voor de mapnaam kunt u elke BCP-47-taaltag gebruiken. Zie Uw resources aanpassen voor taal, schaal en andere kwalificaties voor meer informatie over de taalkwalificatie en een lijst met algemene taaltags. - Maak een kopie van
Strings/en-US/Resources.resw
in deStrings/de-DE
map.
- Maak onder "Strings" een nieuwe submap aan en noem deze "de-DE" voor Deutsch (Deutschland).
Vertaal de tekenreeksen.
- Open
Strings/de-DE/Resources.resw
en vertaal de waarden in de kolom Waarde. U hoeft de opmerkingen niet te vertalen.
Strings/de-DE/Resources.resw
- Open
Als u wilt, kunt u stap 1 en 2 herhalen voor een andere taal.
Strings/fr-FR/Resources.resw
Uw app testen
Test de app voor uw standaardweergavetaal. Vervolgens kunt u de weergavetaal wijzigen in Instellingen>tijd en taalregio>en taaltalen> en uw app opnieuw testen. Kijk naar tekenreeksen in uw gebruikersinterface en ook in de shell (bijvoorbeeld, uw titelbalk—wat uw weergavenaam is—en de korte naam op uw tegels).
Notitie Als er een mapnaam kan worden gevonden die overeenkomt met de instelling voor de weergavetaal, wordt het resourcesbestand in die map geladen. Anders wordt er teruggegrepen, wat eindigt bij de resources voor de standaardtaal van uw app.
Strings in meerdere resourcebestanden verdelen
U kunt al uw tekenreeksen in één resourcesbestand (resw) bewaren, of u kunt ze over meerdere resourcesbestanden verdelen. U kunt bijvoorbeeld uw foutberichten in het ene resourcesbestand, de manifesttekenreeksen van het app-pakket in een ander bestand en de ui-tekenreeksen in een derde bewaren. Dit is hoe uw mapstructuur eruit zou zien in dat geval.
Om een string-resource-ID naar een specifiek bestand te verwijzen, voegt u /<resources-file-name>/
toe vóór de ID. In het onderstaande voorbeeld wordt ervan uitgegaan dat deze ErrorMessages.resw
een resource bevat waarvan de naam PasswordTooWeak.Text is en waarvan de waarde de fout beschrijft.
<TextBlock x:Uid="/ErrorMessages/PasswordTooWeak"/>
U hoeft alleen /<resources-file-name>/
toe te voegen vóór de resource-identificator voor bestanden voor resources , anders danResources.resw
. Dat komt doordat 'Resources.resw' de standaardbestandsnaam is, dus dat wordt ervan uitgegaan als u een bestandsnaam weglaat (zoals we in de eerdere voorbeelden in dit onderwerp hebben gedaan).
In het onderstaande codevoorbeeld wordt ervan uitgegaan dat deze ErrorMessages.resw
een resource bevat waarvan de naam 'MismatchedPasswords' is en waarvan de waarde de fout beschrijft.
Opmerking
Als u een aanroep hebt naar een GetForCurrentView-methode die mogelijk wordt uitgevoerd op een achtergrond- of worker thread, voorziet u die aanroep van een if (Windows.UI.Core.CoreWindow.GetForCurrentThread() != null)
test. Het aanroepen van GetForCurrentView- vanaf een achtergrond-/werkthread leidt tot de uitzondering "<typenaam> kan niet worden aangemaakt op threads die geen CoreWindow hebben."
var resourceLoader = Windows.ApplicationModel.Resources.ResourceLoader.GetForCurrentView("ErrorMessages");
this.myXAMLTextBlockElement.Text = resourceLoader.GetString("MismatchedPasswords");
auto resourceLoader{ Windows::ApplicationModel::Resources::ResourceLoader::GetForCurrentView(L"ErrorMessages") };
myXAMLTextBlockElement().Text(resourceLoader.GetString(L"MismatchedPasswords"));
auto resourceLoader = Windows::ApplicationModel::Resources::ResourceLoader::GetForCurrentView("ErrorMessages");
this->myXAMLTextBlockElement->Text = resourceLoader->GetString("MismatchedPasswords");
Als u de resource 'AppDisplayName' zou verplaatsen van Resources.resw
naar ManifestResources.resw
, zou u in het manifest van het app-pakket ms-resource:AppDisplayName
wijzigen in ms-resource:/ManifestResources/AppDisplayName
.
Als de naam van een resourcebestand is gesegmenteerd (het bevat "."-tekens), laat u de puntjes in de naam staan wanneer u ernaar verwijst. Vervang puntjes niet door schuine streepjes ('/'), zoals bij een resource-naam.
var resourceLoader = Windows.ApplicationModel.Resources.ResourceLoader.GetForCurrentView("Err.Msgs");
Als u twijfelt, kunt u MakePri.exe gebruiken om het PRI-bestand van uw app te dumpen. Van elke resource wordt uri
weergegeven in het gedumpte bestand.
<ResourceMapSubtree name="Err.Msgs"><NamedResource name="MismatchedPasswords" uri="ms-resource://<GUID>/Err.Msgs/MismatchedPasswords">...
Een tekenreeks laden voor een specifieke taal of andere context
De standaardresourceContext (verkregen van ResourceContext.GetForCurrentView) bevat een kwalificatiewaarde voor elke kwalificatienaam, die de standaardruntimecontext vertegenwoordigt (met andere woorden de instellingen voor de huidige gebruiker en computer). Resources-bestanden (.resw) worden vergeleken, op basis van de kwalificaties in hun namen, ten opzichte van de kwalificatiewaarden in die runtimecontext.
Het kan echter voorkomen dat uw app de systeeminstellingen moet overschrijven en expliciet moet zijn over de taal, schaal of andere kwalificatiewaarde die moet worden gebruikt wanneer u zoekt naar een overeenkomend resourcesbestand dat moet worden geladen. U wilt bijvoorbeeld dat uw gebruikers een alternatieve taal kunnen selecteren voor knopinfo of foutberichten.
U kunt dit doen door een nieuwe ResourceContext te maken (in plaats van de standaardinstelling te gebruiken), de waarden ervan te overschrijven en dat contextobject vervolgens te gebruiken in uw tekenreekszoekacties.
var resourceContext = new Windows.ApplicationModel.Resources.Core.ResourceContext(); // not using ResourceContext.GetForCurrentView
resourceContext.QualifierValues["Language"] = "de-DE";
var resourceMap = Windows.ApplicationModel.Resources.Core.ResourceManager.Current.MainResourceMap.GetSubtree("Resources");
this.myXAMLTextBlockElement.Text = resourceMap.GetValue("Farewell", resourceContext).ValueAsString;
Het gebruik van QualifierValues zoals in het bovenstaande codevoorbeeld werkt voor elke kwalificatie. Voor het bijzondere geval van taal kunt u dit alternatief doen.
resourceContext.Languages = new string[] { "de-DE" };
Voor hetzelfde effect op globaal niveau kunt u de kwalificatiewaarden in de standaard ResourceContext overschrijven. Maar in plaats daarvan raden we u aan ResourceContext.SetGlobalQualifierValue aan te roepen. U stelt waarden één keer in met een aanroep naar SetGlobalQualifierValue en deze waarden zijn van kracht op de standaardResourceContext telkens wanneer u deze gebruikt voor zoekopdrachten.
Windows.ApplicationModel.Resources.Core.ResourceContext.SetGlobalQualifierValue("Language", "de-DE");
var resourceLoader = Windows.ApplicationModel.Resources.ResourceLoader.GetForCurrentView();
this.myXAMLTextBlockElement.Text = resourceLoader.GetString("Farewell");
Sommige kwalificaties hebben een systeemgegevensprovider. In plaats van SetGlobalQualifierValue aan te roepen kunt u in plaats daarvan de provider aanpassen via een eigen API. Deze code laat bijvoorbeeld zien hoe PrimaryLanguageOverride ingesteld wordt.
Windows.Globalization.ApplicationLanguages.PrimaryLanguageOverride = "de-DE";
Tekenreeksen bijwerken om te reageren op wijzigingen in kwalificatiewaarden
Uw actieve app kan reageren op wijzigingen in systeeminstellingen die van invloed zijn op de kwalificatiewaarden in de standaardResourceContext. Met een van deze systeeminstellingen wordt de MapChanged-gebeurtenis op ResourceContext.QualifierValues aangeroepen.
Als reactie op deze gebeurtenis kunt u de tekenreeksen opnieuw laden vanuit de standaard ResourceContext.
public MainPage()
{
this.InitializeComponent();
...
// Subscribe to the event that's raised when a qualifier value changes.
var qualifierValues = Windows.ApplicationModel.Resources.Core.ResourceContext.GetForCurrentView().QualifierValues;
qualifierValues.MapChanged += new Windows.Foundation.Collections.MapChangedEventHandler<string, string>(QualifierValues_MapChanged);
}
private async void QualifierValues_MapChanged(IObservableMap<string, string> sender, IMapChangedEventArgs<string> @event)
{
var dispatcher = this.myXAMLTextBlockElement.Dispatcher;
if (dispatcher.HasThreadAccess)
{
this.RefreshUIText();
}
else
{
await dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () => this.RefreshUIText());
}
}
private void RefreshUIText()
{
var resourceLoader = Windows.ApplicationModel.Resources.ResourceLoader.GetForCurrentView();
this.myXAMLTextBlockElement.Text = resourceLoader.GetString("Farewell");
}
Strings laden vanuit een UWP-classbibliotheek of een UWP Windows Runtime-component
De tekenreeksbronnen van een UWP-klassebibliotheek (.NET Native) of een UWP Windows Runtime Component (.NET Native) waarnaar wordt verwezen, worden doorgaans toegevoegd aan een submap van het pakket waarin ze tijdens het buildproces worden opgenomen. De resource-id van een dergelijke tekenreeks heeft meestal de vorm LibraryName/ResourcesFileName/ResourceIdentifier.
Een bibliotheek kan een ResourceLoader krijgen voor haar eigen resources. De volgende code illustreert bijvoorbeeld hoe een bibliotheek of een app die de bibliotheek aanroept een ResourceLoader kan ophalen voor de tekenreeksresources van de bibliotheek.
var resourceLoader = Windows.ApplicationModel.Resources.ResourceLoader.GetForCurrentView("ContosoControl/Resources");
this.myXAMLTextBlockElement.Text = resourceLoader.GetString("exampleResourceName");
Als voor een UWP Windows Runtime-onderdeel (.NET Native) de standaardnaamruimte is gesegmenteerd (het bevat ''-tekens), gebruikt u puntjes in de naam van de resourcetoewijzing.
var resourceLoader = Windows.ApplicationModel.Resources.ResourceLoader.GetForCurrentView("Contoso.Control/Resources");
U hoeft dit niet te doen voor een UWP-klassebibliotheek (.NET Native). Als u twijfelt, kunt u MakePri.exe opdrachtregelopties opgeven om het PRI-bestand van uw onderdeel of bibliotheek te dumpen. Van elke resource wordt uri
weergegeven in het gedumpte bestand.
<NamedResource name="exampleResourceName" uri="ms-resource://Contoso.Control/Contoso.Control/ReswFileName/exampleResourceName">...
Strings uit andere pakketten laden
De resources voor een app-pakket worden beheerd en geopend via de eigen resourcemap op het hoogste niveau ResourceMap- die toegankelijk is vanuit de huidige ResourceManager-. Binnen elk pakket kunnen verschillende onderdelen hun eigen ResourceMap-substructuren hebben, waartoe u toegang hebt via ResourceMap.GetSubtree.
Een frameworkpakket heeft toegang tot zijn eigen resources met een absolute resource-identificatie-URI. Zie ook URI-schema's .
Strings laden in niet-verpakte toepassingen
Vanaf Windows-versie 1903 (update van mei 2019) kunnen uitgepakte toepassingen ook gebruikmaken van het Resource Management System.
Maak uw UWP-gebruikersbesturingselementen/-bibliotheken en alle tekenreeksen op te slaan in een resourcesbestand. U kunt vervolgens verwijzen naar een tekenreeksresource-id van XAML, verwijzen naar een tekenreeksresource-id uit code of tekenreeksen laden vanuit een UWP-klassebibliotheek of een UWP Windows Runtime-onderdeel.
Als u resources wilt gebruiken in uitgepakte toepassingen, moet u een aantal dingen doen:
Gebruik GetForViewIndependentUse in plaats van GetForCurrentView bij het ophalen van resources vanuit de code, omdat er in uitgepakte scenario's geen huidige weergave is. De volgende uitzondering treedt op als u GetForCurrentView aanroept in niet-verpakte scenario's: Resourcecontexten worden mogelijk niet gemaakt op threads die geen CoreWindow hebben.
Gebruik MakePri.exe om het bestand resources.pri van uw app handmatig te genereren.
Voer
makepri new /pr <PROJECTROOT> /cf <PRICONFIG> /of resources.pri
uitDe <PRICONFIG> moet de sectie '<verpakking>' weglaten, zodat alle resources zijn gebundeld in één resources.pri-bestand. Als u het standaardconfiguratiebestandMakePri.exe gebruikt dat is gemaakt door createconfig, moet u de sectie '<verpakking>' handmatig verwijderen nadat het is gemaakt.
De <PRICONFIG> moet alle relevante indexeerfuncties bevatten die nodig zijn om alle resources in uw project samen te voegen in één resources.pri-bestand. Het standaardconfiguratiebestandMakePri.exe gemaakt door createconfig bevat alle indexeerfuncties.
Als u de standaardconfiguratie niet gebruikt, controleert u of de PRI-indexer is ingeschakeld (raadpleeg de standaardconfiguratie om te zien hoe u dit doet) om PRIs uit UWP-projectverwijzingen, NuGet-verwijzingen enzovoort, die zich in de projecthoofddirectory bevinden, samen te voegen.
Opmerking
Door weg te
/IndexName
laten en door het project geen app-manifest te hebben, wordt de IndexName-/hoofdnaamruimte van het PRI-bestand automatisch ingesteld op Toepassing, wat de runtime begrijpt voor uitgepakte apps (hierdoor wordt de vorige harde afhankelijkheid van pakket-id verwijderd). Wanneer u resource-URI's opgeeft, wijzen ms-resource:/// verwijzingen die de hoofdnaamruimte weglaten automatisch Toepassing aan als de hoofdnaamruimte voor uitgepakte apps, of u kunt Toepassing expliciet opgeven zoals in ms-resource://Toepassing/.
Kopieer het PRI-bestand naar de uitvoermap van de build van de .exe
Voer de .exe uit
Opmerking
Het Resource Management System maakt gebruik van de systeemweergavetaal in plaats van de lijst met voorkeurstaal van de gebruiker bij het omzetten van resources op basis van taal in niet-verpakte apps. De lijst met voorkeurstaal van de gebruiker wordt alleen gebruikt voor UWP-apps.
Belangrijk
U moet PRI-bestanden handmatig herbouwen wanneer resources worden gewijzigd. U wordt aangeraden een script na de build te gebruiken dat de opdrachtMakePri.exe verwerkt en de uitvoer resources.pri kopieert naar de .exe-map.