如何为视图设置回退资源文件

Bis*_*ich 7 asp.net-core-mvc asp.net-core asp.net-core-1.0 asp.net-core-localization

使用IViewLocalizer我想用多个页面上显示的单词和短语的默认或后备资源文件实现视图本地化,例如编辑,添加,删除...我不想在资源文件中添加这些重复短语它们出现的所有视图所以后备资源文件真的会派上用场,但我似乎无法找到任何有关如何做到这一点的解决方案.

目前我正在使用@inject IViewLocalizer Localizer我的视图,我@Localizer["ResourceName"]从资源文件中获取本地化的短语:

资源/浏览/ {ControllerName}/{VIEWNAME} {}的langCode的.resx

这适用于每个单独的视图和局部视图.现在我想在Resources/ViewsResources作为回退资源文件的文件夹中有一个资源文件.

因此,例如,如果我@Localizer["Edit"]在其中一个视图上说并且在" Resources/Views/{ControllerName}/{ViewName}.{langCode}.resx或"中找不到"编辑"资源Resources/Views/{ControllerName}/{ViewName}.resx,则它会回退到此默认文件,以便我可以在需要资源"编辑"的所有视图上使用此文件.

我已经尝试过,Resources/Resource.{langCode}.resx但似乎没有效果.

Dan*_*icz 3

当我开始本地化时,我也遇到过类似的问题。如果您的网站上有很多重复的短语和单词,最好将它们放入 SharedResource 文件中。

您可以通过在文件夹中创建一个SharedResource.[LANG_CODE].resx文件来完成此操作Resources。然后,您需要创建一个调用的虚拟类SharedResource并将其放在项目命名空间的根目录中。因此,如果您的项目被调用,LocalizationTest那么该类将如下所示:

namespace LocalizationTest
{
    public class SharedResource
    {
    }
}
Run Code Online (Sandbox Code Playgroud)

然后,要访问模型或视图中的共享资源,您所需要做的就是创建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();
    }
}
Run Code Online (Sandbox Code Playgroud)

或者在视图中:@inject IViewLocalizer Localizer @inject IStringLocalizer SharedLocalizer

@{
    ViewData["Title"] = SharedLocalizer["Hello!"];
}

<h1>@Localizer["Welcome message"]</h1>
Run Code Online (Sandbox Code Playgroud)

为了简洁起见,我跳过了 import 和 using 语句。

您可以在此处找到有关 SharedResource 和一般本地化的更多信息:Microsoft 文档或我在此处发布的问题的答案我的问题与解答