使用IViewLocalizer
我想用多个页面上显示的单词和短语的默认或后备资源文件实现视图本地化,例如编辑,添加,删除......我不想添加这些重复的短语出现在它们出现的所有视图的资源文件中,所以后备资源文件真的会派上用场,但我似乎无法找到任何有关如何做到这一点的解决方案。
目前我在我的观看中使用@inject IViewLocalizer Localizer
,我从资源文件中获取了@Localizer["ResourceName"]
的本地化短语:
资源/查看/ {ControllerName} / {VIEWNAME}。{的langCode}的.resx
这适用于每个单独的视图和部分视图。现在,我希望在Resources/Views
或Resources
文件夹中有一个资源文件,作为后备资源文件。
例如,如果我在其中一个视图上说@Localizer["Edit"]
并且在Resources/Views/{ControllerName}/{ViewName}.{langCode}.resx
或Resources/Views/{ControllerName}/{ViewName}.resx
中找不到“编辑”资源,则会回退到此默认文件,我可以在需要资源“编辑”的所有视图上使用它。
我已经尝试了Resources/Resource.{langCode}.resx
,但似乎没有效果。
答案 0 :(得分:0)
当我开始本地化时,我遇到了类似的问题。如果您的网站上有很多重复的短语和文字,最好将它们放在SharedResource文件中。
您可以通过在SharedResource.[LANG_CODE].resx
文件夹中创建Resources
文件来完成此操作。然后,您需要创建一个您调用SharedResource
的虚拟类,并将其放在项目命名空间的根目录中。因此,如果您的项目被称为LocalizationTest
,那么该类看起来就像这样:
namespace LocalizationTest
{
public class SharedResource
{
}
}
然后,您在模型或视图中访问共享资源所需要做的就是创建IStringLocalizer<SharedResources>
并使用它。像这样:
public class HomeController : Controller
{
private readonly IStringLocalizer<HomeController> _localizer;
private readonly IStringLocalizer<SharedResource> _sharedLocalizer;
public HomeController(IStringLocalizer<HomeController> localizer,
IStringLocalizer<SharedResource> sharedLocalizer)
{
_localizer = localizer;
_sharedLocalizer = sharedLocalizer;
}
public IActionResult Index()
{
ViewData["message"] = _sharedLocalizer["Hello!"];
return View();
}
}
或者在视图中: @inject IViewLocalizer Localizer @inject IStringLocalizer SharedLocalizer
@{
ViewData["Title"] = SharedLocalizer["Hello!"];
}
<h1>@Localizer["Welcome message"]</h1>
为了简洁,我跳过导入和使用语句。
您可以在此处找到有关SharedResource和常规本地化的更多信息:Microsoft Documentation或回答我在此处发布的问题My questions and answers。