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”而不是资源条目。
我已经尝试过以下步骤:
- 将项目中的资源标记为“始终复制”
- 已安装软件包 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() 被忽略。
第二个问题是我的懒惰,英语中的一些字符串丢失了。
我有一个奇怪的问题。在我的 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”而不是资源条目。
我已经尝试过以下步骤:
- 将项目中的资源标记为“始终复制”
- 已安装软件包 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() 被忽略。 第二个问题是我的懒惰,英语中的一些字符串丢失了。