2017-07-18 63 views
3

我有两个项目:本地化在ASP.NET外部类库核心

  • MyWebApp - ASP.NET核心Web API
  • MyServices - .NET核心类库, 其中包含以上项目的有用服务

如何添加本地化与IStringLocalizerMyServices.resx必须位于哪里?

回答

3

一个典型的解决方案是让您的MyServices程序集返回资源键(而不是返回要在屏幕上显示的实际资源)。您可以将.resx文件作为MyWebApp的一部分,并为每个资源键拥有资源值。这样,您的MyService可以被各种UI应用程序使用,每个应用程序都有自己的资源表示。

另一种方法是将.resx文件保留为MyService本身的一部分。 MyWebApp可以加载其他程序集并从中读取资源文件。

还有一种选择是将资源保存为新程序集,然后再从MyWebApp加载它。

检查下面的SO答案,以获取有关如何从其它组件做访问.resx文件的详细信息 -

How can I read embedded .resx in different assembly

Access strings resources from embedded .resx in dll?

How to access another assembly's .resx?

+0

我说的对,把'.resx'文件放在'MyServices'的根目录就足够了吗?你是什​​么意思返回资源键? –

+0

是的,那是对的。如果您检查资源文件的Build Action,默认情况下将是Embedded Resource。所以,只要dll加载它就可以使用。 – ArunGeorge

+0

通过返回资源键,我的意思是以下 - > 当你想从MyServices返回一个错误消息,而不是返回完整的消息“功能x发生错误,情况y发生..”,你只是返回一个键(类似于Error1001或ErrorFeatureXSituationY)MyServices程序集。没有附加任何资源文件。在MyWebApp中,有一个资源文件,其中包含错误消息Error1001。这样,您的资源文件将只在您的MyWebApp中。 – ArunGeorge

0

您可以存储的.resx文件MyServices项目并创建一个方法来检索基于密钥的资源。 为了从MyServices访问IStringLocalizer,您必须安装Microsoft.Extensions.Localization.Abstractions nuget。

基本上本地化配置必须保持在MyWebApp(启动类),但MyServices你要添加的NuGet使用IStringLocalizer和创建像GetResourceValueByKey(键)的方法。可以从任何地方调用此方法MyServices项目将被引用。

 
using Microsoft.Extensions.Localization;

namespace GlobalizationLibrary { public class SharedResource:ISharedResource { private readonly IStringLocalizer _localizer;

public SharedResource(IStringLocalizer<SharedResources> localizer) { _localizer = localizer; } public string GetResourceValueByKey(string resourceKey) { return _localizer[resourceKey]; } }}