【发布时间】:2025-12-01 20:15:01
【问题描述】:
我有一个 ASP .NET 5 RC1 网站,我正在尝试添加本地化。 根据发现的信息,我做了以下操作
-
在 Startup.cs 的 ConfigureService 中:
- 启用本地化并将 ResourcePath 设置为“资源”
-
启用视图本地化并启用数据注释本地化
//check http://damienbod.com/2015/10/21/asp-net-5-mvc-6-localization/ services.AddLocalization(options => options.ResourcesPath = "Resources"); // Add MVC services to the services container. //check http://blogs.msdn.com/b/webdev/archive/2015/10/15/announcing-availability-of-asp-net-5-beta8.aspx services.AddMvc().AddViewLocalization().AddDataAnnotationsLocalization();
-
在配置方法fin Startup.cs
- 设置支持的文化列表
-
启用请求本地化
//check http://www.jerriepelser.com/blog/setting-thread-culture-aspnet5 //check http://damienbod.com/2015/10/21/asp-net-5-mvc-6-localization/ List<CultureInfo> supportedCultures = new List<CultureInfo>() { new CultureInfo("en"), new CultureInfo("es") }; var requestLocalizationOptions = new RequestLocalizationOptions() { SupportedCultures = supportedCultures, SupportedUICultures = supportedCultures }; app.UseRequestLocalization(requestLocalizationOptions, new RequestCulture(new CultureInfo("es"))); 在项目下创建Resources文件夹
- 为控制器创建资源。使用约定 {Project}.{Controllers}.{ControllerClassName}.{culture}.resx
- 为视图创建资源。使用约定 Views.{ViewFolder}.{ViewName}.cshtml.{culture}.resx
-
在控制器中使用 IHtmlLocalizer,并访问该项目。在这种情况下,localizer["Title"],它被发现并且工作得很好。但是,当文化设置为“es”时,它不会被找到,只会退回到默认资源。
private IHtmlLocalizer<HomeController> _htmlLocalizer; public HomeController(IOptions<PTIWebPortal.Configuration.PTIWebPortalConfiguration> pConfiguration, ILoggerFactory factory, IHtmlLocalizer<HomeController> localizer) : base(pConfiguration, factory) { this._htmlLocalizer = localizer; }
视图也是如此,它只适用于默认资源,而不适用于其他资源。
关于如何解决它的任何想法?
【问题讨论】:
-
您设置的是 Thread.CurrentCulture 还是 Thread.CurrentUICulture?另外,CultureInfo.CurrentCulture.Name 属性在加载失败时的值是多少?
-
这很奇怪,线程文化属性是正确的,并且是自动设置的,但是由于某种原因找不到非默认资源
-
区域设置的资源文件是否将“复制到输出文件夹”属性设置为“始终复制”?
-
我认为 ASP .NET 5 项目不再具有“复制到输出”功能,该选项未显示在项目下的任何文件中。
-
如果您右键单击 .resx 文件并选择属性,它应该具有此属性。 BuildAction->“嵌入式资源”。复制到输出->“始终”
标签: asp.net localization asp.net-core