在代码中映射适当的Resource(.resx)文件-ASP.NET MVC

时间:2019-04-24 23:50:25

标签: c# asp.net-mvc-5 cultureinfo resx

我的ASP.NET MVC应用程序中具有以下资源文件,用于存储英语和西班牙语的表单验证错误消息

ErrorMessages.resx-英文错误消息
ErrorMessages.sp.resx-西班牙语错误消息

在需要System.ComponentModel.DataAnnotations必需属性的模型中,它们被标记为:

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

在我的控制器中,我正在读取一个JavaScript cookie,其中包含用户在网站上选择的语言,并以编程方式设置当前线程和HTTP会话的“ CultureInfo”:

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 个答案:

答案 0 :(得分:1)

西班牙语.resx文件应为* .es.resx,而不是* .sp.resx。

为了从适当的 .resx 文件解析翻译,您需要分配Thread.CurrentThread.CurrentUICulture,而不是Thread.CurrentThread.CurrentCulture

答案 1 :(得分:1)

使用@Koryakinp建议,我将控制器代码修改为以下内容:

<div class="form-group">
  <div class="card-body">
    <form
      (ngSubmit)="onOrganize(f)"
      #f="ngForm">
      <label for="restaurants">Choose a restaurant:</label>
      <input list="restaurantList" id="restaurants" ngModel name="naam"/>
      <datalist id="restaurantList" name="naam">
        <option id="mcdonalds" name="naam" type="text">Mcdonalds</option>
        <option id="kentuckyfriedchicken" name="naam">Kentucky Fried Chicken</option>
        <option id="burgerking" name="naam">Burger King</option>
        <option id="dominospizza" name="naam">Domino's pizza</option>
      </datalist>

      <div class="form-group">
        <label>Address</label>
        <input
          type="text"
          class="form-control form-control-lg rounded-0"
          ngModel
          name="adres"
          required
          address>
      </div>

      <button type="submit"
              class="btn btn-primary btn-lg float-right"
              [disabled]="!f.valid" (click)="btnClick1();">Make
      </button>

    </form>
  </div>

此外,我还必须重组.resx文件。我创建了一个名为“ ErrorMessages”的.resx作为基本.resx,并重命名了现有的.resx文件:

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