【发布时间】:2019-07-30 09:27:35
【问题描述】:
我正在尝试本地化模型中的导航属性。简单属性可以正常工作,但由于某种原因,我用于本地化这些属性的架构不适用于导航属性。
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()
};
});
这就是我配置本地化的方式。然后我创建了一个文件夹 Resources 并在其中创建了一堆 .resx 文件,这些文件反映了我的模型的文件和文件夹结构。
这是我的CompanyViewModel
public class CompanyViewModel
{
[DisplayName("CompanyID")]
public int CompanyID { get; set; }
//...
public AddressViewModel Address { get; set; }
}
这是对应的AddressViewModel
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>
...
【问题讨论】:
-
你能说明你是如何在视图上渲染 AddressID 和 Line1 的吗?
标签: asp.net-core localization data-annotations navigation-properties