我试图在以下项目结构中使用Asp.Net Core创建Razor类库:
我在我的Web应用程序中使用了这些设置,以便在 Startup
类中进行本地化:
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1)
.AddViewLocalization(
LanguageViewLocationExpanderFormat.Suffix,
opts => { opts.ResourcesPath = "Resources"; })
.AddDataAnnotationsLocalization();
services.Configure<RequestLocalizationOptions>(
opts =>
{
var supportedCultures = new[]
{
new CultureInfo("en-US"),
new CultureInfo("en")
};
opts.DefaultRequestCulture = new RequestCulture("en");
opts.SupportedCultures = supportedCultures;
opts.SupportedUICultures = supportedCultures;
});
....
var options = app.ApplicationServices.GetService<IOptions<RequestLocalizationOptions>>();
app.UseRequestLocalization(options.Value);
在 Index.cshtml
:
@using Microsoft.AspNetCore.Mvc.Localization
@inject IViewLocalizer Localizer
<h1>@Localizer["Title"]</h1>
不幸的是,结果只是字符串“Title” . 我无法从Razor类库中加载这些resx文件 .
如何在Razor类库中使用如上所述的本地化?
UPDATE :这是一个非常类似的用例 - https://github.com/aspnet/Localization/issues/328 - 提供了一些例子 .
1 回答
您似乎忘记使用
AddLocalization
正确配置本地化使用文档提供的详细信息
参考Globalization and localization in ASP.NET Core
AddLocalization
将本地化服务添加到服务容器 . 上面的代码还设置了"Resources"的资源路径 .AddViewLocalization
添加对本地化视图文件的支持 .AddDataAnnotationsLocalization
通过IStringLocalizer
抽象添加对本地化DataAnnotations
验证消息的支持 .如果您使用的是设置为"Resources"的
ResourcesPath
选项,则示例图像中显示的资源文件的路径遵循路径命名约定 . 这应该允许视图在"Resources"文件夹的相对路径中查找资源文件 .另一种方法是不使用
ResourcesPath
选项,并根据命名约定将.resx文件放在与视图相同的文件夹中 .根据提供的其他详细信息,表明UI项目将打包为nuget包 .
然后将资源文件打包到nuget包中,并在安装时将它们解压缩到目标项目的resources文件夹中 .
资源需要位于站点根目录中才能供视图使用,因此您需要引用
.nuspec
中的所有文件:参考Creating NuGet packages