【问题标题】:Why localization is not working as expected为什么本地化没有按预期工作
【发布时间】: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


【解决方案1】:

从 rc1 开始,有很多已知问题无法用于本地化。 一些已知问题与工具相关,因此如果您从命令行运行应用程序而不是从 Visual Studio 启动,则某些本地化操作会起作用。 但即使是从命令行,很多本应工作的东西也不起作用。 rc1 之后做了很多工作,最近很多localization issues 已经修复和关闭,所以在 2 月某个时间发布 rc2 之后情况应该会好很多。

【讨论】: