【问题标题】:Is there a way to have "general" resx files?有没有办法拥有“一般”的 resx 文件?
【发布时间】:2018-12-20 14:39:47
【问题描述】:

我有一堆重复使用翻译术语的用户界面元素,例如日语、法语、德语等带有“单击此处”或“查看更多”的按钮。

是否有可能有 resx 文件,我可以在其中存储这些术语并在任何地方重复使用,而不仅仅是在它命名的页面(和文化)上?

【问题讨论】:

  • 我是否正确理解了您仍然需要针对不同语言的单独资源文件的问题,即 1 个带有德语“查看更多”的文件和 1 个带有日语“查看更多”的文件?
  • 您好,是的,没错。感谢您的回答,我会试一试并报告。

标签: c# .net razor .net-core


【解决方案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.resxCommonButtonTexts.en.resxCommonErrorMessages.en.resx 中获取。 (将 *.resx 文件与其他特定于视图的资源文件放在同一目录中)。

【讨论】:

    猜你喜欢
    • 2012-11-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-12
    • 2021-04-20
    • 2022-08-24
    • 2011-02-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多