这个答案解释了如何使用 .net 核心方式使用本地化程序和依赖注入来使用共享资源。
这里有详细解释:Globalization and localization in ASP.NET Core
基本上,您可以在项目中的任何位置创建一个空类,并使用您想要用于对资源进行分组的名称:
public class SharedResource
{
}
你也可以有多个类来拥有不同的组,比如
public class CommonButtonTexts
{
}
public class CommonErrorMessages
{
}
如果您想使用文本,请引用给定类的 Localizer。 C# 代码中的示例,例如 Controller 或一些辅助类:
public class HomeController : Controller
{
private readonly IStringLocalizer<SharedResource> _sharedLocalizer;
private readonly IStringLocalizer<CommonButtonTexts> _commonButtonTextsLocalizer;
private readonly IStringLocalizer<CommonErrorMessages> _commonErrorMessagesLocalizer;
// Localizers are created via Dependency Injection
public HomeController(IStringLocalizer<SharedResource> sharedLocalizer, IStringLocalizer<CommonButtonTexts> commonButtonTextsLocalizer,
IStringLocalizer<CommonErrorMessages> commonErrorMessagesLocalizer)
{
_sharedLocalizer = sharedLocalizer;
_commonButtonTextsLocalizer = commonButtonTextsLocalizer;
_commonErrorMessagesLocalizer = commonErrorMessagesLocalizer;
}
public IActionResult Index()
{
string someString = _sharedLocalizer["ProductName"];
string yesButtonCaption = _commonButtonTextsLocalizer["Yes"];
string overworkedError = _commonErrorMessagesLocalizer["The programmer was overworked and didn't finish this code."];
// Do something with the strings
return View();
}
}
从 Razor 视图使用它的示例:
@using Microsoft.Extensions.Localization;
@inject IStringLocalizer<SharedResource> SharedLocalizer
@inject IStringLocalizer<CommonButtonTexts> CommonButtonTextsLocalizer
@inject IStringLocalizer<CommonErrorMessages> CommonErrorMessagesLocalizer
<p>@SharedLocalizer["ProductName"]</p>
<p>@CommonButtonTextsLocalizer["Yes"]</p>
<p>@CommonErrorMessagesLocalizer["The programmer was overworked and didn't finish this code."]</p>
然后将根据我们使用的空类在资源文件中查找翻译。例如,在上面的示例中,英语的翻译将从SharedResource.en.resx、CommonButtonTexts.en.resx 和CommonErrorMessages.en.resx 中获取。 (将 *.resx 文件与其他特定于视图的资源文件放在同一目录中)。