Estoy desarrollando una aplicación en el núcleo de Asp.net que utiliza algunas traducciones según el idioma del usuario.
En mi controlador, intento cargar el mensaje de error desde un archivo .resx. Tengo varios dependiendo del idioma:
Translations.nl.resx Translations.en.resx Translations.fr.resx Translations.resx (default)He configurado esto en Startup.cs agregando lo siguiente:
services.AddLocalization();Y en el constructor de mi controlador he agregado:
IStringLocalizer<Translations> localizerSi construyo mi aplicación en la máquina local en modo Depurar o Liberar, mis traducciones funcionan como se esperaba. También funciona si construyo la aplicación con docker-compose pero en modo de depuración.
Si construyo mi aplicación con docker-compose en modo de lanzamiento, no puedo encontrar la traducción esperada.
Mi Dockerfile se ve así:
FROM microsoft/dotnet:2.1-aspnetcore-runtime AS base WORKDIR /app EXPOSE 60604 EXPOSE 44327 FROM microsoft/dotnet:2.1-sdk AS build WORKDIR /src COPY MemberDataApi/NuGet.linux.config . COPY MemberDataApi/MemberDataApi.csproj MemberDataApi/ VOLUME /nuget/myrepo/ COPY MemberDataApi/NugetPackage/ /nuget/myrepo/ RUN dotnet restore MemberDataApi/MemberDataApi.csproj COPY . . WORKDIR /src/MemberDataApi RUN dotnet build MemberDataApi.csproj -c Release -o /app --no-restore FROM build AS publish RUN dotnet publish MemberDataApi.csproj -c Release -o /app --no-restore FROM base AS final WORKDIR /app COPY --from=publish /app . ENTRYPOINT ["dotnet", "MemberDataApi.dll"]¿Alguien puede ayudarme con esto? Cualquier idea de lo que falta en el contenedor o lo que está mal
Tuve el mismo problema y pasé horas tratando de arreglar algo que no estaba roto porque todo funcionaba perfectamente bien localmente y pensé que se debía a la contenedorización.
En realidad, tuve que agregar esas líneas en mi método Configurar (aplicación IApplicationBuilder, entorno IWebHostEnvironment) en Startup.cs:
var supportedCultures = new string[] { "en-US", "fr-FR" }; app.UseRequestLocalization(options => options .AddSupportedCultures(supportedCultures) .AddSupportedUICultures(supportedCultures) .SetDefaultCulture("fr-FR") );Debe precisar qué culturas puede manejar su aplicación.
Puedes encontrar más aquí .
Tuvimos el mismo problema. Siempre funciona en mi máquina con Windows, pero no funciona en el servidor Linux después de la implementación. Resulta que tuvimos que incluir ambos:
.AddSupportedCultures(supportedCultures); .AddSupportedUICultures(supportedCultures);