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