Если вы пытаетесь избежать с помощью жёстко прописанные строки (ключ) для поиска преобразования локализации можно создать LocalizationKeys
класс, который содержит ключи просмотра для вас. Затем вы можете воспользоваться оператором C# 6nameof
. Это поможет облегчить беспокойство «магических струн».
public static class LocalizationKeys
{
public const string AboutTitle = nameof(AboutTitle); // Note: this is "AboutTitle"
// ... other keys here
}
Тогда вы можете потреблять его везде. Одно из преимуществ заключается в том, что, поскольку это член класса, если изменения ключа вы можете использовать общие инструменты рефакторинга, чтобы безопасно заменить все ссылки на него, а не пытаться заменить глобальную строку на «магическую строку». Еще одно преимущество - вы можете использовать intellisense при доступе к классу. Полагаю, можно было бы считать это «сильно типизированным».
Вы бы потреблять его как таковые:
[Route("api/[controller]")]
public class AboutController : Controller
{
private readonly IStringLocalizer<AboutController> _localizer;
public AboutController(IStringLocalizer<AboutController> localizer)
{
_localizer = localizer;
}
[HttpGet]
public string Get()
{
return _localizer[LocalizationKeys.AboutTitle];
}
}
Если вы действительно хотите получить фантазии с C# 6 вы также можете использовать статическое использование. Это позволит вам ссылаться на члены указанного вами типа. Наконец, для простых «одиночных строк» мы можем сделать их тела выражений. Например:
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Localization;
using static Localization.StarterWeb.LocalizationKeys; // Note: static keyword
namespace Localization.StarterWeb.Controllers
{
[Route("api/[controller]")]
public class AboutController : Controller
{
private readonly IStringLocalizer<AboutController> _localizer;
public AboutController(IStringLocalizer<AboutController> localizer)
{
_localizer = localizer;
}
[HttpGet]
public string Get() => _localizer[AboutTitle]; // Note: omission of qualifier
}
}
Поддержка ресурсов resx обеспечивает локализацию и доступ к значениям, которые строго типизируются благодаря кодегену, который создает для вас классы. Вы можете добавить файлы ресурсов из Add> New Item в visual studio. – Oliver