Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Por Hisham Bin Ateya
En este artículo se proporcionan instrucciones sobre cómo diagnosticar problemas de localización de aplicaciones de ASP.NET Core.
Problemas de configuración de localización
Orden de middleware de localización
Es posible que la aplicación no se localice porque el middleware de localización no está ordenado según lo previsto.
Para resolver este problema, asegúrese de que el middleware de localización está registrado antes del middleware de MVC. De lo contrario, no se aplica el middleware de localización.
public void ConfigureServices(IServiceCollection services)
{
services.AddLocalization(options => options.ResourcesPath = "Resources");
services.AddMvc();
}
No se encontró la ruta de acceso a los recursos de localización
Las referencias culturales admitidas en RequestCultureProvider no coinciden con las registradas una vez
Problemas de nomenclatura de archivos de recursos
ASP.NET Core tiene reglas y directrices predefinidas para la nomenclatura de archivos de recursos de localización, que se describen en Globalización y localización en ASP.NET Core.
Recursos que faltan
Entre las causas comunes de los recursos que no se encuentran se incluyen las siguientes:
- Los nombres de recursos se han escrito mal en el archivo de recursos XML de .NET (
.resx) o en la solicitud del localizador. - Falta el recurso del archivo de recursos para algunos idiomas, pero existe en otros.
- Si sigue teniendo problemas, compruebe los mensajes del registro de localización (registrados en el
Debugnivel de registro) para obtener más detalles sobre los recursos que faltan.
Sugerencia
Al usar CookieRequestCultureProvider, compruebe que las comillas simples no se usan con las culturas dentro del valor de cookie de localización. Por ejemplo, c='en-UK'|uic='en-US' es un valor no válido cookie , mientras c=en-UK|uic=en-US que es válido.
Problemas de recursos y bibliotecas de clases
ASP.NET Core proporciona de forma predeterminada un modo de permitir que las bibliotecas de clases encuentren sus archivos de recursos a través de ResourceLocationAttribute.
Entre los problemas comunes con las bibliotecas de clases se incluyen:
- Faltar el ResourceLocationAttribute en una biblioteca de clases impide que ResourceManagerStringLocalizerFactory descubra los recursos.
- Nomenclatura de archivos de recursos. Para obtener más información, consulte la sección Problemas de nomenclatura de archivos de recursos.
- Cambiar el espacio de nombres raíz de la biblioteca de clases. Para obtener más información, consulte la sección Problemas del espacio de nombres raíz .
CustomRequestCultureProvider no funciona según lo previsto
La RequestLocalizationOptions clase tiene tres proveedores predeterminados:
- QueryStringRequestCultureProvider
- CookieRequestCultureProvider
- AcceptLanguageHeaderRequestCultureProvider
El CustomRequestCultureProvider permite personalizar cómo se proporciona la cultura de localización. CustomRequestCultureProvider se usa cuando los proveedores predeterminados no cumplen sus requisitos.
Un motivo común para que un proveedor personalizado no funcione correctamente es que no es el primer proveedor de la RequestCultureProviders lista. Para solucionar este problema:
Inserte el proveedor personalizado en la posición cero de la RequestCultureProviders lista:
options.AddInitialRequestCultureProvider( new CustomRequestCultureProvider(async context => { // My custom request culture logic return new ProviderCultureResult("en"); }));
Inserte el proveedor personalizado en la posición cero de la RequestCultureProviders lista:
options.RequestCultureProviders.Insert(0, new CustomRequestCultureProvider(async context => { // My custom request culture logic return new ProviderCultureResult("en"); }));
- Use el método de AddInitialRequestCultureProvider extensión para establecer el proveedor personalizado como proveedor inicial.
Problemas del espacio de nombres raíz
Cuando el espacio de nombres raíz de un ensamblado es diferente del nombre del ensamblado, la localización no funciona de forma predeterminada. Para evitar este problema, use el RootNamespace atributo , que se describe en Globalización y localización en ASP.NET Core.
Advertencia
Se puede producir un problema de espacio de nombres raíz cuando el nombre de un proyecto no es un identificador de .NET válido. Por ejemplo, my-project-name.csproj usa el espacio de nombres raíz my_project_name y el nombre my-project-name del ensamblado, lo que produce este error.
Recursos y acción de construcción
Si usa archivos de recursos para la localización, es importante que tengan una acción de compilación adecuada. Usar recurso incrustado; de lo contrario, ResourceStringLocalizer no puede encontrar estos recursos.
Anulación de ubicación mediante el panel "Sensores" en las herramientas de desarrollo
Al usar la invalidación de ubicación mediante el panel Sensores en Google Chrome o las herramientas de desarrollo de Microsoft Edge, el idioma alternativo se restablece después de la representación previa. Evita establecer el idioma mediante el panel Sensores al realizar pruebas. Establece el idioma mediante la configuración de idioma del explorador.
Para obtener más información, consulta Blazor La localización no funciona con InteractiveServer (dotnet/aspnetcore #53707).
Problemas de GitHub con sugerencias útiles para resolver problemas
-
Agregue más información sobre los archivos compartidos (
dotnet/AspNetCore.Docs#28674 -
Blazor (
dotnet/aspnetcore)