Extensibilité de la localisation
Remarque
Ceci n’est pas la dernière version de cet article. Pour la version actuelle, consultez la version .NET 9 de cet article.
Avertissement
Cette version d’ASP.NET Core n’est plus prise en charge. Pour plus d’informations, consultez la stratégie de support .NET et .NET Core. Pour la version actuelle, consultez la version .NET 9 de cet article.
Important
Ces informations portent sur la préversion du produit, qui est susceptible d’être en grande partie modifié avant sa commercialisation. Microsoft n’offre aucune garantie, expresse ou implicite, concernant les informations fournies ici.
Pour la version actuelle, consultez la version .NET 9 de cet article.
Par Hisham Bin Ateya
Cet article :
- Répertorie les points d’extensibilité sur les API de localisation.
- Fournit des instructions sur la façon d’étendre la localisation des applications ASP.NET Core.
Points extensibles dans les API de localisation
Les API de localisation ASP.NET Core sont conçues pour être extensibles. L’extensibilité permet aux développeurs de personnaliser la localisation en fonction de leurs besoins. Par exemple, OrchardCore a un POStringLocalizer
. POStringLocalizer
décrit en détail l’utilisation de la Localisation d’objet portable pour utiliser des fichiers PO
afin de stocker des ressources de localisation.
Cet article répertorie les deux principaux points d’extensibilité fournis par les API de localisation :
Fournisseurs de culture de localisation
Les API de localisation ASP.NET Core incluent quatre fournisseurs par défaut qui peuvent déterminer la culture actuelle d’une requête d’exécution :
- QueryStringRequestCultureProvider
- CookieRequestCultureProvider
- AcceptLanguageHeaderRequestCultureProvider
- CustomRequestCultureProvider
Les fournisseurs précédents sont décrits en détail dans la documentation de l’intergiciel de localisation. Si les fournisseurs par défaut ne répondent pas à vos besoins, créez un fournisseur personnalisé à l’aide de l’une des approches suivantes :
Utiliser CustomRequestCultureProvider
CustomRequestCultureProvider fournit un RequestCultureProvider personnalisé qui utilise un délégué simple pour déterminer la culture de localisation actuelle :
options.AddInitialRequestCultureProvider(new CustomRequestCultureProvider(async context =>
{
var currentCulture = "en";
var segments = context.Request.Path.Value.Split(new char[] { '/' },
StringSplitOptions.RemoveEmptyEntries);
if (segments.Length > 1 && segments[0].Length == 2)
{
currentCulture = segments[0];
}
var requestCulture = new ProviderCultureResult(currentCulture);
return Task.FromResult(requestCulture);
}));
options.RequestCultureProviders.Insert(0, new CustomRequestCultureProvider(async context =>
{
var currentCulture = "en";
var segments = context.Request.Path.Value.Split(new char[] { '/' },
StringSplitOptions.RemoveEmptyEntries);
if (segments.Length > 1 && segments[0].Length == 2)
{
currentCulture = segments[0];
}
var requestCulture = new ProviderCultureResult(currentCulture);
return Task.FromResult(requestCulture);
}));
Utiliser une nouvelle implémentation de RequestCultureProvider
Une nouvelle implémentation de RequestCultureProvider peut être créée pour déterminer les informations de culture de requête à partir d’une source personnalisée. Par exemple, la source personnalisée peut être un fichier de configuration ou une base de données.
L’exemple suivant montre AppSettingsRequestCultureProvider
, qui étend le RequestCultureProvider pour déterminer les informations de culture de requête à partir de appsettings.json
:
public class AppSettingsRequestCultureProvider : RequestCultureProvider
{
public string CultureKey { get; set; } = "culture";
public string UICultureKey { get; set; } = "ui-culture";
public override Task<ProviderCultureResult> DetermineProviderCultureResult(HttpContext httpContext)
{
if (httpContext == null)
{
throw new ArgumentNullException();
}
var configuration = httpContext.RequestServices.GetService<IConfigurationRoot>();
var culture = configuration[CultureKey];
var uiCulture = configuration[UICultureKey];
if (culture == null && uiCulture == null)
{
return Task.FromResult((ProviderCultureResult)null);
}
if (culture != null && uiCulture == null)
{
uiCulture = culture;
}
if (culture == null && uiCulture != null)
{
culture = uiCulture;
}
var providerResultCulture = new ProviderCultureResult(culture, uiCulture);
return Task.FromResult(providerResultCulture);
}
}
Ressources de localisation
La localisation ASP.NET Core fournit ResourceManagerStringLocalizer. ResourceManagerStringLocalizer est une implémentation de IStringLocalizer qui utilise resx
pour stocker des ressources de localisation.
Vous n’êtes pas limité à l’utilisation de fichiers resx
. En implémentant IStringLocalizer
, n’importe quelle source de données peut être utilisée.
Les exemples de projets suivants implémentent IStringLocalizer :