Есть ли способ иметь "общие" файлы resx? - PullRequest
0 голосов
/ 20 декабря 2018

У меня есть набор элементов пользовательского интерфейса, которые повторно используют переведенные термины, например, кнопки «нажмите здесь» или «просмотреть больше» на японском, французском, немецком и т. Д.

Возможно иметьФайлы resx, в которых я могу хранить такие термины и использовать их где угодно, а не только на странице (и культуре), против которой они названы?

1 Ответ

0 голосов
/ 20 декабря 2018

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...