【问题标题】:ASP Net core - How to implement background services localization?ASP Net core - 如何实现后台服务本地化?
【发布时间】:2020-08-21 18:49:11
【问题描述】:

here 发布的一个问题中询问有关在 ASP NET 核心应用程序中删除非活动用户的最佳实施方式。 Ian Kemp 为此建议了后台服务,我真的很喜欢这个。

现在我想知道如何在后台服务中实现本地化程序(我需要通知他们很快他们的帐户将被删除)?我可以存储有关用户在浏览我的应用程序时使用的文化的信息。我看到了一个 IStringLocalizer - WithCulture 的函数,它返回一个带有请求文化的新 IStringLocalizer。但它表明它已被弃用。有没有其他方法可以将 Localizer 实现到后台服务(同时在 DB 中使用存储的用户文化)?

【问题讨论】:

  • 不确定您所说的“本地化程序”是什么意思,但如果您想返回本地化消息,您可以使用资源文件(.resx 扩展名)并维护每种文化的资源。您可以根据线程文化从正确的文件中提取,也可以使用后面的静态代码并传递 CultureInfo 实例。
  • 我使用 resx 文件,在 ASP NET 核心中有一个 IStringLocalizer 类,它根据发送到实例的键来处理本地化字符串。定位器是实例。 Localizer["MyLocalizedString"] 根据 HttpRequest 文化从 resx 文件返回本地化字符串。但是在后台服务中,没有 HttpRequest 文化,所以我想知道如何向 IStringLocalizer(或任何建议的 Localizer)“说”我想要某种文化。另外,我看到 WithCulture 已被弃用,所以我正在寻找不同的选择。

标签: c# asp.net-core background-service asp.net-core-localization


【解决方案1】:

如果您有语言代码,那么您可以设置CultureInfo.CurrentUICulture 以通过stringLocalizer 获取本地化字符串。

    public class ResourceProvider
    {
        private readonly IStringLocalizer stringLocalizer;
        public ResourceProvider(IStringLocalizerFactory localizerFactory)
        {
            stringLocalizer = localizerFactory.Create("ResourceStrings", System.Reflection.Assembly.GetExecutingAssembly().GetName().Name);
        }

        public string GetLocalizedString(string resourceKey, string languageCode)
        {
          CultureInfo.CurrentUICulture = new CultureInfo(languageCode);
          var localizedString = stringLocalizer[resourceKey].Value;
          return localizedString;
        }
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-11-06
    • 1970-01-01
    • 2021-01-16
    • 2018-11-30
    • 1970-01-01
    • 1970-01-01
    • 2022-07-13
    • 1970-01-01
    相关资源
    最近更新 更多