我有一个WinForms应用程序,我想将其翻译成多种语言。但是,我没有任何本地化WinForms应用程序的经验,并且我发现关于此主题的信息非常矛盾。WinForms应用程序的正确本地化
基本上,我想要的是:
- 在源代码中,我想每个语言
- 此文件被上编译编译到主应用程序只有一个文件 - 没有卫星组件或外部数据文件构建应用程序
- 用户可以选择语言后,我并不需要/想自动检测基于该操作系统
- 这应该主要包含字符串和整数,但也有CultureInfo的
我见过的大多数解决方案的每个表单和/或外部附属程序集都有一个.resx文件。
我必须推出自己的?或者框架中是否有某些东西?
.net Framework 3.5 SP1如果有问题。
编辑:大多数情况下,Visual Studio已经提供了我想要的支持,但有两个问题。当我将Form.Localizable设置为true时,我有这个不错的设计器支持,但是这会为每个表单生成一个resx。在InitializeComponent中手动覆盖它的想法失败了,因为它是由设计师编写的代码,它们会被定期覆盖。理论上,我只想a)重写ComponentResourceManager的创建,将其指向我的全局resx; b)将调用ApplyResources更改为以CultureInfo作为第三个参数的重载。
看起来好像我不得不向我的构造函数添加一个函数调用,它在InitializeComponent()之后调用并覆盖它的行为。这似乎非常低效,但Visual Studio正确地警告触摸InitializeComponent。目前,我的确在推出我自己的WinForms本地化框架...
不是很确定,如果你要求的 '适当的'为一种“非常习惯”的本地化方式。 – 2009-08-09 11:59:19
“每个表格一个.resx,每个语言和组件的一个卫星组件”有什么问题?这就是.NET的工作原理 - 如果你不喜欢这样,恐怕你必须自己推出很多代码。 – 2009-08-09 12:00:06
错误的意思是,“一个.resx per form”(对于所有不是表格的组成部分,至少有一个)成倍增长,而不是线性增长,如果新的/更正的本地化是每个语言一个汇编只是更多的混乱只允许应用程序的新版本。另请参阅http://redsolo.blogspot.com/2006/11/localisation-gone-wrong-in-c.html – 2009-08-09 12:06:58