Question

J'ai commencé à créer une application Windows Store pour Windows 8.1 et j'ai maintenant rencontré un problème de localisation.

Je voudrais afficher une ressource de chaîne à partir d'un fichier .resw au moment de la conception, mais chaque tentative a échoué, même si cela fonctionne au moment de l'exécution.

Lorsque j'utilise l'attribut x:Uid, je dois toujours fournir la propriété Text (c'est-à-direpour un TextBlock) et je n'aime pas écrire le texte deux fois.

J'ai également essayé de créer une propriété pour la chaîne sur le modèle de vue :

public string Title
{
    get { return ResourceLoader.GetForCurrentView("Strings").GetString("MainView_Title"); }
}

Cela fonctionne au moment de l'exécution, mais au moment de la conception, il est vide.

La question est donc la suivante : existe-t-il un moyen d'afficher les ressources d'un fichier .resw dans le concepteur XAML ?

Plus précisément, la classe ResourceManager permet-elle la lecture des fichiers .resw au moment de la conception ?

Merci pour votre aide, Lucas

Était-ce utile?

La solution

Ancienne méthode

Donc, vous pouvez faire plusieurs choses.

Le premier (et le plus simple, étant donné que vous utilisez x:Uid déjà) consiste simplement à fournir le texte dans le champ Texte.Le x:Uid-la valeur liée écrasera tout ce qui s'y trouve.

<TextBlock Text="MyText" x:Uid="MainView_Title"/>

La deuxième méthode consiste à utiliser la propriété comme vous l'avez déjà, puis à vérifier si l'application est en phase de conception (via plusieurs méthodes différentes), puis à renvoyer une valeur constante si c'est le cas et la ressource si ce n'est pas le cas.

public string Title
{
     if(ViewModelBase.IsInDesignTimeStatic) //Mvvm Light's easy accessor
         return "My Text";
     return ResourceLoader.GetForCurrentView("Strings").GetString("MainView_Title");
}

J'espère que cela vous aidera et bon codage !

Modifier:Il semble y avoir une nouvelle façon de procéder, du moins depuis Windows 8.1.

Nouvelle méthode

  • Créez une classe qui fait référence à un ResourceLoader (similaire à la propriété décrite ci-dessus).
  • Créez un accesseur de propriété indexé qui accepte une clé de chaîne et renvoie la valeur du ResourceLoader.

    public class LocalizedStrings
    {
        public string this[string key]
        {
            get
            {
                return App.ResourceLoader.GetForViewIndependentUse().GetString(key);
            }
        }
    }
    
  • Dans ton App.xaml, définir un StaticResource de ce type.

    <Application.Resources>
        <ResourceDictionary>
            <common:LocalizedStrings x:Key="Localized"/>
        </ResourceDictionary>
    </Application.Resources>
    

Désormais, lorsque vous souhaitez accéder à votre propriété avec la clé d'entrée MainView_Title, utilisez ceci.C'est plus verbeux, mais cela devrait se traduire à la fois dans le concepteur et dans l'application elle-même.

<TextBlock Text="{Binding Source={StaticResource Localized}, Path=[MainView_Title]}" />

Vous pouvez le mélanger pour le rendre un peu plus lisible si vous le souhaitez, par exemple :

<TextBlock Text="{Binding [MainView_Title], Source={StaticResource Localized}}" />

Autres conseils

C'est un vieux fil, mais puisque Nate a fourni une solution aussi élégante au problème de Win8.1, j'ai pensé que je demanderais ici ...

Après beaucoup d'enquête et d'expérimentation, la solution de Nate ne semble pas fonctionner aux applications UWP pour Win10 sous la communauté VS2017.L'approche localisée fonctionne très bien au moment de l'exécution, mais il semble

App.ResourceLoader.GetForViewIndependentUse().GetString(key);

refuse de retourner quoi que ce soit à l'exception de String.empteux pendant le temps de conception.J'ai fait beaucoup d'expérimentation et de choses comme

ResourceContext.GetForViewIndependentUse().QualifierValues

semble être identique entre le temps d'exécution (travail) et le temps de conception (ne fonctionne pas).

Je me demandais si quelqu'un l'a rencontrée et je l'ai résolu.Nate?:)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top