Solucionar problemas de Localização no ASP.NET Core
Por Hisham Bin Ateya
Este artigo contém instruções sobre como diagnosticar problemas de localização em aplicativos do ASP.NET Core.
Problemas de configuração da localização
Ordem do middleware de localização
O aplicativo pode não localizar porque o middleware de localização não está ordenado conforme o esperado.
Para resolver esse problema, verifique se o middleware de localização foi registrado antes do middleware do MVC. Caso contrário, o middleware de localização não será aplicado.
public void ConfigureServices(IServiceCollection services)
{
services.AddLocalization(options => options.ResourcesPath = "Resources");
services.AddMvc();
}
Caminho dos recursos de localização não encontrado
As culturas compatíveis em RequestCultureProvider não correspondem ao registrado uma vez
Problemas de nomenclatura do arquivo de recurso
O ASP.NET Core tem regras e diretrizes predefinidas para a nomenclatura de arquivos de recurso de localização, que são descritas em detalhes aqui.
Recursos ausentes
As causas comuns para não localizar recursos incluem:
- Nomes de recursos digitados incorretamente no arquivo
resx
ou na solicitação do localizador. - O recurso está ausente do
resx
para alguns idiomas, mas presente em outros. - Se ainda houver problemas, verifique as mensagens de log de localização (que estão no nível de log
Debug
) para saber mais detalhes sobre os recursos ausentes.
Dica: ao usar CookieRequestCultureProvider
, verifique se aspas simples não são usadas com as culturas dentro do valor do cookie de localização cookie. Por exemplo, c='en-UK'|uic='en-US'
é um valor cookie inválido, enquanto c=en-UK|uic=en-US
é válido.
Problemas de bibliotecas de recursos e classes
Por padrão, o ASP.NET Core oferece uma maneira de permitir que as bibliotecas de classes localizem seus arquivos de recurso por meio de ResourceLocationAttribute.
Problemas comuns com bibliotecas de classes incluem:
- Ausência do
ResourceLocationAttribute
em uma biblioteca de classes evitará queResourceManagerStringLocalizerFactory
descubra os recursos. - Nomenclatura do arquivo de recurso. Para saber mais, confira a seção Problemas de nomenclatura do arquivo de recurso.
- Altere o namespace raiz da biblioteca de classes. Para saber mais, confira a seção Problemas do namespace raiz.
CustomRequestCultureProvider não funciona conforme o esperado
A classe RequestLocalizationOptions
tem três provedores padrão:
QueryStringRequestCultureProvider
CookieRequestCultureProvider
AcceptLanguageHeaderRequestCultureProvider
O CustomRequestCultureProvider permite personalizar como a cultura de localização é fornecida no aplicativo. O CustomRequestCultureProvider
é usado quando os provedores padrão não atendem aos seus requisitos.
Um motivo comum para o provedor personalizado não funcionar corretamente é não ser o primeiro provedor na lista
RequestCultureProviders
. Para resolver o problema:Insira o provedor personalizado na posição 0 da lista
RequestCultureProviders
, desta maneira:
options.RequestCultureProviders.Insert(0, new CustomRequestCultureProvider(async context =>
{
// My custom request culture logic
return new ProviderCultureResult("en");
}));
options.AddInitialRequestCultureProvider(new CustomRequestCultureProvider(async context =>
{
// My custom request culture logic
return new ProviderCultureResult("en");
}));
- Use o método de extensão
AddInitialRequestCultureProvider
para definir o provedor personalizado como provedor inicial.
Problemas do namespace raiz
Quando o namespace raiz de um assembly for diferente do nome do assembly, a localização não funcionará por padrão. Para evitar esse problema, use RootNamespace, que é descrito em detalhes aqui
Aviso
Isso pode ocorrer quando o nome de um projeto não for um identificador .NET válido. Por exemplo, my-project-name.csproj
usará o namespace raiz my_project_name
e o nome do assembly my-project-name
que gera esse erro.
Recursos e ação de build
Se você usa arquivos de recurso para localização, é importante que eles tenham uma ação de build correta. Eles precisam ser um Recurso inserido; caso contrário, o ResourceStringLocalizer
não conseguirá localizar os recursos.
Problemas do GitHub com dicas úteis para a solução de problemas
Comentários
https://aka.ms/ContentUserFeedback.
Brevemente: ao longo de 2024, vamos descontinuar progressivamente o GitHub Issues como mecanismo de feedback para conteúdos e substituí-lo por um novo sistema de feedback. Para obter mais informações, veja:Submeter e ver comentários