.Net核心本地化,我做错了什么?

.Net核心本地化,我做错了什么?,.net,asp.net-core,localization,.net,Asp.net Core,Localization,我正在玩.Net内核和本地化。我主要关注了几篇文章,但似乎无法从我的资源文件中获取数据 启动。配置服务 services.AddLocalization(opts => opts.ResourcesPath = "Resources"); services.Configure<RequestLocalizationOptions>( opts => { var supp

我正在玩.Net内核和本地化。我主要关注了几篇文章,但似乎无法从我的资源文件中获取数据

启动。配置服务

   services.AddLocalization(opts => opts.ResourcesPath = "Resources");

        services.Configure<RequestLocalizationOptions>(
            opts =>
            {
                var supportedCultures = new List<CultureInfo>
                {
                    new CultureInfo("en-GB"),
                };

                opts.DefaultRequestCulture = new RequestCulture("en-GB");
                // Formatting numbers, dates, etc.
                opts.SupportedCultures = supportedCultures;
                // UI strings that we have localized.
                opts.SupportedUICultures = supportedCultures;
            });

        services
            .AddMvc()
            .AddJsonOptions(opts => { opts.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver(); })
            .AddViewLocalization(
                LanguageViewLocationExpanderFormat.Suffix,
                opts => opts.ResourcesPath = "Resources")
            .AddDataAnnotationsLocalization()
            .AddFluentValidation(fv => fv.RegisterValidatorsFromAssemblyContaining<Startup>());
我还保证资源的命名是正确的。IE完整名称空间,减去程序集名称,然后是类名,然后是区域性


ViewModels.LoginViewModelValidator.en-GB.resx,现在一切正常。谢谢大家的评论

我想您在ConfigureServices中也需要这个

services.AddLocalization(options => options.ResourcesPath = "Resources");
您是否在配置中连接了RequestLocalization中间件

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

我不确定您在Resources文件夹下的子文件夹我在我的项目中没有这样做,它正在为我工作。

我认为您在ConfigureServices中也需要它

services.AddLocalization(options => options.ResourcesPath = "Resources");
您是否在配置中连接了RequestLocalization中间件

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

我不确定您在Resources文件夹下的子文件夹我在我的项目中没有这样做,它为我工作。

因为它有一个空格,无法输入.resx名称?这是毫无意义的。如果在VS 2017中有空格或其他特殊字符,则资源编辑器会将其显示为错误,但它会正常编译、运行和解析。空间的问题可能是因为资源使用的经典方式,以及生成的编译/设计时间的恒定性。谢谢,我没有意识到这一点。尽管无法找到我的资源,但我的方法是否有任何明显的错误?Dunno,在windows下也有类似的问题,我创建的资源的大小写是
de
,而不是Startup.cs中定义的
de
,它不会接受。因此,可以检查文件系统的拼写(而不是项目视图中的显示名称)。还要确保名称空间是正确的,即ViewModelValidator是否位于文档中的ViewModel名称空间(这可能是奇怪的命名约定):如果目标类的名称空间与程序集名称不同,则需要完整的类型名称。例如,在示例项目中,ExtraNamespace.Tools类型的资源将命名为ExtraNamespace.Tools.fr.resx.Thank Tseng,在您提供了上述有关名称空间的线索之后,我重新阅读了本文并发现了这一点。我现在要做一些更改。因为它有一个空格,不能输入到.resx名称中?这是毫无意义的。如果在VS 2017中有空格或其他特殊字符,则资源编辑器会将其显示为错误,但它会正常编译、运行和解析。空间的问题可能是因为资源使用的经典方式,以及生成的编译/设计时间的恒定性。谢谢,我没有意识到这一点。尽管无法找到我的资源,但我的方法是否有任何明显的错误?Dunno,在windows下也有类似的问题,我创建的资源的大小写是
de
,而不是Startup.cs中定义的
de
,它不会接受。因此,可以检查文件系统的拼写(而不是项目视图中的显示名称)。还要确保名称空间是正确的,即ViewModelValidator是否位于文档中的ViewModel名称空间(这可能是奇怪的命名约定):如果目标类的名称空间与程序集名称不同,则需要完整的类型名称。例如,在示例项目中,ExtraNamespace.Tools类型的资源将命名为ExtraNamespace.Tools.fr.resx.Thank Tseng,在您提供了上述有关名称空间的线索之后,我重新阅读了本文并发现了这一点。我现在要做些改变。