【问题标题】:How to provide localized resources for a nuget package?如何为 nuget 包提供本地化资源?
【发布时间】:2023-01-22 20:02:50
【问题描述】:

我正在寻找一种方法,允许 NuGet 包的使用者为返回给 HTTP API 调用者的字符串提供他们自己的本地化(通过 ASP.NET Core 中间件)。该课程名为ApiKeyAuthenticationHandler,我使用的是IStringLocalizer<ApiKeyAuthenticationHandler>

在客户端应用程序(使用包)上,我尝试过:

  • 资源\ApiKeyAuthenticationHandler.resx
  • 资源\NugetPackageNamespace.ApiKeyAuthenticationHandler.resx
  • Resources\Nuget\Package\Namespace\ApiKeyAuthenticationHandler.resx

还包括 .es.resx 变体以查看是否选择了不同的语言(客户端应用程序配置为 as documentation states),但是,这些都被忽略了。

如果我将 Resources\ApiKeyAuthenticationHandler.resx 文件添加到 NuGet 包项目本身,那么我会得到该字符串,但不是客户端应用程序中指定的字符串。

我怎样才能做到这一点,以便客户端是创建资源的人,因为这是一个公共包,我不想强​​制任何值/语言?

【问题讨论】:

    标签: c# asp.net-core localization


    【解决方案1】:

    事实证明,当您从 DI 请求 IStringLocalizer 时,类型的程序集就是用于获取资源的。

    这可以通过降低一步并使用 IStringLocalizerFactory 来实现:

    var assembly = Assembly.GetEntryAssembly()!;
    var assemblyName = new AssemblyName(assembly.FullName!);
    var localizer = _stringLocalizerFactory.Create(nameof(ApiKeyAuthenticationHandler), assemblyName.Name!);
    

    第二个参数,即使它被称为 location,也会询问包含 .resx 文件的程序集的名称——在本例中是入口程序集。

    在客户端应用程序中,可以将资源添加到主资源文件夹 (ResourcesApiKeyAuthenticationHandler.resx)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-10-09
      • 1970-01-01
      • 2011-08-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多