我有一堆用户界面元素,它们会重复使用翻译后的字词,例如日语,法语,德语等带有“单击此处”或“查看更多”的按钮。
是否可能有resx文件,我可以在其中存储这些术语并在任何地方重复使用,而不仅是在它所针对的页面(和文化)上?
答案 0 :(得分:1)
此答案说明了如何使用.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文件与其他特定于视图的资源文件放在同一目录中。)