我的MVC项目中有以下两个文件:

我在我的global.asax中设置了这样的文化:
Thread.CurrentThread.CurrentUICulture = new CultureInfo("de-DE");在Visual的即时窗口中,我可以看到在呈现视图时,Thread.CurrentThread.CurrentUICulture的值是“DE”。
这让我想到了我的观点:
@Html.Raw(CurrentUICultureContent.ce_landingPage_welcomeText)问题是,它只呈现来自CurrentUICultureContent.resx的文本,而不呈现来自CurrentUICultureContent.de.resx的文本,即使CurrentUICulture设置为“DE”。
注意:我也尝试过将文件名更改为CurrentUiCultureContent.de-DE.resx,但这似乎也不起作用。
编辑:--我在视图页面中放置了一个断点,并在即时窗口中检查了CurrentUICulture的值;但是它仍然没有从"de-DE.resx“文件中获取文本:
System.Threading.Thread.CurrentThread.CurrentUICulture {de-DE}
Calendar: {System.Globalization.GregorianCalendar}
CompareInfo: {CompareInfo - de-DE}
CultureTypes: SpecificCultures | InstalledWin32Cultures | FrameworkCultures
DateTimeFormat: {System.Globalization.DateTimeFormatInfo}
DisplayName: "German (Germany)"
EnglishName: "German (Germany)"
IetfLanguageTag: "de-DE"
IsNeutralCulture: false
IsReadOnly: false
KeyboardLayoutId: 1031
LCID: 1031
Name: "de-DE"
NativeName: "Deutsch (Deutschland)"
NumberFormat: {System.Globalization.NumberFormatInfo}
OptionalCalendars: {System.Globalization.Calendar[1]}
Parent: {de}
TextInfo: {TextInfo - de-DE}
ThreeLetterISOLanguageName: "deu"
ThreeLetterWindowsLanguageName: "DEU"
TwoLetterISOLanguageName: "de"
UseUserOverride: true为什么它返回英语而不是预期的德语资源文件?
我还需要做点什么才能让这件事起作用吗?
发布于 2014-11-20 13:43:28
对不起,这里的问题是,我们正在手动加载程序集(影子复制程序集),而现有的逻辑没有将resource.DLL放在正确的文件夹中。.NET期望将resource.DLL放置在相应的区域性文件夹中;即:
一旦我更新了逻辑以创建区域性的影子复制文件夹,.NET就会选择正确的资源文件。
而且,我指定文化的方式也有问题。显然,必须这样做:
Thread.CurrentThread.CurrentUICulture = CultureInfo.CreateSpecificCulture("de-DE");发布于 2014-11-14 23:35:11
在MVC中应用多语言资源文件支持的一种方法是将资源文件标记为嵌入式资源。这样,您就可以将资源文件作为简单的类使用。
若要将资源文件标记为嵌入式资源,可以执行以下操作,如下图所示:
Public。



请注意,这是一个旧的代码,仍然为我工作,没有做任何根本的不同。希望这在一定程度上回答了您的疑问。
编辑:,如我在下面的评论中提到的,这里是全局操作过滤器。如果这符合你的目的,请告诉我。
public class PersonalizeAttribute:ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
string language = (string)(filterContext.RouteData.Values["language"] ?? "en");
string culture = (string)(filterContext.RouteData.Values["culture"] ?? "US");
CultureInfo ci = CultureInfo.GetCultureInfo(string.Format("{0}-{1}", language, culture));
Thread.CurrentThread.CurrentCulture = ci;
Thread.CurrentThread.CurrentUICulture = ci;
}
}
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.Add(new HandleErrorAttribute());
filters.Add(new PersonalizeAttribute());
}是的,我从URL中读取了区域性信息(您也可以使用Server变量来掌握用户的首选区域性)。
routes.MapRoute(
name: "",
url: "{language}-{culture}/{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional, language = "en", culture = "US" }
);发布于 2014-11-20 10:04:38
重写控制器的executeCore()并设置这两个
Thread.CurrentThread.CurrentCulture and Thread.CurrentThread.CurrentUICulture构建完成后,请确保MVC项目的bin文件夹中有相应的资源文件,并确保您有一个安装程序脚本来获取这些文件,这样您在测试环境中就不会有任何问题。
祝你好运。
https://stackoverflow.com/questions/26936210
复制相似问题