有没有办法在aspnet core本地化中添加两个资源文件夹?
Is there a way to add two resource folders to aspnet core localization?
我目前正在为一个项目开发 SDK,作为一项要求,我需要添加两个资源位置。一个由 SDK 库提供,另一个由消费者应用程序提供。
目前,根据文档,这是添加本地化的方法:
services.AddLocalization(options => options.ResourcesPath = "Resources");
我正在从我的 BaseStartup
class 调用此方法,该方法将由消费者应用程序的 Startup
class 继承。所以我需要能够设置 SDK 的资源文件夹和消费者应用程序的位置。
可能是这样的:
services.AddLocalization(options =>
{
options.ResourcesPath = "SDKResources";
options.FromAssembly = sdkResourcesAssembly;
});
services.AddLocalization(options =>
{
options.ResourcesPath = "AppResources";
options.FromAssembly = appResourcesAssembly;
});
这可能吗?如果是这样,如何?如果没有,是否有解决方法?
在线查看甚至查看源代码 (https://github.com/aspnet/Localization) 都没有多大帮助。我唯一能想到的是使用 IStringLocalizerFactory
接受程序集和文件名。行得通吗?例如,添加 services.AddLocalization()
然后创建一个包装器 class,它将使用使用 IStringLocalizerFactory
?
创建的工厂为消费者应用程序提供字符串
谢谢!
我发现有两种方法可以完成,首先是添加来自不同程序集的资源:
我创建了一个基础启动 class 来处理包含我的资源 classes 的所有源程序集,然后加载它们。
serviceCollection.AddLocalization();
var resourceTypes = typeof(BaseResource<>).Assembly.GetDerivedGenericTypes(typeof(BaseResource<>));
if (typeFromResourceAssembly != null)
resourceTypes.AddRange(typeFromResourceAssembly.Assembly.GetDerivedGenericTypes(typeof(BaseResource<>)));
foreach (var resourceType in resourceTypes)
{
serviceCollection.AddScoped(resourceType, resourceType);
}
return serviceCollection;
二、通过添加不同的资源文件夹:
services.Configure<ClassLibraryLocalizationOptions>(
options => options.ResourcePaths = new Dictionary<string, string>
{
{ "ResourceClass", "ResourcesFolder" },
{ "Localization.CustomResourceClass", "Folder1/Folder2" }
}
);
我目前正在为一个项目开发 SDK,作为一项要求,我需要添加两个资源位置。一个由 SDK 库提供,另一个由消费者应用程序提供。
目前,根据文档,这是添加本地化的方法:
services.AddLocalization(options => options.ResourcesPath = "Resources");
我正在从我的 BaseStartup
class 调用此方法,该方法将由消费者应用程序的 Startup
class 继承。所以我需要能够设置 SDK 的资源文件夹和消费者应用程序的位置。
可能是这样的:
services.AddLocalization(options =>
{
options.ResourcesPath = "SDKResources";
options.FromAssembly = sdkResourcesAssembly;
});
services.AddLocalization(options =>
{
options.ResourcesPath = "AppResources";
options.FromAssembly = appResourcesAssembly;
});
这可能吗?如果是这样,如何?如果没有,是否有解决方法?
在线查看甚至查看源代码 (https://github.com/aspnet/Localization) 都没有多大帮助。我唯一能想到的是使用 IStringLocalizerFactory
接受程序集和文件名。行得通吗?例如,添加 services.AddLocalization()
然后创建一个包装器 class,它将使用使用 IStringLocalizerFactory
?
谢谢!
我发现有两种方法可以完成,首先是添加来自不同程序集的资源:
我创建了一个基础启动 class 来处理包含我的资源 classes 的所有源程序集,然后加载它们。
serviceCollection.AddLocalization();
var resourceTypes = typeof(BaseResource<>).Assembly.GetDerivedGenericTypes(typeof(BaseResource<>));
if (typeFromResourceAssembly != null)
resourceTypes.AddRange(typeFromResourceAssembly.Assembly.GetDerivedGenericTypes(typeof(BaseResource<>)));
foreach (var resourceType in resourceTypes)
{
serviceCollection.AddScoped(resourceType, resourceType);
}
return serviceCollection;
二、通过添加不同的资源文件夹:
services.Configure<ClassLibraryLocalizationOptions>(
options => options.ResourcePaths = new Dictionary<string, string>
{
{ "ResourceClass", "ResourcesFolder" },
{ "Localization.CustomResourceClass", "Folder1/Folder2" }
}
);