.net WinForms中是否有本地化公共文本的存储库?

.net WinForms中是否有本地化公共文本的存储库?,.net,winforms,localization,globalization,.net,Winforms,Localization,Globalization,我正在全球化Windows窗体应用程序 有没有办法访问Windows当前语言中的公共文本 例如,对于确定、取消和接受按钮的标签;如果我正在构建一个具有OK按钮的表单,我希望使用与Windows在其他地方使用的OK按钮相同的翻译 我知道我可以自己为他们存储翻译,但Windows必须将它们存储在某个地方,他们是否允许开发人员访问它们?似乎有一些相关信息: USER32.dll实际上是Windows中本地化字符串的存储库 但是,它不包含多个字符串表,只包含一个字符串表 我可以访问其他一些本地化的Win

我正在全球化Windows窗体应用程序

有没有办法访问Windows当前语言中的公共文本

例如,对于确定、取消和接受按钮的标签;如果我正在构建一个具有OK按钮的表单,我希望使用与Windows在其他地方使用的OK按钮相同的翻译

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

似乎有一些相关信息:

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

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

我可以访问其他一些本地化的Windows版本(pt BR、es等),其中每一个版本的以下位置都是从Windows XP到Windows 7固定的:

800-好的 801-取消 802-&中止

我仍然认为这是一个实现细节,没有什么可依赖的。阅读关于开发人员将Windows内部事物视为理所当然和永恒的各种恐怖故事


还有,为什么不拥有自己的弦呢?您可以自己轻松地在按钮上加上“OK”,而不是从操作系统上抓取它(然后,如果您的应用程序打算本地化,您可以自己对其进行本地化)。作为一个用户,我发现界面的一部分使用另一种语言而不是其他语言有点令人困惑(如果你的程序没有本地化,比如说德语,并且在德语Windows机器上使用,那么必然会发生这种情况——这将使英语界面只剩下德语按钮)

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

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

但是请注意,Windows将自动本地化消息框()上按钮的标题。你不用动一根手指


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

File+Open+File,选择c:\windows\system32\user32.dll。LoadString()API。不要用这个,微软承诺有一天会破坏它。值得链接到微软Terminonlogy数据库@我不知道那个可本地化的属性。这让事情变得更容易