本地化无法在VS2017中使用docker-compose(适用于Linux的Docker)在发布模式下构建应用程序

时间:2019-05-25 15:01:22

标签: docker asp.net-core docker-compose resource-files asp.net-core-localization

我正在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"]

我有人可以帮我吗?任何关于容器缺失或错误的想法

1 个答案:

答案 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