8

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

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

资源/视图/{ControllerName}/{ViewName}.{langCode}.resx

这适用于每个单独的视图和部分视图。现在我想在Resources/ViewsorResources文件夹中有一个资源文件作为后备资源文件。

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

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

4

1 回答 1

3

当我开始进行本地化时,我遇到了类似的问题。如果您的网站上有很多重复的短语和单词,最好将它们放在 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>

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

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

于 2017-03-24T12:06:30.053 回答