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.
Por Hisham Bin Ateya
Este artigo fornece instruções sobre como diagnosticar problemas de localização de aplicações ASP.NET Core.
Problemas de configuração de localização
Ordem do middleware de localização
A aplicação pode não localizar porque o middleware de localização não está ordenado como esperado.
Para resolver este problema, certifique-se de que o middleware de localização está registado antes do middleware MVC. Caso contrário, o middleware de localização não é 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 Suportadas no RequestCultureProvider não coincidem com as registadas
Problemas de nomenclatura de ficheiros de recursos
ASP.NET Core tem regras e diretrizes pré-definidas para a nomeação de ficheiros de recursos de localização, descritas em Globalização e localização no ASP.NET Core.
Recursos em falta
As causas comuns de não serem encontrados recursos incluem:
- Seja no ficheiro XML do .NET
.resxou no pedido do localizador, os nomes dos recursos são escritos incorretamente. - O recurso está ausente do ficheiro de recursos em algumas línguas, mas existe noutras.
- Se ainda tiver dificuldades, consulte as mensagens do log de localização (registadas ao
Debugnível de log) para obter mais detalhes sobre os recursos em falta.
Sugestão
Ao usar CookieRequestCultureProvider, verifique se as aspas simples não são usadas com as culturas especificadas no valor de localização cookie. Por exemplo, c='en-UK'|uic='en-US' é um valor inválido cookie , enquanto c=en-UK|uic=en-US é válido.
Recursos e questões relacionadas com as bibliotecas de classes
ASP.NET Core por padrão fornece uma forma de permitir que as bibliotecas de classes encontrem os seus ficheiros de recursos através de ResourceLocationAttribute.
Problemas comuns com bibliotecas de classes incluem:
- A ausência de ResourceLocationAttribute numa biblioteca de classes impede que ResourceManagerStringLocalizerFactory descubra os recursos.
- Nomeação de ficheiros de recursos. Para mais informações, consulte a secção Problemas de nomeação de ficheiros de recursos .
- Alterar o espaço de nomes raiz da biblioteca de classes. Para mais informações, consulte a secção de problemas do namespace raiz .
CustomRequestCultureProvider não funciona como esperado
A RequestLocalizationOptions classe tem três fornecedores predefinidos:
- QueryStringRequestCultureProvider
- CookieRequestCultureProvider
- AcceptLanguageHeaderRequestCultureProvider
Permite-te CustomRequestCultureProvider personalizar a forma como a cultura de localização é fornecida. O CustomRequestCultureProvider é usado quando os fornecedores padrão não cumprem os seus requisitos.
Uma razão comum para um fornecedor personalizado não funcionar corretamente é que não é o primeiro fornecedor da RequestCultureProviders lista. Para resolver esse problema:
Insira o fornecedor personalizado na posição zero da RequestCultureProviders lista:
options.AddInitialRequestCultureProvider( new CustomRequestCultureProvider(async context => { // My custom request culture logic return new ProviderCultureResult("en"); }));
Insira o fornecedor personalizado na posição zero da RequestCultureProviders lista:
options.RequestCultureProviders.Insert(0, new CustomRequestCultureProvider(async context => { // My custom request culture logic return new ProviderCultureResult("en"); }));
- Use o método de AddInitialRequestCultureProvider extensão para definir o fornecedor personalizado como o fornecedor inicial.
Problemas com o namespace raiz
Quando o namespace raiz de uma assembleia é diferente do nome da assembleia, a localização não funciona por defeito. Para evitar este problema, use o RootNamespace atributo, que é descrito em Globalização e localização no ASP.NET Core.
Advertência
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 espaço de nomes raiz my_project_name e o nome da assembly my-project-name, o que resulta neste erro.
Recursos e ação de construção
Se usar ficheiros de recurso para localização, é importante que eles tenham uma ação de compilação apropriada. Utilize Recursos Incorporados; caso contrário, o ResourceStringLocalizer não conseguirá encontrar esses recursos.
Substituição de local usando o painel "Sensores" nas ferramentas de desenvolvimento
Ao usar a substituição da localização no painel Sensores nas ferramentas de desenvolvedor do Google Chrome ou do Microsoft Edge, o idioma de reserva é redefinido após a pré-renderização. Evite definir o idioma usando o painel Sensores durante o teste. Defina o idioma usando as configurações de idioma do navegador.
Para obter mais informações, consulte Blazor a localização não é compatível com o InteractiveServer (dotnet/aspnetcore #53707).