Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Observação
Esta não é a versão mais recente deste artigo. Para a versão atual, consulte a versão .NET 10 deste artigo.
Advertência
Esta versão do ASP.NET Core não é mais suportada. Para obter mais informações, consulte a Política de suporte do .NET e do .NET Core. Para a versão atual, consulte a versão .NET 10 deste artigo.
Por Hisham Bin Ateya
Este artigo:
- Lista os pontos de extensibilidade nas APIs de localização.
- Fornece instruções sobre como estender a localização de aplicações em ASP.NET Core.
Pontos Extensíveis em APIs de Localização
ASP.NET APIs de localização Core são construídas para serem extensíveis. A extensibilidade permite aos programadores personalizar a localização de acordo com as suas necessidades. Por exemplo, o OrchardCore tem um POStringLocalizer.
POStringLocalizer descreve em detalhe a utilização da localização por Objetos Portáteis para a utilização de PO ficheiros para armazenar recursos de localização.
Este artigo lista os dois principais pontos de extensibilidade que as APIs de localização fornecem:
Fornecedores de Cultura de Localização
ASP.NET APIs de localização Core têm quatro fornecedores padrão que podem determinar a cultura atual de um pedido em execução:
- QueryStringRequestCultureProvider
- CookieRequestCultureProvider
- AcceptLanguageHeaderRequestCultureProvider
- CustomRequestCultureProvider
Os fornecedores anteriores são descritos em detalhe na documentação do Localization Middleware . Se os fornecedores padrão não corresponderem às suas necessidades, construa um prestador personalizado usando uma das seguintes abordagens:
Usar CustomRequestCultureProvider
CustomRequestCultureProvider fornece um RequestCultureProvider personalizado que utiliza um delegado simples para determinar a cultura de localização atual
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);
}));
Use uma nova implementação do RequestCultureProvider
Pode ser criada uma nova implementação de RequestCultureProvider que determina a informação da cultura associada ao pedido a partir de uma fonte personalizada. Por exemplo, a fonte personalizada pode ser um ficheiro de configuração ou uma base de dados.
O exemplo seguinte mostra AppSettingsRequestCultureProvider, que estende o RequestCultureProvider para determinar a informação da cultura do pedido a 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);
}
}
Recursos de localização
A localização no ASP.NET Core fornece ResourceManagerStringLocalizer.
ResourceManagerStringLocalizer é uma implementação de IStringLocalizer que utiliza resx para armazenar recursos de localização.
Não estás limitado a usar resx ficheiros. Ao implementar IStringLocalizer, qualquer fonte de dados pode ser utilizada.
Os seguintes exemplos de projetos implementam IStringLocalizer: