Extensibilidade de localização
Observação
Esta não é a versão mais recente deste artigo. Para a versão atual, consulte a versão .NET 9 deste artigo.
Aviso
Esta versão do ASP.NET Core não tem mais suporte. 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 9 deste artigo.
Importante
Essas informações relacionam-se ao produto de pré-lançamento, que poderá ser substancialmente modificado antes do lançamento comercial. A Microsoft não oferece nenhuma garantia, explícita ou implícita, quanto às informações fornecidas aqui.
Para a versão atual, consulte a versão .NET 9 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 aplicativos ASP.NET Core.
Pontos extensíveis em APIs de localização
As APIs de localização ASP.NET Core foram criadas para serem extensíveis. A extensibilidade permite que os desenvolvedores personalizem a localização de acordo com suas necessidades. Por exemplo, OrchardCore tem um POStringLocalizer
. POStringLocalizer
descreve em detalhes o uso da Localização de objeto portátil para usar arquivos PO
para armazenar recursos de localização.
Este artigo lista os dois pontos de extensibilidade principais que as APIs de localização fornecem:
Provedores de cultura de localização
As APIs de localização ASP.NET Core têm quatro provedores padrão que podem determinar a cultura atual de uma solicitação em execução:
- QueryStringRequestCultureProvider
- CookieRequestCultureProvider
- AcceptLanguageHeaderRequestCultureProvider
- CustomRequestCultureProvider
Os provedores anteriores são descritos em detalhes na documentação sobre Middleware de localização. Se os provedores padrão não atenderem às suas necessidades, crie um provedor personalizado usando uma das seguintes abordagens:
Usar CustomRequestCultureProvider
CustomRequestCultureProvider fornece um RequestCultureProvider personalizado que usa 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);
}));
Usar uma nova implementação de RequestCultureProvider
Uma nova implementação de RequestCultureProvider pode ser criada para determinar as informações de cultura da solicitação de uma fonte personalizada. Por exemplo, a origem personalizada pode ser um arquivo de configuração ou um banco de dados.
O exemplo a seguir mostra AppSettingsRequestCultureProvider
, que estende o RequestCultureProvider para determinar as informações de cultura da solicitação 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 do ASP.NET Core fornece ResourceManagerStringLocalizer. ResourceManagerStringLocalizer é uma implementação de IStringLocalizer que usa resx
para armazenar recursos de localização.
Você não fica limitado a usar arquivos resx
. Implementando IStringLocalizer
, qualquer fonte de dados pode ser usada.
Os seguintes projetos de exemplo implementam IStringLocalizer: