Localisation en WinRT

Localisation en WinRT

Comment localiser une application WinRT?

Il faut ajouter un fichier de type .resw pour chaque langue de l’application.
ressource

De la façon suivante (un dossier par langue) :
localisation
La liste complète des code culture ici.

Dans ce fichier il faut faire correspondre des “Name” à des traductions :
langue
Pour chaque langue vous devez récréer les même clefs.
Si vous ne créer pas une clef dans une langue, la langue par défaut sera utilisé automatiquement par l’application.

Je vous conseille fortement d’utiliser l’extension visual studio ResX Manager qui vous permettra entre autre d’éditer tout les fichiers ressources dans une seule fenêtre. (Merci Toss)
ResXManager

Je vous conseille aussi une autre extension qui permet de généré une classe comme pour les fichiers resx : vous pouvez télécharger ici.

Où est configurée la langue par défaut de l’application?

On peut paramétrer ça dans le Package.appxmanifest.

ici

Quelle langue sera utilisée lorsqu’un utilisateur lance mon app?

La langue utilisée sera celle du device si l’app est disponible dans celle ci.
Sinon l’app utilisera la langue par défaut de l’application.

Comment le store détecte les langues de mon application?

Le store analyse vos packages, et en fonction de ceux-ci il détecte automatiquement les langues gérées par l’application.
Attention si vos fichiers ressources sont dans une library PCL, la détection ne marchera pas correctement.
Auquel cas il faut désactiver dans “Package.appxmanifest” la détection automatique et préciser les langues gérées par l’application.

Il faut changer ce nœud ci-dessous :

<Resources>
    <Resource Language="x-generate" />
</Resources>

En mettant par exemple :

<Resources>
    <Resource Language="fr-FR" />
    <Resource Language="it-IT" />
    <Resource Language="en-US" />
    <Resource Language="ro-RO" />
    <Resource Language="de-DE" />
</Resources>

Comment accède t’on a une ressource localisé?

En C# :
Si les ressources sont dans l’exécutable principal :

var loader = new Windows.ApplicationModel.Resources.ResourceLoader();
var txt = resourceLoader.GetString(key);

Sinon :

var resourceLoader = ResourceLoader.GetForViewIndependentUse("NOMDELADLL/Resources");
var txt = resourceLoader.GetString(key);

Si vous voulez rester en fortement typé une extension permet de généré une classe pour vos fichiers de ressources est dispo ici.(Merci Samuel)

En XAML :
La clef de la ressource devra être : HelloTextBlock.Text

<TextBlock x:Uid="HelloTextBlock" Text="" />

Puis je forcer la langue utilisée par l’application?

Oui, au démarrage, de la façon suivante :

void DefineLangageForApplication()
{
     Windows.Globalization.ApplicationLanguages.PrimaryLanguageOverride = "fr-FR";
}

Sur Windows 8 uniquement :
Vous pouvez aussi dans la l’application mais il faudra ré-afficher les contrôles pour avoir l’écran localisé.

Windows.Globalization.ApplicationLanguages.PrimaryLanguageOverride = _settings.GetLanguageInStringValue();
Windows.ApplicationModel.Resources.Core.ResourceContext.GetForViewIndependentUse().Reset();

Sur Windows Phone :
Il faudra redémarré l’appli pour que la nouvelle langue soit prise en compte :

Windows.Globalization.ApplicationLanguages.PrimaryLanguageOverride = _settings.GetLanguageInStringValue();
Windows.ApplicationModel.Resources.Core.ResourceContext.GetForViewIndependentUse().Reset();
await new Windows.UI.Popups.MessageDialog("Attention l'app va reboooooot").ShowAsync();
Application.Current.Exit();

Que fait le compilateur quand on compile une app avec plusieurs localisations?

Pour chaque fichiers ressources le compilateur va généré un appx différent.
Sauf pour la langue par défaut qui elle est inclue avec le binaire de votre application.

Localization

Vous remarquerez que le compilateur à le même fonctionnement pour les images scale 100/140/240;

Quand un utilisateur télécharge votre application il télécharge donc :
– l’application (donc avec la langue par défaut)
– les ressources pour les langues qu’il a installer sur sa machine (si par exemple vous avez installer le Français et Italien il téléchargera les deux packages).

Attention quand vous débugger sur votre machine virtuelle, lorsque visual studio déploie votre applis il déploie toutes les ressources.
Donc si vous faites un sélecteur de langue, une fois l’applis sur le store. Le changement de langue ne fonctionnera pas si la langue n’est pas installé sur votre OS. Alors qu’avec visual studio en déployant l’applis soit même tout marchera bien.

Si quelqu’un à une solution pour pouvoir empaqueter toutes les ressources comme pour la langue par défaut je suis preneur. 🙂

Répondre à Chen Annuler la réponse

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Pin It on Pinterest