WinForms中是否存在本地化常用文本的存储库?

时间:2011-01-11 23:29:04

标签: .net winforms localization globalization

我正在全球化Windows表单应用程序。

有没有办法以Windows的当前语言访问常用文本?

例如,对于OK,Cancel和Accept按钮的标签;如果我正在构建一个有OK按钮的表单,我想使用Windows在其他地方用于OK按钮的相同翻译。

我知道我可以自己存储翻译,但是Windows必须将它们存储在某个地方,它们是否允许开发人员访问它们?

2 个答案:

答案 0 :(得分:3)

是的,从理论上讲,您可以从Windows的内部系统文件中提取本地化字符串。但是不要这样做。可能的缺点远远超过了优点。您的应用程序不应该依赖于未记录的实现细节。没有理由尝试从Windows获得此功能。

还值得指出的是,您可以重命名按钮(以及其他所有控件)。这意味着如果你依赖某种字符串匹配算法,那就太容易破坏了。没有办法将按钮标记为某个“类型”,以便它会自动与特定标题相关联,即使您可以,也不会覆盖非按钮中的每个按钮 - 通用UI。此外,正如Joey的回答所指出的那样,对于用户而言,没有比部分本地化UI更糟糕的了。一致性是关键,您不能以这种方式本地化标签,组框,菜单,工具提示等。

但请注意,Windows 自动本地化消息框(MessageBox)上的按钮标题。你不必抬起手指。

将表单的Localizable属性设置为True(您必须在设计时执行此操作)并为应用程序中所有控件提供本地化文本有什么问题? Windows Forms实际上对本地化有相当全面的支持;设计器会自动将所有可本地化的元素序列化为表单的RESX文件。请参阅MSDN:Walkthrough: Localizing Windows Forms。确保留出足够的空间以容纳不同语言的不同长度的表达式。

答案 1 :(得分:1)

This似乎有一些相关信息:

  

USER32.dll确实是Windows中本地化字符串的存储库。

     

但是,它不包含多个字符串表,只有一个。

     

我可以访问其他一些本地化的Windows版本(pt-BR,es-ES等),并且在每一个版本中,从Windows XP到Windows 7修复了以下位置:

     

800 - 好的   801 - 取消   802 - & Abort   ...

我仍然将此视为一个实现细节而无需依赖。阅读Raymond Chen's blog,了解开发人员的各种恐怖故事,这些故事将Windows内部事物视为理所当然和永恒。

为什么不拥有自己的琴弦呢?您可以轻松地在按钮上单击“确定”,而不是从操作系统中获取它(如果您的应用程序要本地化,则自行本地化)。作为一个用户,我发现使用另一种语言的界面部分比其他语言更容易让人感到困惑(如果你的程序没有本地化,比如用德语在德国的Windows机器上使用,这将会发生,这会留下英文界面,只有德文按钮)。