首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >全球化现有的Windows窗体应用程序?

全球化现有的Windows窗体应用程序?
EN

Stack Overflow用户
提问于 2009-10-05 11:58:35
回答 4查看 11.8K关注 0票数 10

我有一个使用VS2005和.net Framework2.0开发的现有winforms应用程序。

现在我们需要全球化这个应用程序。这两个地区是德语和日语。

我知道我们可以使用form的localize属性来创建本地化的表单资源,并且可以有消息框、异常等中使用的字符串的其他资源文件。

我想知道全球化现有应用程序的最佳方法,是应该在每个表单上设置localize属性,还是有一些工具可以提取标签名称并控制日期格式、货币等的names..what考虑因素。

另外,我们在代码中的某些地方使用了一些复合字符串来连接消息字符串,如何本地化这些字符串?

在开始全球化活动之前,我们将把应用程序迁移到VS2008和.net Framework3.5。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2009-10-05 14:48:20

我只接触过LTR语言,没有接触过日语。考虑到这一点,下面是我的一些最佳实践:

  • 将所有特定于语言的编程字符串和字符串片段放入一个.resx文件中(我喜欢在每个对话框中使用一个.resx文件),然后使用自动生成的类和属性调用字符串。你的代码中不应该有任何特定于语言的字符串(这意味着你的代码中几乎没有字符串,句号)。一个好的模式是将格式化字符串也放入.resx中,因为一种语言的语法不同。
  • 在所有窗体上将Localizable属性设置为True,并直接在那里进行特定于语言的更改(使用language property).
  • Design您的窗体,以便显示特定于语言的字符串的任何内容在需要的地方都有额外的空间(注意:德语比英语长)。
  • 对于需要动态设置文本的控件,可以设置表单上的文本,这样您就可以知道它只是一个标记。我使用"##“来做这件事,这真的很突出。避免将文本设置为动态文本的“样本”,因为您永远不会记住仅通过查看表单就可以动态设置哪些控件。
票数 7
EN

Stack Overflow用户

发布于 2009-10-05 14:29:55

最好在每个表单上设置本地化属性,这样不仅可以提取字符串,还可以将各种组件的几何形状提取到基本.resx文件中。对于指定的语言,组件的原始大小不太可能适合翻译。

通常不建议使用片段组成字符串,因为它们通常不会映射到不同语言中的相同片段模式。使用格式化字符串(String.Format)来输入值,是的,但是任何依赖于原始语言的语法和句子顺序的东西都不太可能适合。

票数 2
EN

Stack Overflow用户

发布于 2009-10-05 12:13:02

如果你使用Visual Source Safe作为你的源代码控制(希望你不是),无论你做什么,都不要在你的源代码中添加日语文本。虽然Visual Studio可以处理unicode源文件,但VSS不能很好地处理它们。

我开发了一个将自身翻译成日语的应用程序,在源代码本身中包含日语(用于调用类似MessageBox的函数)会损坏文件,而且因为VSS是基于diff的,所以文件会一直损坏到原始的签入版本。由于VSS将基于unicode的CS文件的某些部分(每个字符使用两个字节)偏移了一个字节,所以会发生这种损坏。

修复这些文件需要大量的手工工作,我的老板在我身后盯着我,尖叫着说我们注定要失败,所以不要这么做。

此外,这里还有几个关于此主题的其他StackOverflow问题:

Best way to implement multi-language/globalization in large .NET project

Best practice to make a multi language application in C#/WinForms?

就我个人而言,我更喜欢更简单的方法。在Excel或应用程序中需要翻译的每一段英文文本(控制文本属性、在MessageBox函数中使用的字符串等)中创建一个列表。并将电子表格发送给您的翻译人员。在应用程序中,在每个窗体的Load事件中调用一个方法,该方法循环访问窗体上的所有控件,并将其文本属性更改为翻译值。将所有对MessageBox的调用替换为对翻译要显示的文本的中间函数的调用,然后使用翻译后的文本调用MessageBox。

使用内置的全球化方法是一项大量的工作,因为您必须手动创建每个全球化表单,然后手动将所有文本替换为翻译,而这项任务非常需要程序员流利。我提到的方法是通过编程完成的,不需要程序员流利地使用翻译后的语言。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1519648

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档