94

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

将表单的 Localizable 属性设置为 true,设置 Language 属性,填写所有标签等,就完成了。我在其中看到的主要缺点是:如何使不属于表单的其他内容为多种语言做好准备(例如弹出窗口、日志文件或窗口等)。

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

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

那么,最佳实践是什么?对于小型应用程序(一些表单、数据库连接等)来说什么是最简单的,对于大型应用程序来说什么是最适合的?

4

3 回答 3

20

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

我使用了两种不同的方法:

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

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

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

口味问题...

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

于 2008-09-23T07:49:18.140 回答
9

我最近编写了一个同时支持德语和英语的程序。我惊讶地发现,如果我简单地命名我的英语资源 LanguageResources.resx 和我的德语资源 LanguageResources.de.resx,它会自动选择正确的语言。ResXFileCodeGenerator 为我处理了这一切。

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

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

于 2008-09-23T13:28:00.713 回答
6

为了其他可能遇到此问题的人的利益(上一篇文章后 1 年多),我是专业本地化产品的作者,它使整个翻译过程变得非常容易。这是一个 Visual Studio 插件,可以从任意解决方案中提取所有“.resx”字符串,并将它们加载到一个文件中,该文件可以使用免费的独立应用程序进行翻译(翻译人员可以从我的网站下载)。然后,相同的加载项会将翻译后的字符串导入您的解决方案。非常易于使用,具有许多内置的保护措施、大量的花里胡哨和在线帮助(您不需要太多)。见http://www.hexadigm.com

于 2011-03-30T01:00:22.820 回答