带有 IStringLocalizer 的 RazorPages 不起作用
Posted
技术标签:
【中文标题】带有 IStringLocalizer 的 RazorPages 不起作用【英文标题】:RazorPages with IStringLocalizer not working 【发布时间】:2021-09-05 07:51:07 【问题描述】:我目前正在使用 Razorpages 创建多语言 Web 应用程序。 我按照this JetBrains tutorial设置一切:
我当前的设置如下所示:
Startup.cs
public void ConfigureServices(IServiceCollection services)
services.AddLocalization(options => options.ResourcesPath = "Resources");
//services.AddMvc();
services.AddMvc()
.AddViewLocalization(LanguageViewLocationExpanderFormat.Suffix, options => options.ResourcesPath = "Resources")
.AddDataAnnotationsLocalization();
services
.AddRazorPages()
.AddViewLocalization();
services.Configure<RequestLocalizationOptions>(
opts =>
var culturesSupported = new[]
new CultureInfo("de"),
new CultureInfo("fr"),
new CultureInfo("it")
;
opts.DefaultRequestCulture = new RequestCulture("de");
opts.SupportedCultures = culturesSupported;
opts.SupportedUICultures = culturesSupported;
);
...
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
if (env.IsDevelopment())
app.UseDeveloperExceptionPage();
else
app.UseExceptionHandler("/Error");
// The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
app.UseHsts();
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRequestLocalization();
app.UseRouting();
//var locOptions = app.ApplicationServices.GetService<IOptions<RequestLocalizationOptions>>();
//app.UseRequestLocalization(locOptions.Value);
app.UseAuthentication();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
endpoints.MapRazorPages();
endpoints.MapControllers();
);
和我的剃须刀查看页面:
@page
@using Microsoft.Extensions.Localization
@model Template.Pages.EmployeeFormModel
@inject IStringLocalizer<EmployeeForm> Localizer
@
ViewData["Title"] = "EmployeeForm";
@section Styles
<link href="~/css/formPages.css" rel="stylesheet" />
<div class="row align-items-center">
<div class="col-md-6 offset-md-3">
<img src="~/res/pictures/pic.png" class="form-picture" />
<h1>Daten zum Neueintritt</h1>
<hr />
<p>
@Localizer["text_willkommen"]
</p>
但是在“@Inject IStringLocalizer Localizer”的行中,我得到了错误: “找不到类型或命名空间‘EmployeeForm’……”
我的文件结构如下:
Project
--Pages
----EmployeeForm.cshtml
----EmployeeForm.cshtml.cs
--Resources
----Pages
------EmployeeForm.resx
------EmployeeForm.it.resx
------EmployeeForm.fr.resx
--Startup.cs
这是我第一次使用本地化进行操作,我按照教程进行操作,但由于此错误,我什至无法构建应用程序。
【问题讨论】:
【参考方案1】:
@model Template.Pages.EmployeeFormModel
您的 PageModel 似乎命名为 EmployeeFormModel
,而不是 EmployeeForm
。相应地更改本地化程序的类型参数:
@inject IStringLocalizer<EmployeeFormModel> Localizer
【讨论】:
我相应地改变了它,但它仍然无法正常工作。我必须在我的控制器中设置一些特殊的东西吗?这是我的控制器:pastebin.com/yKnni0nV 看看这个,看看是否有帮助:mikesdotnetting.com/article/346/… 感谢您的帮助。我不知道问题出在哪里,但我可以按照你的指示一点一点地让它工作。尽管页面特定的资源仍然不起作用,但无论如何我只使用 commonResources :)以上是关于带有 IStringLocalizer 的 RazorPages 不起作用的主要内容,如果未能解决你的问题,请参考以下文章