在C#/ WinForms中制作多语言应用程序的最佳实践?
我一直在考虑在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。
为了可能会遇到这种情况(最后一篇文章后1年以上)的其他人的利益,我是专业本地化产品的作者,使整个翻译过程变得非常简单。 这是一个Visual Studio加载项,它将从任意任意解决方案中提取所有“.resx”字符串,并将它们加载到可使用免费独立应用程序进行翻译的一个文件中(译者可从我的网站下载此文件)。 然后,相同的加载项会将翻译后的字符串导入到您的解决方案中。 非常容易使用许多内置的安全措施,大量的花里胡哨和在线帮助(你不需要太多)。 见http://www.hexadigm.com
链接地址: http://www.djcxy.com/p/37481.html上一篇: Best practice to make a multi language application in C#/WinForms?
下一篇: How to add foreign key relationship in Entity Framework?