Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Por Hisham Bin Ateya
Este artigo fornece instruções sobre como diagnosticar problemas de localização de aplicativo do ASP.NET Core.
Problemas de configuração de localização
Ordem do middleware de localização
O aplicativo pode não ser localizado porque o middleware de localização não é ordenado conforme o esperado.
Para resolver esse problema, verifique se o middleware de localização está registrado antes do middleware 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 de recursos de localização não encontrado
As culturas com suporte no RequestCultureProvider não correspondem às registradas anteriormente
Problemas de nomenclatura de arquivo de recurso
ASP.NET Core tem regras e diretrizes predefinidas para nomenclatura de arquivo de recursos de localização, que são descritas na Globalização e localização no ASP.NET Core.
Recursos ausentes
As causas comuns dos recursos não encontrados incluem:
- Os nomes de recursos são escritos incorretamente no arquivo de recurso XML do .NET (
.resx) ou na solicitação do localizador. - O recurso está ausente do arquivo de recurso para alguns idiomas, mas existe em outros.
- Se você ainda estiver tendo problemas, verifique as mensagens de log de localização (registradas no nível do
Debuglog) para obter mais detalhes sobre os recursos ausentes.
Dica
Ao usar CookieRequestCultureProvider, verifique se as aspas simples não são usadas com as culturas dentro do valor de localização cookie . Por exemplo, c='en-UK'|uic='en-US' é um valor inválido cookie , embora c=en-UK|uic=en-US seja válido.
Problemas de recursos e bibliotecas de classes
ASP.NET Core por padrão fornece uma maneira de permitir que as bibliotecas de classes encontrem seus arquivos de recurso por meio de ResourceLocationAttribute.
Os problemas comuns com bibliotecas de classes incluem:
- A falta de ResourceLocationAttribute em uma biblioteca de classes impede ResourceManagerStringLocalizerFactory de descobrir os recursos.
- Nomeação de arquivos de recurso. Para obter mais informações, consulte a seção Problemas de nomenclatura do arquivo de recurso .
- Alterando o namespace raiz da biblioteca de classes. Para obter mais informações, consulte a seção Problemas de namespace raiz .
CustomRequestCultureProvider não funciona conforme o esperado
A RequestLocalizationOptions classe tem três provedores padrão:
- QueryStringRequestCultureProvider
- CookieRequestCultureProvider
- AcceptLanguageHeaderRequestCultureProvider
O CustomRequestCultureProvider permite personalizar como a cultura de localização é fornecida. O CustomRequestCultureProvider é usado quando os provedores padrão não atendem aos seus requisitos.
Um motivo comum para um provedor personalizado não funcionar corretamente é que ele não é o primeiro provedor na RequestCultureProviders lista. Para resolver o problema:
Insira o provedor personalizado na posição zero na RequestCultureProviders lista:
options.AddInitialRequestCultureProvider( new CustomRequestCultureProvider(async context => { // My custom request culture logic return new ProviderCultureResult("en"); }));
Insira o provedor personalizado na posição zero na RequestCultureProviders lista:
options.RequestCultureProviders.Insert(0, new CustomRequestCultureProvider(async context => { // My custom request culture logic return new ProviderCultureResult("en"); }));
- Use o AddInitialRequestCultureProvider método de extensão para definir o provedor personalizado como o provedor inicial.
Problemas de namespace raiz
Quando o namespace raiz de um assembly é diferente do nome do assembly, a localização não funciona por padrão. Para evitar esse problema, use o RootNamespace atributo, que é descrito em Globalização e localização no ASP.NET Core.
Aviso
Um problema de namespace raiz pode ocorrer quando o nome de um projeto não é um identificador .NET válido. Por exemplo, my-project-name.csproj usa o raiz do namespace my_project_name e o nome do assembly my-project-name, o que resulta nesse erro.
Recursos e ação de compilação
Se você usar arquivos de recursos para localização, é importante que eles tenham uma ação de compilação apropriada. Usar Embedded Resource; caso contrário, ResourceStringLocalizer não consegue encontrar esses recursos.
Substituição de local usando o painel "Sensores" nas ferramentas de desenvolvedor
Ao usar a substituição de local usando o painel Sensores nas ferramentas de desenvolvedor do Google Chrome ou do Microsoft Edge, a linguagem de fallback é redefinida após a pré-renderização. Evite definir o idioma usando o painel Sensores ao testar. Defina o idioma usando as configurações de idioma do navegador.
Para obter mais informações, consulte Blazor A localização não funciona com InteractiveServer (dotnet/aspnetcore #53707).