我正在Asp.net核心中开发一个应用程序,该应用程序根据用户的语言使用一些翻译。
在我的控制器中,我试图从.resx文件加载错误消息。根据语言,我有多个:
Translations.nl.resx
Translations.en.resx
Translations.fr.resx
Translations.resx (default)
我已经在Startup.cs中对此进行了配置,并添加了以下内容:
services.AddLocalization();
在我的控制器的构造函数中,我添加了:
IStringLocalizer<Translations> localizer
如果我在Debug或Release模式下在本地计算机上构建应用程序,我的翻译将按预期工作。 如果我使用docker-compose但在调试模式下构建应用程序,它也可以工作。
如果我在发布模式下使用docker-compose构建应用程序,则找不到所需的翻译。
我的Dockerfile看起来像这样:
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"]
我有人可以帮我吗?任何关于容器缺失或错误的想法
答案 0 :(得分:0)
我遇到了同样的问题,花了数小时的时间来修复那些没有坏掉的东西,因为在本地一切正常,并且认为这是由于容器化造成的。
实际上,我必须在Startup.cs的Configure(IApplicationBuilder应用程序,IWebHostEnvironment env)方法中添加这些行:
var supportedCultures = new string[] { "en-US", "fr-FR" };
app.UseRequestLocalization(options =>
options
.AddSupportedCultures(supportedCultures)
.AddSupportedUICultures(supportedCultures)
.SetDefaultCulture("fr-FR")
);
您必须确定应用程序可以处理的区域性。
您可以找到更多here。