Этот ответ объясняет, как использовать общие ресурсы, используя основной способ .net, используя локализаторы и внедрение зависимостей.
Это подробно объясняется здесь: Глобализация и локализация в 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 в тот же каталог, что и другие файлы ресурсов, относящиеся к представлению).