Asp.net core AspNet核心本地化导航程序
我正在尝试在模型中本地化导航属性。简单属性工作得很好,但由于某些原因,我用于本地化这些属性的模式不适用于nav属性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
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