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


94

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

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

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

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

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


3
我注意到,非建设性的(或其他“对SO无效”类型的问题)是最有价值的问题之一:)这也是一个很好的问题(我认为投票证明了这一点),这是关于如何使用多语言加载项获得多语言支持youtube.com/watch?v=SNIyP1QQdVs
Prokurors 2015年

1
有时很难将互联网上所有知识的片段拼凑在一起,我现在发现这个问题非常宝贵。当然,有时候解决软性问题比解决开放性问题没有建设性,我认为这是其中之一。:)

Answers:


20

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

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

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

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

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

口味问题...

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


2
有时您不得不担心方言。例如,繁体中文(台湾)与简体中文(中国大陆)的汉字完全不同。
MarkJ

1
@MarkJ MSDN文档提到繁体中文和简体中文不是方言(国家/地区),而是中立文化。Msdn:“中性文化是与语言相关但与国家/地区无关的文化。特定文化是与语言和国家/地区相关的文化。例如,“ fr”是中性的文化,“ fr-FR”是特定文化。请注意,“ zh-CHS”(简体中文)和“ zh-CHT”(繁体中文)是中性文化。”
宽带

我最近在链接的帮助下完成了此操作,这里没有提到2个步骤:1.单击所有.resource文件,并将“ Build Action”属性设置为“ Content”。2.单击所有.resource文件,然后将“复制到输出目录”属性设置为“始终复制”。
Sourav

1
@Kiquenet有关包含.NET广泛支持的完整(含代码)答案,请参阅:stackoverflow.com/a/35813707/2901207
CularBytes

9

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

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

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


6

为了使其他人受益(上一篇文章之后已有1年以上),我是一家专业的本地化产品的作者,该产品使整个翻译过程变得异常简单。这是一个Visual Studio加载项,它将从任意解决方案中提取所有“ .resx”字符串并将其加载到一个文件中,该文件可以使用免费的独立应用程序进行翻译(翻译人员可以从我的网站下载该文件)。然后,相同的加载项会将翻译后的字符串导入到您的解决方案中。使用许多内置的防护装置,大量的铃声和口哨声以及在线帮助,您可以非常轻松地使用它(您将不需要太多)。见http://www.hexadigm.com


1
这应该作为本机功能添加到visualstudio!很棒的软件!
Caverna

非常感谢(赞赏)。我会在开始生产该产品之前(大约10年前)与您达成一致,但是如果MSFT在今天实施该产品,则会使我
Larry
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.