【问题标题】:How to obtain IStringLocalizer for specific culture (different from request)?如何获取特定文化的 IStringLocalizer(不同于请求)?
【发布时间】:2023-01-02 23:51:56
【问题描述】:

如何在 ASP.NET Core 5.0 中加载 IStringLocalizer 的实例而不更改 CurrentCultureCurrentUICulture 的值,这与请求文化不同(同时加载多个不同的本地化)?

我目前正在处理在可能与运行请求的语言环境不同的语言环境中生成文档的端点。我不想在执行过程中切换当前线程的文化。还有别的办法吗?

我看到 IStringLocalizer.WithCulture(CultureInfo) 似乎非常适合这种情况,但它已经过时了。

【问题讨论】:

  • 我们通常通过依赖注入来获取 IStringLocalizer<T>。这里是官方doc
  • 来自 DI 的 @YiyiYou 你不能同时获得多个不同的语言环境。语言环境将是管道中配置的内容。
  • @featherbits,你找到解决方案了吗?
  • @MattW 否定
  • 这太疯狂了....

标签: asp.net-core localization


【解决方案1】:

这个想法是切换当前文化(不要忘记在处理using块后返回旧文化):

public static IDisposable Use([NotNull] CultureInfo culture, CultureInfo uiCulture = null)
{
    Check.NotNull(culture, nameof(culture));

    var currentCulture = CultureInfo.CurrentCulture;
    var currentUiCulture = CultureInfo.CurrentUICulture;

    CultureInfo.CurrentCulture = culture;
    CultureInfo.CurrentUICulture = uiCulture ?? culture;

    return new DisposeAction(() =>
    {
        CultureInfo.CurrentCulture = currentCulture;
        CultureInfo.CurrentUICulture = currentUiCulture;
    });
}

然后

using (CultureHelper.Use(language.CultureName))
{
    var resourceStringInTheGivenCulture = _stringLocalizer.GetString("resource_name");
    ...
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-07
    • 1970-01-01
    • 2020-08-29
    相关资源
    最近更新 更多