我已经创建了一个小的助手框架,我希望它是多语言的。所以我使用 .resx
文件进行翻译。
但是,当我的框架用于具有自己的 .resx
的应用程序时,我担心卫星 dll 会变得一团糟...
所以我想知道避免出现资源 hell
的最佳做法最佳答案
最佳做法是遵循 Microsoft 准则。因此 *.resx 文件,或者更准确地说,卫星程序集正是您应该使用的。
然而,这种方法的问题在于您如何处理依赖关系。据我了解,您不想用额外的库污染磁盘。因此,您希望您的客户只安装所需的文件,而不安装其他任何文件。
好消息是,您可以做到这一点,而且您仍然可以使用 Satellite Assemblies。您所要做的就是将程序集打包到您的 DLL 中并覆盖程序集解析事件,这样它将使用内部文件而不是在磁盘上搜索它。然而,所有优点也有缺点。当您这样做时,您的客户将不得不安装一个文件(相当大的一个),但他们将被迫从您提供的语言中进行选择。他们将无法删除任何内容,也无法在未来添加其他语言。
我希望您现在明白为什么 Satellite Assembly 方法是最好的解决方案 - 它可以让您控制本地化过程。没有更好的方法来处理这个问题,抱歉。
顺便提一句。 DLL hell 与不同客户端所需的同一库的多个版本有关。它不会发生在你的情况下。当然,额外的文件意味着额外的安装程序条目,但是人们创建合并模块的概念是有原因的。我不会为此担心太多,我只是提供框架作为合并模块,让人们自己定制它,如果他们真的必须这样做的话。
关于c# - 使用 API 管理 i18n 的最佳做法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10479348/