gpt4 book ai didi

c# - WinForms 应用程序的正确本地化

转载 作者:IT王子 更新时间:2023-10-29 04:05:09 26 4
gpt4 key购买 nike

我有一个 WinForms我想翻译成多种语言的应用程序。但是,我没有任何本地化 WinForms 的经验。应用程序,我发现关于这个主题的信息非常矛盾。

基本上,我想要的是:

  • 在源代码中,每种语言我只需要一个文件
  • 此文件在编译时被编译到主应用程序中——构建应用程序后没有附属程序集或外部数据文件
  • 用户可以选择语言,我不需要/希望根据操作系统自动检测
  • 这应该主要包含stringsints , 还有一个 CultureInfo

我见过的大多数解决方案都有一个 .resx文件 per Form和/或外部卫星组件。

  • 我必须自己动手吗?
  • 或者框架中已经有什么东西了?

.net Framework 3.5 SP1如果这很重要。

编辑:

在大多数情况下,Visual Studio 已经提供了我想要的支持,但有两个问题。当我设置 Form.Localizabletrue我有这个很好Designer支持,但这会生成一个 resxForm .在 InitializeComponent 中手动覆盖它的想法失败是因为它是设计师编写的代码,会定期被覆盖。

理论上,我只想:

  • a) 覆盖 ComponentResourceManager 的创建将其指向我的全局 resx
  • b) 将调用更改为 ApplyResources到需要 CultureInfo 的过载作为第三个参数。

似乎我必须向我的构造函数添加一个函数调用,该函数调用在 InitializeComponent() 之后被调用并覆盖其行为。这看起来非常低效,但 Visual Studio 在警告触摸 InitializeComponent() 时是正确的.

此刻,我确实在滚动自己的WinForms localization Framework ...

最佳答案

我刚刚完成了一个具有类似问题的 C# .Net 3.5 项目。我们正在为现有的 8 种语言(包括英语)的多语言应用程序编写 WinForms 插件。

我们是这样做的:

  1. 使用默认语言英语创建我们所有的表单和 UI。

  2. 将我们所有的内部字符串放在资源文件中(不直接绑定(bind)到表单的内容,如自定义错误消息和对话框标题等)

完成大部分工作和测试后,我们将其本地化。

  1. 每个表单都有一个 .resx 文件,但这是空的。我们将属性“Localizable”设置为 true,.resx 文件中填充了按钮大小和字符串等内容。

  2. 对于其他每种语言,我们更改了表单上的“语言”属性。我们选择了每种语言的基本版本,例如:“西类牙语”而不是“西类牙语(智利)”等,这样我认为它适用于所有“西类牙语”方言。

  3. 然后我们遍历每个控件,翻译其文本并根据需要调整大小。这为每种语言和表单组合创建了一个 .resx。

对于 8 种语言,我们剩下的是每种形式 8 个 .resx 和通用字符串 8 个 .resx。编译时,输出文件夹包含我们正在创建的 .dll,然后是每种语言的子文件夹,其中包含一个 .resources.dll。

我们能够通过更改语言属性来测试设计器中的 UI 版本,以检查我们是否具有正确的字符串和布局。

总而言之,一旦我们了解了它,它就非常容易且无痛。

我们不需要对表单加载进行任何自定义调整

关于c# - WinForms 应用程序的正确本地化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1251225/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com