背景

项目安装一些文件,其中包含定义 UserControl 的所有元素 - 一些用户源、用于设计器代码的 CodeCompileUnit 和 resx 文件。在运行时,这些文件被编译成程序集,并且这些类由我们的主应用程序使用(程序集仅在必要时更新)。

问题

该项目必须全球化,作为该过程的一部分,需要提供这些文件的本地化。两个选项是允许包含不同区域设置的附加 resx 文件(在同一文件中或作为附加并排文件),这些文件可以编译到主程序集的附属程序集中,或者提供每种受支持语言的每个完整文件,为受支持的语言编译适当的集。

  • 有人还有其他值得考虑的选择吗?
  • 我提出的任一解决方案可能存在哪些固有问题?

限制/免责声明
我知道情况不太理想,在某些领域可以做出更好的选择(例如从一开始就全球化),但在项目的此时点无法更改。我感谢您提供的任何建议、解决方案或线索。谢谢。

有帮助吗?

解决方案

为每种文化创建单独的附属程序集。这样做有两个好处:

  • 您可以一次性构建所有程序集,并为每个版本号和文件名组合提供一个明确的文件,而不是它 取决于文化。
  • 您可以在同一安装中拥有多个程序集,并根据系统语言或用户首选项等来使用要使用的语言。这将使开发和测试变得更加容易,因为您不需要仅仅为了更改语言而不断重建和复制文件。
  • 这就是 .NET i18n 的工作原理。虽然我不是 .NET i18n 方面的专家(“阅读 Guy Smith-Ferrier 的书”是我最好的建议!),但我通常发现,当您遵循框架的预期模型时,框架效果最好。

即使“构建卫星程序集”的最后部分是在运行时完成的(您可以在 安装 时间?)你至少仍然获得第二和第三颗子弹的优势。这也意味着如果你曾经 走更正常的路线,从提供卫星组件开始(而不是在用户的盒子上构建它们),您将需要进行更少的更改。

如果我误解了这个问题,我很抱歉......

其他提示

如果您不打算在部署后添加其他语言(至少在没有软件更新的情况下),那么我倾向于将所有其他 RESX 文件编译到您包含的附属程序集中。这样,一旦部署它们,用户就无法编辑它们。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top