为什么我的不同语言resx文件被忽略

时间:2017-04-04 14:20:14

标签: c# asp.net-mvc-4 razor

我一直following this page让我的网站支持多种文化。

代码全部编译并运行,但它似乎忽略了我的文化特定的resx文件。

现在测试非常肤浅,我只有2个资源文件; Resources.resxResources.au.resx

我的模板正在调用@Resources.PageFooter,这是两个文件中定义的唯一字符串。

如果我浏览到http://mysite/index并检查页脚,则它包含我的默认值。如果我将我的网址更改为http://mysite/au/index,那么它仍会显示默认值。但是,检查CurrentThread.CurrentUICulture和CurrentThread.CurrentCulture时,两者现在都设置为au,但它仍然在使用Resources.resx而不是Resources.au.resx

我的资源文件位于单独的文件夹资源中,如文章所示。

所以我被卡住了。

经过一番调查后,我发现如果我创建另一个resx文件(意大利语),那就行了。

所以看起来被忽略的文件是“变体”,如美式英语,澳大利亚英语等。

1 个答案:

答案 0 :(得分:1)

首先,请将public static LocalDateTime parse(String dateFromJson) { try { return LocalDateTime.parse(dateFromJson); } catch (DateTimeParseException e) { // ignore, try next format } try { return LocalDateTime.parse(dateFromJson, DateTimeFormatter.ISO_OFFSET_DATE_TIME); } catch (DateTimeParseException e) { // ignore, try next format } return LocalDate.parse(dateFromJson).atStartOfDay(); } 更改为au,因为这是澳大利亚英语的正确colture代码。

en-AU文件中,设置如下所示的Global.asax方法:

Application_BeginRequest

您需要我上面提到的void Application_BeginRequest(Object sender, EventArgs e) { string langCode = "en"; //default if (somecondition) langCode = "en-AU"; System.Threading.Thread.CurrentThread.CurrentUICulture = System.Globalization.CultureInfo.GetCultureInfo(langCode); System.Threading.Thread.CurrentThread.CurrentCulture = System.Globalization.CultureInfo.CreateSpecificCulture(langCode); } 来检查用户来自哪里 - 通过标头,Cookie,URI或您想要的任何其他方式。