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? P>
6 Réponses :
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. P>
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. P>
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.
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 code>:
code> de votre assembly: p>
Assurez-vous simplement que votre accès à vos ressources modifié est public et non interne.
Voici quelques articles qui pourraient être intéressants: P>
localiser les applications WPF à l'aide de LockBaml P>
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 p>
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. P>
+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.
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}" />
Si vous êtes presque intéressé par ce sujet, vous pouvez regarder ma bibliothèque que je développe sur CodePlex. P>
localisationLibrary: http://localizationLibrary.codeplex.com/ P>