Asp.net core AspNet核心本地化导航程序

Asp.net core AspNet核心本地化导航程序,asp.net-core,localization,data-annotations,navigation-properties,Asp.net Core,Localization,Data Annotations,Navigation Properties,我正在尝试在模型中本地化导航属性。简单属性工作得很好,但由于某些原因,我用于本地化这些属性的模式不适用于nav属性 services.AddLocalization(opts => { opts.ResourcesPath = "Resources"; }); services.AddMvc() .SetCompatibilityVersion(CompatibilityVersion.Version_2_1) .AddViewLocalization( L

我正在尝试在模型中本地化导航属性。简单属性工作得很好,但由于某些原因,我用于本地化这些属性的模式不适用于nav属性

services.AddLocalization(opts => { opts.ResourcesPath = "Resources"; });
services.AddMvc()
    .SetCompatibilityVersion(CompatibilityVersion.Version_2_1)
    .AddViewLocalization(
        LanguageViewLocationExpanderFormat.Suffix,
        opts => { opts.ResourcesPath = "Resources"; })
    .AddDataAnnotationsLocalization();
services.Configure<RequestLocalizationOptions>(
opts =>
{
    var supportedCultures = new List<CultureInfo>
    {
        new CultureInfo("en-US"),
        new CultureInfo("de-DE")
    };

    opts.DefaultRequestCulture = new RequestCulture("de-DE");
    opts.SupportedCultures = supportedCultures;
    opts.SupportedUICultures = supportedCultures;
    opts.RequestCultureProviders = new List<IRequestCultureProvider>
    {
        new QueryStringRequestCultureProvider(),
        new CookieRequestCultureProvider()
    };
});
这就是相应的
AddressViewModel

public class CompanyViewModel
{
    [DisplayName("CompanyID")]
    public int CompanyID { get; set; }

    //...

    public AddressViewModel Address { get; set; }
}
public class AddressViewModel
{
    [DisplayName("AddressID")]
    public int AddressID { get; set; }

    [DisplayName("Line1")]
    [Required(ErrorMessage = "Required")]
    public string Line1 { get; set; }

    //...
}
似乎无论我做什么,当我在视图中显示Address属性时,它都不会显示本地化字符串,只显示属性名。我尝试过使用多种命名方案,如
Address.Lin1
,或创建
CompanyViewModel.Address.de-de.resx
等资源。但我所做的任何事情都不会显示除属性名称以外的任何内容

有人能给我指一下正确的方向吗

编辑:以下是如何渲染AddressViewModel:

<p>
    <input type="hidden" asp-for="@Model.Address.AddressID" />
    <div class="card">
        <div class="card-header">
            @Localizer["AddressDetails"]
        </div>
        <div class="card-body">
            <dl class="form-row">
                <dt class="form-group col-md-6">
                    @Html.DisplayNameFor(model => model.Address.Line1)
                </dt>
                <dd class="form-group col-md-6">
                    @Html.DisplayFor(model => model.Address.Line1)
                </dd>
                ...

@定位器[“地址详细信息”]
@DisplayNameFor(model=>model.Address.Line1)
@DisplayFor(model=>model.Address.Line1)
...

经过一些测试后,我想说您实际上在错误的resx文件中保留了本地化字符串。与AddressViewModel相关的本地化应该位于AddressViewModel.resx中存储AddressViewModel的同一路径中,而不管AddressViewModel是CompanyViewModel的属性

通过进一步的测试,我注意到,如果名称空间与resx文件夹结构不同,本地化将不起作用

因此,在我的示例中,我有以下结构:


如果我的ChildViewModel不在LocalizationTest.Models.ChildModel命名空间中,则该选项不起作用。我把它放在本地化测试的第一位。模型和它都不起作用。

好吧,我太傻了,但我还是要发布它。我的问题是我的
AddressViewModel
的名称空间中有一个输入错误。不久前我们重新命名了我们的项目,虽然我做了搜索和替换,但我一定还是设法搞砸了

你能展示一下你是如何在视图上呈现AddressID和Line1的吗?我已经这样做了
AddressViewModel.de-de.resx
位于
Resources
文件夹的
AddressManagement
子文件夹中。我已经更新了我问题中的图片来澄清这一点。顺便说一句,你说你做了一些测试。您是否设法使DataAnnotation本地化与nav属性一起工作?如果是的话,你能以某种方式分享代码吗?嘿,是的,我的例子做得很好。我可以稍后再和你分享。不过我使用的有点不同,我使用了和@Html.LabelFor(m=>m.Address.AddressID),两者都有效,我解决了这个问题。愚蠢的我在AddressViewModel的名称空间中输入了一个错误。我向上帝发誓…XD