我要把头撞在这里的墙上,想知道是否有人经过了这个
如果我使用特定区域性(在我的情况下为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”)
这种后备行为似乎对我不起作用。也许我缺少一些配置?