Aller au contenu principal

13-3 Ressources partagées

Pour des libellés qui ont le potentiel ou qui se retrouvent à plusieurs endroits dans l'application, il pourrait être fastidieux de les dupliquer dans plusieurs fichiers ressources.

Par exemple, nous avons un bouton avec le terme Détails. C'est très générique comme terme et ce dernier est susceptible de se retrouver dans plusieurs vues. Pour ce cas de figure, il est possible de créer un fichier de ressources partagé. C'est donc un fichier que plusieurs vues peuvent utiliser et ce dernier n'est pas positionné à un endroit précis dans la hiérarchie.

Créer le fichier ressource SharedResources

  1. Sous le dossier Snowfall.Web.Mvc/Resources, créez un fichier Resource (.resx) et nommez le SharedResources.

  2. On mettra simplement un libellé pour les boutons details:

    NameDefault Culture
    Bouton_DetailsDétails
    info

    À noter que comme il s'agit d'un fichier de ressources partagées, on veut s'assurer d'être clair dans les libellés, d'où la mention qu'il s'agit d'un texte de bouton.

  3. Pour faire référence à cette ressource, il faudra une classe portant le même nom, mais à l'extérieur du dossier ressource. Il est normal que cela vous semble étrange, mais il s'agit de la méthode suggérée dans la documentation Microsoft.

  4. Créez une classe SharedResources à la racine du projet Mvc

    Snowfall.Web.Mvc/SharedResources.cs
    namespace Snowfall.Web.Mvc;

    public class SharedResources
    {
    // Classe dummy utilisée pour les ressources partagées
    // https://learn.microsoft.com/en-us/aspnet/core/fundamentals/localization/make-content-localizable?view=aspnetcore-9.0#shared-resources
    }

Utiliser les ressources partagées dans la vue

Pour utiliser le fichier de ressources partagées, on utilisera IHtmlLocalizer. Par exemple, dans la vue partagée _Evenement, qui contient le bouton Détails:

Snowfall.Web.Mvc/Views/Evenements/_Evenement.cshtml
@model Evenement
@inject IHtmlLocalizer<SharedResources> HtmlLocalizer

<!-- ... -->
info

Lorsqu'on utilise IHtmlLocalizer, on doit spécifier la ressource. SharedResources ici fait référence à la classe Dummy que nous avons créée à la racine du projet. Le cadriciel s'occuprera de trouver le fichier de ressources portant le même nom, sous le dossier Resources.

Il ne suffit ensuite que de faire référence à la bonne clé:

<!-- ... -->

<div class="card-footer">
<a class="btn btn-primary"
asp-controller="Evenements"
asp-action="Show"
asp-route-id="@Model.Id">
@HtmlLocalizer["Bouton_Details"]
</a>
</div>

<!-- ... -->

Tester

Vérifiez dans le navigateur que le tout fonctionne et si oui, ...

level up