La globalisation et la localisation
Introduction
Les sites web modernes offrent souvent la possibilité de changer la langue afin que l’utilisateur puisse visiter le site dans les meilleures conditions possibles. La création d’un site multilingue va donc permettre de toucher un public plus large, et la technologie ASP.NET Core doit permettre aux développeurs de coder facilement ce genre de fonctionnalité et de l’intégrer au site.
L’internationalisation induit forcément de la globalisation et de la localisation. La globalisation est le simple fait de supporter plusieurs cultures dans le site. Ce dernier doit utiliser un système générique afin de nous permettre de changer facilement la langue de l’utilisateur. La localisation est l’action d’adapter le contenu du site en fonction de la région géographique de l’utilisateur. Elle utilise la globalisation afin de spécifier une culture bien particulière, adaptant ainsi le site et son contenu en fonction de cette culture (langue des textes, format des dates…).
ASP.NET Core fournit tout un ensemble d’outils pour le développeur, lui permettant de gérer au mieux la globalisation et la localisation dans son application. Dans un premier temps, les sections suivantes vont traiter des API utilisées pour gérer la localisation de l’application. Ensuite, le chapitre traitera du mécanisme...
La gestion de la localisation
Il existe plusieurs niveaux d’API permettant de gérer la localisation avec ASP.NET Core. Les interfaces les plus importantes sont IStringLocalizer et IStringLocalizer<T>. Ces contrats sont des indexeurs qui permettent de facilement retrouver une chaîne de caractères spécifique en fonction de la culture via les méthodes suivantes :
-
this[string name] : récupère la chaîne depuis la clé passée entre crochets.
-
this[string name, params object[] arguments] : récupère la chaîne depuis la clé formatée avec les arguments passés en paramètres.
-
GetAllStrings : récupère l’ensemble des clés selon une ou des cultures bien spécifiques.
-
WithCulture : récupère un sous-ensemble de IStringLocalizer représentant les traductions réalisées avec la culture spécifiée en paramètre.
L’implémentation par défaut utilisée par ASP.NET Core est le StringLocalizer fournit par injection de dépendances, qui utilise lui-même un ResourceManagerStringLocalizer par défaut. Ce dernier utilise la classe ResourceManager afin de fournir au runtime un jeu de ressources spécifique à la culture. Le ResourceManager est la classe la plus basse dans la pile technologique de l’API et possède les méthodes :
-
Get* où * est un type : permet de récupérer la ressource selon le type indiqué par la méthode. On retrouve les méthodes GetString, GetStream, GetObject…
-
ReleaseAllResources : libère toutes les ressources.
Le code ci-dessous propose un contrôleur qui injecte un service de localisation permettant de fournir la valeur selon la clé fournie. La clé ici correspond à la valeur par défaut, ce qui veut dire que le développeur n’est pas obligé de tout de suite créer son dictionnaire par langue : le service de localisation renvoie automatiquement la clé comme valeur par défaut si aucune autre valeur n’est trouvée.
private readonly IStringLocalizer<MyController> _localizer;
pubic MyController(IStringLocalizer<MyController> localizer)
{
_localizer = localizer; ...
Le middleware de gestion de culture
La culture est une notion importante dans ASP.NET Core car le framework travaille expressément avec la culture afin de déterminer quelle langue est la mieux adaptée à l’utilisateur qui envoie la requête HTTP. Chaque requête est ainsi localisée via un middleware fourni par le framework. Pour commencer, il suffit d’ajouter les services dans le Startup via la méthode ConfigureServices.
public void ConfigureServices(IServiceCollection services)
{
services.AddLocalization(options => options.ResourcesPath =
"Resources");
services.AddMvc()
.AddViewLocalization()
.AddDataAnnotationsLocalization();
Les trois méthodes importantes ici sont :
-
AddLocalization : ajoute les services de localisation dans le conteneur de services en précisant où se trouvent les ressources pour les traductions.
-
AddViewLocalisation : ajoute les services localisation spécifiques pour les vues. Il est possible de spécifier plusieurs stratégies différentes afin de localiser les vues. La première qui est LanguageViewLocationExpanderFormat.Suffix permet de spécifier plusieurs fichiers pour des cultures différentes. Par exemple, le fichier Index.fr.html sera localisé comme étant de culture française. La seconde option est LanguageViewLocationExpanderFormat.SubFolder et permet de regrouper sous des dossiers de culture les vues MVC.
-
AddDataAnnotationsLocalization : ajoute les services de localisation pour les annotations utilisées dans les modèles afin de définir des messages de validation.
Ensuite, dans la méthode Configure, il faut ajouter le middleware de localisation afin que chaque requête sache dans quelle culture elle doit travailler. Ce middleware se configure facilement via les options RequestLocalizationOptions. Le code ci-dessous ajoute le middleware en spécifiant les cultures qui sont supportées par l’application.
public void Configure(IApplicationBuilder...