我应该如何本地化可插拔组件

时间:2009-10-01 14:39:43

标签: .net localization internationalization pluggable

我们有一个应用程序可以动态加载来自不同dll的一些组件。这些组件具有固定名称,但我们希望向用户显示本地化名称,因此需要对名称进行本地化。

名称需要本地化的事实不是组件本身的关注点,因此我们实际上并不想使用DisplayName或LocalisedName等属性污染组件的模型,并且拥有组件的资源住在组件的dll中。但由于这些组件是可插拔的,我们无法在应用程序中使用显示名称的资源,因为当我们添加新组件时,需要更新应用程序的资源,从而使组件无法插入。

这个问题有共同的解决方案吗?我们可以看到的可能解决方案是:

1 \有一个名为display name的属性,gui代码调用它来显示名称。这可以正常工作,资源与包含该组件的程序集在同一个dll(或附属的dll)中存在。但这似乎污染了该模型,并提供了该组件不应关注的信息。

2 \让具有GUI的应用程序从其自己的资源文件中查找指定组件的资源。这失败是因为当添加包含新动态加载组件的新程序集时,应用程序需要更新其资源。

3 \让应用程序查看组件来自组件的资源,以获取组件的本地化名称。这似乎很好,因为本地化名称存在于组件的程序集中,因此与它一起分发,但带有表示层的app启动了从组件dll查找本地化字符串,因此组件不需要知道任何有关本地化,因此其模型没有受到污染。

选项3可能吗?还有其他一些我们没有考虑过的选择吗?

...欢呼声

1 个答案:

答案 0 :(得分:0)

选项3是我要做的,我认为这是可能的。如果你知道插件的名称,可以使用反射实例化一个类。然后,您查询该类以获取LocalizedName,该插件将从其资源程序集中获取该类。我认为你了解卫星资源组件的工作原理。

#3有什么特别的东西对你不起作用吗?如果你指定了什么我可以帮助...