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

时间:2020-03-06 14:35:03  来源:igfitidea点击:

我一直在研究使C语言适合多种语言的应用程序,因为我需要在这种情况下进行一个小项目。我发现基本上有两种方法可以做到这一点:

将表单的Localizable属性设置为true,设置Language属性,填充所有标签等,即可完成操作。我在这里看到的主要缺点是:如何制作不属于表单的其他内容以支持多种语言(例如弹出窗口,日志文件或者窗口等)。

创建一个资源文件,例如" Lang.en-us.resx",并为每种语言创建一个资源文件,例如" Lang.nl-nl.resx",并用字符串填充。 IDE似乎会自动为我生成一个类,因此在代码中我只能使用Lang.SomeText。我在此看到的最大缺点是:对于每种形式,我都需要自己在代码中设置所有标签和其他标题(并且似乎数据绑定不适用于这些资源)。

但是,我敢肯定,还有其他方法可以做到这一点。

那么,最佳实践是什么?对于小型应用程序(几种形式,数据库连接等),最简单的方法是什么?对于大型应用程序,最合适的扩展方法是什么?

解决方案

我一直将资源文件用于多语言应用程序。
网上有很多文章介绍了如何使用它们。
我使用了两种不同的方法:

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

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

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

口味问题...

最后一点,我用英语和法语编写程序,我使用" en"和" fr",而不是" en-US"和" fr-FR"。不要使事情复杂化,英语(美国,英语,澳大利亚等)的不同语言几乎没有什么区别,只能使用一种(法语也是如此)。

我最近写了一个德语和英语支持的程序。我很惊讶地发现,如果我只是简单地命名我的英语资源LanguageResources.resx和我的德语资源LanguageResources.de.resx,它将自动选择正确的语言。 ResXFileCodeGenerator为我照顾了这一切。

请注意,两个文件中的字段相同,并且任何尚未输入的德语字段都将以英语显示在应用程序中,因为最明确的文件语言是默认文件。查找字符串时,它从最具体的字符串(例如.de-​​DE.resx)变为最不具体的字符串(例如.resx)。

要获取字符串,请使用ResourceManager.GetString或者ResourceManager.GetObject调用。该应用程序应免费提供ResourceManager。