9
votes

Localisation des applications WPF basées sur MVVM

Quelle serait une bonne approche de localiser une allocation WPF basée sur MVVM qui peut changer sa langue au moment de l'exécution? Bien sûr, je pourrais créer une propriété de chaîne dans la vue de la vue pour chaque chaîne affichée quelque part dans la vue, mais cela me semble plutôt fastidieux. Existe-t-il une approche commune / une meilleure pratique pour cela?


0 commentaires

6 Réponses :


9
votes

WPF a beaucoup de soutien à la localisation . Peut-être que vous pouvez exploiter cela? Malheureusement, je pense que la modification du langage d'interface utilisateur à l'heure d'exécution est quelque peu difficile et vous devez probablement proposer votre propre schéma.

En outre, comme le modèle de vue est UI agnostic, je ne pense pas que le stockage des chaînes d'interface utilisateur dans le modèle de vue est une bonne solution. Celles-ci appartiennent à la vue.


2 commentaires

Considérant que le modèle de vue est un modèle de la vue, je pense personnellement que c'est l'endroit idéal pour mettre la localisation. Cela permettra également à l'interface utilisateur de Silverlight localisée et WPF du même modèle de vue.


Je dois être en désaccord avec Pete Davis. La localisation appartient à la vue, pas le modèle de vue. Le modèle de vue ne devrait pas avoir à s'inquiéter de la manière dont la vue veut se présenter. Et, la localisation n'est qu'une solution que la vue peut se présenter dans des langues alternatives.



6
votes

au lieu d'avoir des chaînes d'interface utilisateur dans votre modèle de vue, vous pouvez les stocker dans les ressources de l'Assemblée et les accéder directement à partir de xaml, à l'aide de x: statique : xxx < P> L'espace de noms apps doit faire référence à l'espace de noms de votre assembly: xxx


1 commentaires

Assurez-vous simplement que votre accès à vos ressources modifié est public et non interne.



0
votes

10
votes

Voici un Excellent article sur la localisation du WPF . Il traite de la technique de localisation prise en charge par Microsoft et de quelques alternatives

Je ne recommanderais pas la solution "officielle" pour la localisation ... C'est vraiment une douleur à utiliser, elle modifie XAML (ajoute x: des attributs uid à chaque élément pouvant être localisé) et il n'y a pas de bons outils de la SM pour en faire une solution facile. Une bonne vieille localisation de résex est beaucoup plus facile à utiliser et s'intègre assez bien avec WPF avec quelques astuces (nommément extensions de balisage et / ou propriétés ci-jointes). En outre, vous pouvez facilement modifier la langue d'interface au moment de l'exécution grâce au système de liaison.


1 commentaires

+1 pour l'article Rick Strahl. Celui-ci est bien. En fait, le système de liaison ne respecte pas de manière native à la culture actuelle du fil de l'UI, mais cet article vous indique comment corriger cette question entre autres choses. Bon choix.



1
votes

Vous pouvez utiliser une extension de balisage personnalisé pour rechercher des valeurs localisées et les mettre à jour lorsque la culture de l'interface utilisateur change.

Voici un exemple de la manière dont cela pourrait fonctionner: p>

<Label x:Name="lblResxHelloWorldMarkupExtension1Value" 
Content="{res:Res Id=HelloWorld,Default=Hello#}" 
Margin="{res:Res Id=HelloWorldMargin,Default=10}" 
Width="{res:Res Id=HelloWorldWidth, 
ResourceSet=WpfClickOnce.MyFormRes, Default=50}" />


0 commentaires

1
votes

Si vous êtes presque intéressé par ce sujet, vous pouvez regarder ma bibliothèque que je développe sur CodePlex.

localisationLibrary: http://localizationLibrary.codeplex.com/


0 commentaires