带有 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 不起作用的主要内容,如果未能解决你的问题,请参考以下文章

Blazor IStringLocalizer 向服务注入

python 斐波那契(razónaurea)。

如何计算列表中每个单词的计数? [复制]

熊猫枢轴并加入两个数据框

在 Razor 页面中使用 Blazor @bind

ASP.NET Core 中外部类库的本地化