通过resx进行的本地化不适用于非特定资源文件

时间:2018-07-17 07:31:52

标签: c# asp.net-core-mvc

我要把头撞在这里的墙上,想知道是否有人经过了这个

如果我使用特定区域性(在我的情况下为es-ES,则可以通过resx在ASP.NET Core MVC应用程序上进行本地化。

我有一个Resources\Localization.es-ES.resx文件,带有一个伪Localization类(用于共享翻译资源),并且在区域性为es-ES时它可以工作。现在,我希望该文件适用于所有es情况,因此我认为只需将其重命名为Localization.es.resx即可,但这根本没有用。

我的配置是:

services.AddLocalization(options => options.ResourcesPath = "Resources");
services.Configure<RequestLocalizationOptions>(
  opts =>
  {
      var supportedCultures = new[]
      {
          new CultureInfo("en-US"),
          new CultureInfo("en"),
          new CultureInfo("es-ES"),
          new CultureInfo("es"),
      };
      opts.DefaultRequestCulture = new RequestCulture("en-US");
      opts.SupportedCultures = supportedCultures;
      opts.SupportedUICultures = supportedCultures;
  });

/* ... */

services.AddMvc()
      .AddViewLocalization(LanguageViewLocationExpanderFormat.Suffix)

并且:

app.UseRequestLocalization();

我正在注入IStringLocalizer<Localization>并将其用于翻译。正确提取了我用于测试的查询字符串(?culture=es?culture=es-ES),然后再次:当我在资源中使用特定的es-ES文化时,所有这些都有效文件名,但当我切换到非特定文件名(仅为es)时就没有。

这很重要,因为此应用程序将专门用于其他es-??文化,而我不想为每个文化都复制一个资源文件。

文档专门说(在https://docs.microsoft.com/en-us/aspnet/core/fundamentals/localization?view=aspnetcore-2.1):

  

想象一下,您的站点使用文化“ fr-CA”收到了“欢迎”资源的请求。本地化系统按顺序查找以下资源,然后选择第一个匹配项:

     

Welcome.fr-CA.resx

     

Welcome.fr.resx

     

Welcome.resx(如果NeutralResourcesLanguage是“ fr-CA”)

这种后备行为似乎对我不起作用。也许我缺少一些配置?

0 个答案:

没有答案