13-2 Traduction et ressources pour les vues
Pour que les vues utilisent les fichiers de ressource, on peut utiliser IViewLocalizer
.
Il s'agit d'une classe permettant de récupérer automatiquement un fichier ressource associé à la vue en se basant sur le nom de cette dernière. Un peu comme les DataAnnotation
et les validations au niveau du ViewModel
.
Créer un dossier Resources
Nous avons configuré dans Program.cs
que le dossier contenant les ressources sera le dossier Resources
:
builder.Services.AddLocalization(options => options.ResourcesPath = "Resources");
- Sous le projet
Snowfall.Web.Mvc
, clic droit -> Add -> Directory - Nommez le dossier
Resources
Créer un fichier ressource
- Sous le dossier
Snowfall.Web.Mvc/Resources
, créez un dossierViews
- Sous le dossier
Snowfall.Web.Mvc/Resources/Views
, créez un dossierEvenements
- Créez un fichier resource sous ce nouveau dossier
Evenements
. Nommez le fichierIndex.resx
:
Le fichier ressource associé à une vue doit avoir la même hiérarchie de dossier et de nom de fichier!
Si la vue est dans le dossier Views/Evenements
et que la vue s'appelle Index
, le fichier ressource doit être dans Resources/Views/Evenements/Index.resx
.
Modifier un fichier ressource
- Pour modifier un fichier ressource, double-cliquez sur le fichier
Index.resx
et cela vous ouvrira la vueDesigner
. - Ensuite, appuyez sur le
+
pour créer une nouvelle entrée. - Donnez un nom à ce que vous désirez représenter comme libellé. Pour l'instant, créons une clé
Titre
pour contenir le titre de la page. - Ensuite, dans
Default Culture
, vous entrez la valeur que vous désirez pour cette clé. Par exemple,Événements
(ce sera le titre de la page).
DefaultCulture
est la langue par défaut utilisé par le site. Nous pourrons ajouter des langues supplémentaires un peu plus tard.
Utiliser les fichiers dans les vues
-
Dans l'en-tête de la vue
Snowfall.Web.Mvc/Views/Evenements/Index.cshtml
, injectez leIViewLocalizer
:Snowfall.Web.Mvc/Views/Evenements/Index.cshtml@using Microsoft.AspNetCore.Mvc.Localization
@using Microsoft.AspNetCore.Mvc.TagHelpers
@model EvenementsIndexViewModel
@inject IViewLocalizer ViewLocalizer
@{
ViewBag.Title = "Événements";
}
<h1>Événements</h1>
<!-- ... --> -
Finalement, on peut simplement remplacer le texte par une référence à la bonne propriété via
ViewLocalizer[]
:Snowfall.Web.Mvc/Views/Evenements/Index.cshtml<!-- ... -->
@{
ViewBag.Title = ViewLocalizer["Titre"];
}
<h1>@ViewLocalizer["Titre"]</h1>
<!-- ... -->
Voilà, rendez-vous à la page d'accueil (la liste des événements) et le tout devrait fonctionner. En effet, le titre devrait être affiché comme auparavant, mais ce dernier vient maintenant du fichier ressource!
Vues partielles
Le principe est le même pour les vues partielles, mais assurez-vous de nommer le fichier ressource de la même façon que la vue partielle: avec une barre de surlignement en avant.
Par exemple, pour la vue partielle contenant les filtres, on pourrait avoir un fichier de ressource sous Snowfall.Web.Mvc/Resources/Views/Evenements/_Filtres.resx
, avec un libellé pour le bouton Bouton_Filtrer
: