Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net core ASP.NET Core 3.0中的本地化_Asp.net Core_Asp.net Core Localization - Fatal编程技术网

Asp.net core ASP.NET Core 3.0中的本地化

Asp.net core ASP.NET Core 3.0中的本地化,asp.net-core,asp.net-core-localization,Asp.net Core,Asp.net Core Localization,我正在尝试使用.resx文件将我的项目本地化 对我来说,它不起作用,对我的同事来说,他也在做这个项目,它起作用了 有关代码的一些详细信息: Startup.cs文件 public void ConfigureServices(IServiceCollection services) { . . . // Localization services.AddLo

我正在尝试使用.resx文件将我的项目本地化

对我来说,它不起作用,对我的同事来说,他也在做这个项目,它起作用了

有关代码的一些详细信息: Startup.cs文件

 public void ConfigureServices(IServiceCollection services)
        {
            .
            .
            .
            // Localization

            services.AddLocalization(options => options.ResourcesPath = "Lang/");

            services.AddMvc(option => option.EnableEndpointRouting = false)
                .AddViewLocalization(LanguageViewLocationExpanderFormat.Suffix)
                .AddDataAnnotationsLocalization();



            services.Configure<RequestLocalizationOptions>(options =>
            {
                var supportedCultures = new List<CultureInfo>
                    {
                        new CultureInfo("cs"),
                        //new CultureInfo("en")
                    };

                options.DefaultRequestCulture = new RequestCulture(culture: "cs", uiCulture: "cs");
                options.SupportedCultures = supportedCultures;
                options.SupportedUICultures = supportedCultures;
            });
            services.AddTransient<Messages>();
            // Localization end
        }

        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
        public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
                app.UseDatabaseErrorPage();
            }
            else
            {
                app.UseExceptionHandler("/Home/Error");
                app.UseHsts();
            }

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

            .
            .
            .

            app.UseEndpoints(endpoints =>
            {
                endpoints.MapControllers();
                endpoints.MapControllerRoute(
                    name: "default",
                    pattern: "{controller=Home}/{action=Index}/{id?}");
            });
        }
对我来说,它返回TitleLogin,值ResourceNotFound为true

对于我的同事,它使用相同的代码返回正确的值

你能帮帮我吗?我做错了什么


非常感谢。

我不知道哪个resx文件包含TitleLogin。为了显示正确的本地化数据,当我修改服务时,它会出错。AddLocalizationoptions=>options.ResourcesPath=Lang/;到

然后在Lang文件夹中添加名为Views.Account.Login.cs.resx的resx文件

更新日期:2020年3月19日

事实证明,在asp.net core 3.1中,您需要将Default.cs从Resources文件夹中移出您的Lang文件夹,请参见此

如果类Default.cs和Default.*.resx位于同一文件夹中,则已编译的dll xxx.lang.dll中的命名空间将出错

因此,解决办法是

1.删除原来的Default.cs,直接在项目下新建一个:

namespace MyApp
{
    public class Default
    {
    }
}
2.在Lang文件夹中添加Default.cs.resx

3._ViewImports.cshtml

@using MyApp
@using Microsoft.Extensions.Localization
@inject IStringLocalizer<Default> LangDefault

非常感谢你的建议。这是可行的,但我希望只有很少的resx文件,因为每个视图都有很多常见的消息。TitleLogin包含在Default.cs.resx中,所以我想使用LangDefault[TitleLogin],但找到的值为null…我只想添加,在ViewImports中我有@inject IStringLocalizer LangDefault。。。当我在LangDefault->Non-Public members->\u localizer->Non-Public members->\u missingManifestCache中查找时,我可以在那里找到我的标题登录,但值为null…@Lukas我发现这是一个突破性的更改,请检查我编辑的答案。
services.AddLocalization(options => options.ResourcesPath = "Lang");
namespace MyApp
{
    public class Default
    {
    }
}
@using MyApp
@using Microsoft.Extensions.Localization
@inject IStringLocalizer<Default> LangDefault