【问题标题】:Map appropriate Resource (.resx) file in code - ASP.NET MVC在代码中映射适当的资源 (.resx) 文件 - ASP.NET MVC
【发布时间】:2019-04-24 23:50:25
【问题描述】:

我的 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 值修改后如何设置合适的资源文件?

【问题讨论】:

  • 西班牙文 .resx 文件应该是 *.es.resx,而不是 *.sp.resx
  • 我将文件重命名为适当的 CultureInfo 值。感谢您的建议

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


【解决方案1】:

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

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

【讨论】:

  • 当我切换到CurrentUICulture 属性时,它仍在使用英文的ErrorMessages.resx 文件。我需要我的应用知道 CurrentUICulture = "es-US" 何时使用 ErrorMessages.sp.resx
  • 我确实让它工作了。我将我的代码修改为:Thread.CurrrentThread.CurrentUICulture = CultureInfo.GetCultureInfo("es-US");
  • @MichaelKniskern 为什么不发布答案,以便其他人也可以从中受益?
  • 我刚刚更新了这个问题,我做了什么让它工作。
  • @MichaelKniskern,您应该将其作为答案发布,而不是在问题正文中添加答​​案。
【解决方案2】:

使用@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 文件。我创建了一个名为“ErrorMessages”的 .resx 作为基础 .resx 并重命名了现有的 .resx 文件:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-26
    • 1970-01-01
    • 2015-04-17
    • 1970-01-01
    • 1970-01-01
    • 2014-02-05
    相关资源
    最近更新 更多