我一直在研究在C#中创建适用于多种语言的应用程序,因为我需要处理一个小项目,在这种情况下。我基本上找到了两种方法:
将表单的Localizable属性设置为true,设置语言属性,填充所有标签等,然后“完成”。我在这里看到的主要缺点是:如何制作其他不属于多种语言表单的内容(例如弹出窗口,日志文件或窗口等)。
创建一个资源文件,例如'Lang.en-us.resx'和每种语言一个,例如'Lang.nl-nl.resx'并用字符串填充它。 IDE似乎自动为我生成一个类,所以在代码中我可以使用Lang.SomeText。我在这里看到的最大缺点是:对于每个表单,我需要在代码中自己设置所有标签和其他字幕(并且似乎数据绑定不适用于这些资源)。
但是,我确信还有其他方法可以做到这一点。
那么,最佳做法是什么?对于小型应用程序(一些形式,数据库连接等)以及哪种规模最适合大型应用程序,最简单的是什么?
答案 0 :(得分:20)
我一直将资源文件用于多语言应用程序
网上有很多文章解释了如何使用它们
我使用了两种不同的方式:
资源文件/表单更容易实现,您只需要在资源文件中输入值,但我发现这种方法难以维护,因为标签分散在整个应用程序中。
全局资源文件允许您将所有标签(图像等)集中在一个文件中(每种语言),但这意味着在表单加载中手动设置标签。此文件也可用于错误消息等。
品味问题......
最后一点,我用英语和法语编写程序,我使用“en”和“fr”而不是“en-US”和“fr-FR”。不要让事情复杂化,不同的英语(美国,英国,澳大利亚等)的差异很少,只能使用一个(法语也是如此)。
答案 1 :(得分:9)
我最近写了一个包含德语和英语语言支持的程序。我很惊讶地发现,如果我只是简单地命名我的英语资源LanguageResources.resx和我的德语资源LanguageResources.de.resx,它会自动选择正确的语言。 ResXFileCodeGenerator为我完成了所有工作。
请注意,两个文件中的字段相同,任何尚未输入的德语字段都会在应用程序中显示为英语,因为最不具体的文件语言是默认文件。在查找字符串时,它会从最具体的(ex .de-DE.resx)变为最不具体的(例如.resx)。
要获取字符串,请使用ResourceManager.GetString或ResourceManager.GetObject调用。应用程序应该免费为您提供ResourceManager。
答案 2 :(得分:5)
为了其他可能遇到此问题的人(在上一篇文章后1年多),我是专业本地化产品的作者,使整个翻译过程变得非常简单。它是一个Visual Studio加载项,它将从任意解决方案中提取所有“.resx”字符串,并将它们加载到一个文件中,该文件可以使用免费的独立应用程序进行翻译(翻译人员可以从我的网站下载)。然后,相同的加载项会将已翻译的字符串导回到您的解决方案中。非常容易使用许多内置安全措施,大量的铃声和口哨,以及在线帮助(你不需要太多)。见http://www.hexadigm.com