在C#/ WinForms中创build多语言应用程序的最佳实践?

我一直在考虑在C#中使用适合多种语言的应用程序,因为我需要在这样的小项目上工作。 我发现基本上有两种方法来做到这一点:

将表单的Localizable属性设置为true,设置Language属性,填充所有标签等,然后就完成了。 我在这里看到的主要缺点是:如何使其他东西不是表单的一部分准备好多种语言(如popup窗口,日志文件或窗口等)。

创build一个资源文件,例如“Lang.en-us.resx”,每个语言一个,例如“Lang.nl-nl.resx”,并用Strings填充。 IDE似乎为我自动生成一个类,所以在代码中我可以使用Lang.SomeText。 我看到的最大的缺点是:对于每一个表单我需要在代码中自己设置所有的标签和其他标题(而且它似乎没有数据绑定与这些资源一起工作)。

不过,我确定还有其他方法可以做到这一点。

那么,最佳做法是什么? 对于小型应用程序(几种forms,数据库连接等)最简单的是什么?对于大型应用程序最适合什么?

我一直使用多语言应用程序的资源文件。
网上有很多文章解释如何使用它们。

我用了两种不同的方法:

  • 每个表单的资源文件
  • 全局资源文件

资源文件/表单很容易实现,只需要在资源文件中input值,但是我发现这种方法难以维护,因为标签分散在整个应用程序中。

全局资源文件允许您将所有标签(图片等)集中到一个文件(每种语言)中,但是这意味着需要在表单加载中手动设置标签。 这个文件也可以用于错误消息等

味道的问题…

最后一点,我用英文和法文编写程序,使用“en”和“fr”而不是“en-US”和“fr-FR”。 不要使事情复杂化,英语(美国,英国,澳大利亚等)的不同的歧义只有一个(法国人也一样)。

我最近写了一个既有德语又有英语支持的程序。 我惊讶地发现,如果我简单地命名我的英语资源LanguageResources.resx和我的德语资源LanguageResources.de.resx,它会自动select正确的语言。 ResXFileCodeGenerator照顾好了我的一切。

请注意,两个文件中的字段是相同的,任何尚未input的德语字段都将显示在应用程序中,因为英文是最不具体的文件,语言明智的是默认文件。 当查找一个string时,它从最具体的(ex.de-DE.resx)到最不具体的(例如.resx)。

要获取您的string使用ResourceManager.GetString或ResourceManager.GetObject调用。 应用程序应该免费给你ResourceManager。

对于其他可能遇到这种情况(最后一篇文章后1年以上)的人,我是专业本地化产品的作者,这使得整个翻译过程变得非常简单。 这是一个Visual Studio插件,将从任意解决scheme中提取所有“.resx”string,并将其加载到可以使用免费的独立应用程序进行翻译的单个文件(译者可以从我的网站下载此文件)。 相同的加载项然后将翻译的string导入您的解决scheme。 非常容易使用许多内置的安全措施,大量的花里胡哨和在线帮助(你将不需要太多)。 见http://www.hexadigm.com