Compartir a través de


Solución de problemas de localización de ASP.NET Core

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 Debug nivel 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:

CustomRequestCultureProvider no funciona según lo previsto

La RequestLocalizationOptions clase tiene tres proveedores predeterminados:

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");
        }));
    

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