Willy laroche

B10g $ur 13$ t3chn0$ M!cr0$0ft 3t p1u$ $! 4ff!n!té$…

Windows 8 – Globalization : Utiliser les fichiers de ressources dans vos applications (XAML/C#)

Poster un commentaire

Comment utiliser vos fichiers de ressources en fonction de la localisation ?

Dans mon cas, je souhaite que mon application soit disponible en plusieurs langues :

  • Anglais/Francais/Allemand.

 

Création des fichiers de ressources

Il faut créer un répertoire par langue, en respectant le code culture.

Soit “fr” ou soit de manière détaillé si vous souhaitez différencier chaque culture : “fr-FR”, “fr-BE” pour nos amis belges, ou bien “fr-CH” pour nos autres amis suisses.

image

plus de détails sur les codes:
http://msdn.microsoft.com/en-us/library/windows/apps/jj657969.aspx

Dans chacun des répertoires nous allons créer un fichier de ressource *.resw (Ajouter=>nouvel élément…). Il est important que le nom du fichier soit le même dans chacun des répertoires.

Dans chacun des fichiers de resources, je rajoute les informations sous la forme de clé/valeur

image

image

 

la clé doit respecter format suivant :

MaClé.[Propriété dans laquelle sera injecté la valeur dans le control cible]

Je souhaite effectivement afficher ma valeur dans un TextBlock, dans ce cas, la Propriété correspondante est “Text”.

Dans le cadre d’un bouton, il me faudrait insérer: String2.Content

Les Clés sont uniques, il n’est pas possible de définir une même clé avec 2 propriétés différentes:

exemple : String1.Text et String.Content <= ça ne marche pas !!

 

Coté XAML

Comment récupérer les valeurs dans notre interface ?

<TextBlock x:Uid="String1" Text="texte par défaut" />

 

Si vous regardez bien, la propriété x:Uid me permet de faire l’association avec la clé défini dans le fichier de ressource.

Dans le cadre d’un bouton :

<Button x:Uid="String2" Content="texte par défaut" />

 

Dans le cas ou la clé est absente du fichier de ressource, ce sera la valeur par défaut du controle qui sera utilisée (dans mon cas : “texte par défaut”).

 

Localisation de l’AppBar:

Côté XAML,de la même manière:

<Button x:Name="btnSetting" 
        Style="{StaticResource SettingsAppBarButtonStyle}"
        x:Uid="AppBarSettings" 
        AutomationProperties.Name="Settings" />

Sauf que là, pour adapter le texte du bouton, il faut passer par la propriété: AutomationProperties.Name 

 

Dans notre fichier de ressource, cela se traduit de cette manière:

MaClé.[using:Windows.UI.Xaml.Automation]AutomationProperties.Name

Exemple:

AppBarSettings.[using:Windows.UI.Xaml.Automation]AutomationProperties.Name

 

En français:

image

En Anglais:

image

 

Charger les ressources par programmation

Nous avons vu comment récupérer les ressources en XAML, comment les récupérer en C#:

var loader = new Windows.ApplicationModel.Resources.ResourceLoader();
var maChaine = loader.GetString("CléDeLaChaine");

 

Dans ce cas, pas besoin de définir la propriété dans le fichier de ressource, directement:

  • Clé et Valeur 

Comment tester les fichiers de ressources ?

Tout simplement en forçant la langue de votre application:

App.xaml.cs:

protected override async void OnLaunched(LaunchActivatedEventArgs args)
{
    Windows.Globalization.ApplicationLanguages
        .PrimaryLanguageOverride = "de-DE";
    //Windows.Globalization.ApplicationLanguages
    //    .PrimaryLanguageOverride = "en-US";
    //Windows.Globalization.ApplicationLanguages
    //    .PrimaryLanguageOverride = "fr-FR";

et vous pourrez voir que vos contenus de boutons, labels sont à jour.

 

Générer les fichiers de ressources multi-lingues

Plutôt que de créer tout plein de fichier ressources par langues, lisez l’article de Tim Heuer  sur la traduction de fichier de ressources:

http://timheuer.com/blog/archive/2012/04/26/localize-windows-8-application.aspx

Dans l’idée: Générer les autres fichiers de ressources à partir d’un fichier anglais, c’est plus rapide🙂

Si votre application se limite à peu de langues, autant faire la traduction manuellement.

 

Bon codage🙂

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s