Localizer 资源未在已发布版本中解析

Localizer ressources not resolved in published version

我有一个奇怪的问题。在我的 asp.net 核心 5 项目中,我使用了本地化程序。它在我的开发机器上运行得非常棒。但是在发布项目并在专用服务器上 运行ning 后,资源没有得到解析。

Startup.cs

    public class Startup
    {
        public IConfiguration Configuration { get; }

        public Startup(IConfiguration configuration)
        {
            Configuration = configuration;
        }

        public void ConfigureServices(IServiceCollection services)
        {
            services.AddMvc(option => option.EnableEndpointRouting = false).AddViewLocalization().AddDataAnnotationsLocalization();
            services.AddMvc().AddViewLocalization();
            services.AddMemoryCache();
            services.AddLocalization(options => options.ResourcesPath = "Resources");

            services.Configure<RequestLocalizationOptions>(
                options =>
                {
                    var supportedCultures = new List<CultureInfo>
                        {
                            new CultureInfo("de-CH"),
                            new CultureInfo("en-US")
                        };

                    options.DefaultRequestCulture = new RequestCulture(culture: "de-CH", uiCulture: "de-CH");
                    options.SupportedCultures = supportedCultures;
                    options.SupportedUICultures = supportedCultures;
                });
        }

        public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }
            else
            {
                app.UseExceptionHandler("/Home/Error");
            }
            app.UseStaticFiles();
            app.UseMvcWithDefaultRoute();
            app.UseRequestLocalization();

            var locOptions = app.ApplicationServices.GetService<IOptions<RequestLocalizationOptions>>();
            app.UseRequestLocalization(locOptions.Value);
        }

Index.cshtlm

@using Microsoft.AspNetCore.Mvc.Localization
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
@inject IViewLocalizer Localizer

@{
    ViewData["Title"] = "Index";
    Layout = "~/Views/Shared/_Layout.cshtml";
}

<p>@Localizer["TextResetPassword"]</p>
<form asp-controller="Home" asp-action="Check">
    <div class="form-group">
        <div class="error_message">
            <span asp-validation-for="Username" class="text-danger"></span>
        </div>
        <input asp-for="Username" class="form-control" placeholder="@Localizer["TextExampleUsername"]" />
    </div>
    <input class="btn btn-primary" type="submit" value="@Localizer["TextSendButton"]">
</form>

我在“Ressources/Views.Home.Index.de.resx”或“Ressources/Views.Home.Index.en.resx”下也有资源。这些托管标签的相应条目。

如果我 运行 在我的开发机器上,标签“TextResetPassword”被正确解析为我的资源中的条目。 但是在发布项目并在服务器上安装后 returns 文本“TextResetPassword”而不是资源条目。

我已经尝试过以下步骤:

  1. 将项目中的资源标记为“始终复制”
  2. 已安装软件包 Localization.AspNetCore.TagHelpers 和 Microsoft.Extensions.Localization

如有任何帮助,我们将不胜感激。

好的,经过一番挖掘,我找到了答案。而且是电脑前的开发者...

我以为语言是由客户端发送的。但我错了,问题出在 startup.cs:

        public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }
            else
            {
                app.UseExceptionHandler("/Home/Error");
            }
            app.UseStaticFiles();
            app.UseRequestLocalization();
            var locOptions = app.ApplicationServices.GetService<IOptions<RequestLocalizationOptions>>();
            app.UseRequestLocalization(locOptions.Value);
            app.UseMvcWithDefaultRoute();
        }

app.UseMvcWithDefaultRoute() 必须最后被调用,否则它会立即 returns 而 app.UseRequestLocalization() 被忽略。 第二个问题是我的懒惰,英语中的一些字符串丢失了。