我正在尝试在模型中定位导航属性。简单属性可以很好地工作,但是由于某些原因,我用于本地化这些属性的架构不适用于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()
};
});
这是我配置本地化的方式。然后,我创建了一个文件夹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>
...
答案 0 :(得分:1)
经过一些测试,我会说您实际上是将本地化字符串保留在错误的resx文件中。与AddressViewModel相关的本地化应该位于AddressViewModel.resx中与您的AddressViewModel相同的存储路径中,而不管AddressViewModel是CompanyViewModel的属性。
经过进一步的测试,我注意到如果名称空间与resx文件夹结构不同,则本地化将不起作用。
所以在我的示例中,我具有以下结构:
如果我的ChildViewModel不在LocalizationTest.Models.ChildModel命名空间中,则该方法不起作用。我把它放在LocalizationTest.Models中,但没有用。
答案 1 :(得分:0)
好吧,这对我来说很愚蠢,但是我还是要把它张贴出来。我的问题是我的AddressViewModel
的命名空间中有错字。不久前,我们将项目重命名,尽管我进行了搜索和替换,但我仍必须设法解决该问题。