我的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值后,如何设置适当的资源文件?
答案 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