跨项目的.NET Core 2.0本地化

时间:2018-04-30 15:39:15

标签: .net localization core

我有两个项目: 1. WebApi 2.共同

资源文件位于WebApi中,WebApi正在调用Common。但是,Common需要从资源文件中获取字符串。我怎么能这样做?

2 个答案:

答案 0 :(得分:0)

我能够使用IStringLocalizerFactory来解析它来创建IStringLocalizer。以下是解决我问题的代码示例:

var assemblyName = Assembly.GetEntryAssembly().GetName().Name; return _localizerFactory.Create("ExceptionResource", assemblyName);

答案 1 :(得分:0)

您在业务逻辑中制作了一个资源文件,您绝对不会在业务逻辑项目和网络项目之间创建依赖关系,以便能够访问您的本地化资源。

正如你所写的,关键问题是:

<块引用>

"(...) 使用 IStringLocalizerFactory 解析它以创建 IStringLocalizer”。

一个现实生活中的例子,这可能是

example

你可以像你写的那样做,这类似于文档中的内容

https://docs.microsoft.com/en-us/aspnet/core/fundamentals/localization?view=aspnetcore-3.1#implement-a-strategy-to-select-the-languageculture-for-each-request

这是 Damien Bod 的简短手册中的一个例子

https://damienbod.com/2017/11/01/shared-localization-in-asp-net-core-mvc/

sing Microsoft.Extensions.Localization;
using System.Reflection;
 
namespace AspNetCoreMvcSharedLocalization.Resources
{
    public class LocService
    {
        private readonly IStringLocalizer _localizer;
 
        public LocService(IStringLocalizerFactory factory)
        {
            var type = typeof(SharedResource);
            var assemblyName = new AssemblyName(type.GetTypeInfo().Assembly.FullName);
            _localizer = factory.Create("SharedResource", assemblyName.Name);
        }
 
        public LocalizedString GetLocalizedHtmlString(string key)
        {
            return _localizer[key];
        }
    }
}

你实际上并不需要一个虚拟类,你也可以这样做:

using Microsoft.Extensions.Localization;

命名空间 ....Business.LocalizationService

{
    public interface ILocalizationMiddleware
    {
        public LocalizedString GetLocalizedString(string keyForResourceTable);
    }
}

using Microsoft.Extensions.Localization;
using System.Reflection;

命名空间 ....Business.LocalizationService

{
    public class LocalizationMiddleware : ILocalizationMiddleware
    {
        private readonly IStringLocalizer localizer;

        public LocalizationMiddleware(IStringLocalizerFactory factory)
        {
            localizer = factory.Create("SharedResource", Assembly.GetExecutingAssembly().FullName);
        }

        public LocalizedString GetLocalizedString(string keyForResourceTable) { return localizer[keyForResourceTable]; }
    }
}