c# - 使用 API 管理 i18n 的最佳做法是什么?

标签 c# .net internationalization

我已经创建了一个小的助手框架,我希望它是多语言的。所以我使用 .resx 文件进行翻译。

但是,当我的框架用于具有自己的 .resx 的应用程序时,我担心卫星 dll 会变得一团糟...

所以我想知道避免出现资源 hell

的最佳做法

最佳答案

最佳做法是遵循 Microsoft 准则。因此 *.resx 文件,或者更准确地说,卫星程序集正是您应该使用的。

然而,这种方法的问题在于您如何处理依赖关系。据我了解,您不想用额外的库污染磁盘。因此,您希望您的客户只安装所需的文件,而不安装其他任何文件。

好消息是,您可以做到这一点,而且您仍然可以使用 Satellite Assemblies。您所要做的就是将程序集打包到您的 DLL 中并覆盖程序集解析事件,这样它将使用内部文件而不是在磁盘上搜索它。然而,所有优点也有缺点。当您这样做时,您的客户将不得不安装一个文件(相当大的一个),但他们将被迫从您提供的语言中进行选择。他们将无法删除任何内容,也无法在未来添加其他语言。

我希望您现在明白为什么 Satellite Assembly 方法是最好的解决方案 - 它可以让您控制本地化过程。没有更好的方法来处理这个问题,抱歉。
顺便提一句。 DLL hell 与不同客户端所需的同一库的多个版本有关。它不会发生在你的情况下。当然,额外的文件意味着额外的安装程序条目,但是人们创建合并模块的概念是有原因的。我不会为此担心太多,我只是提供框架作为合并模块,让人们自己定制它,如果他们真的必须这样做的话。

关于c# - 使用 API 管理 i18n 的最佳做法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10479348/

相关文章:

c# - MySQL C# 连接器 - 使其不使用 IPv6

javascript - i18next 中的语言变量

c# - 如何为 winforms 文本框实现类似智能感知的建议框?

c# - 如何制作带有嵌套字幕的 C# foreach?

.net - 与 .Net 和 Mono、Linux 和 Windows 的持续集成

c# - 如何检测未知并发任务的完成推送和拉取并发队列 <T>

django - 从 get_current_language 获取两个字母的语言代码

node.js - 管理数据库国际化的最佳方式

c# - 如何将 List<IEntity> 转换为 List<Entity>?

c# - log4net C# 中的方法名称