У меня есть веб-приложение для нескольких культур, но по некоторым причинам некоторые поля теряют свой ресурс.Я использую CI / CD и вручную внедряю, иногда это исправляет, а некоторые нет.
Странная вещь в том, что другие свойства работают хорошо, за исключением тех, которые являются int (свойства, связанные с внешними ключами), которые имеютпользовательский помощник для поля ввода, но я использую Html.LabelFor по умолчанию для всех них, оба свойства имеют атрибут display, и только те свойства int теряют ресурс, превращаясь в PropertyNameId, как в классе модели.
ПотеряПример свойства отображения (атрибуты RequiredRemoteSelect и MvcRemote являются производными от классов RequiredAttribute и Attribute):
[RequiredRemoteSelect]
[Display(Name = "Material", ResourceType = typeof(Resources.Base))]
[MvcRemote("_GetDropDownListMaterial", "Lista")]
public int MaterialId { get; set; }
Рабочее свойство
[Required]
[DataType(DataType.Currency)]
[Display(Name = "Amount", ResourceType = typeof(Resources.Base))]
public decimal Amount { get; set; }
Вот как я могу изменить культуру:
protected void Application_AcquireRequestState(object sender, EventArgs e)
{
var desiredCulture = string.Empty;
if (!string.IsNullOrEmpty(Request.Cookies["Culture"]?.Value))
{
desiredCulture = Request.Cookies["Culture"].Value;
}
else if (Request.UserLanguages?.Length > 0)
{
var culture = Request.UserLanguages.FirstOrDefault();
if (CultureHelper.AvailableCultures.Contains(culture))
{
desiredCulture = culture;
}
else
{
var neultral = CultureHelper.GetNeultralCulture(desiredCulture);
if (CultureHelper.AvailableCultures.Contains(neultral))
{
desiredCulture = neultral;
}
}
}
if (string.IsNullOrEmpty(desiredCulture))
{
desiredCulture = CultureHelper.GetDefaultCulture();
}
var cultureInfo = new CultureInfo(desiredCulture);
Thread.CurrentThread.CurrentUICulture = cultureInfo;
Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(cultureInfo.Name);
}