Сопоставить соответствующий файл ресурсов (.resx) в коде - ASP.NET MVC - PullRequest
1 голос
/ 25 апреля 2019

В приложении ASP.NET MVC хранятся следующие файлы ресурсов, в которых хранится сообщение об ошибке проверки формы для английского и испанского языков

ErrorMessages.resx - сообщения об ошибках на английском языке
ErrorMessages.sp.resx - Испанские сообщения об ошибках

В моих моделях, которым требуются System.ComponentModel.DataAnnotations Обязательные атрибуты, они помечены так:

[Required(ErrorMessageResourceType = typeof(ErrorMessages), ErrorMessageResourceName)]
public string MyProperty { get; set; }

В моем контроллере я читаю файл cookie JavaScript, который содержит выбранный пользователем язык на сайте и программно задает «CultureInfo» текущего потока и сеанс HTTP:

public ActionResult MyController() 
{
    var language = HttpContext.Request.Cookies["language"].Value;

    if(language.Equals("english")) 
    {
        HttpContext.Session["culture"] = "en-US";
        Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US");
    }
    else 
    {
        HttpContext.Session["culture"] = "es-US";
        Thread.CurrentThread.CurrentCulture = new CultureInfo("es-US");
    }
}  

Как установить соответствующий файл ресурса после изменения значения CultureInfo?

Ответы [ 2 ]

1 голос
/ 25 апреля 2019

Используя предложение @Koryakinp, я изменил код контроллера следующим образом:

var language = HttpContext.Request.Cookies["language"].Value;

if(language.Equals("english"))
{
    HttpContext.Session["culture"] = "en-US";
    Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo("en-US");
}

Кроме того, мне пришлось реструктурировать файлы .resx.Я создал .resx с именем «ErrorMessages» в качестве базового .resx и переименовал существующие .resx файлы:

ErrorMessages.resxErrorMessages.en-US.resxErrorMessages.es-US.resx

1 голос
/ 25 апреля 2019

Испанский файл .resx должен быть * .es.resx, а не * .sp.resx.

Чтобы разрешить переводы из соответствующего файла .resx , необходимо назначить Thread.CurrentThread.CurrentUICulture, а не Thread.CurrentThread.CurrentCulture

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...