我正在构建一个具有标准“确定”和“取消”按钮的Windows对话框。鉴于Windows在其自己的对话框中使用相同的按钮文本,我有没有办法获取要在按钮上使用的正确字符串?
这样,无论使用哪种语言,我的应用程序都将拥有正确的字符串,而无需我自己将其本地化为许多不同的语言。我正在使用C#,但如果需要,可以愉快地使用平台调用来访问OS方法。
注意:是的,我可以很容易地对资源进行本地化,但我不想找到并且必须在已经存在于windows中时输入大量不同的语言字符串。请不要回答说本地化应用程序!
答案 0 :(得分:12)
在Visual Studio:文件+打开+文件中,键入c:\ windows \ system32 \ user32.dll。打开“字符串表”节点,然后双击“字符串表”。向下滚动到800。
微软对依赖这些资源ID采取了相当严厉的立场。鉴于已经完成了你正在考虑的程序员的数量,但是他们不可能改变这些数字。你需要P / Invoke LoadLibrary()和LoadString()。
然而,你对这个计划的最终垮台是带有MUI语言包的Vista / Win7 Ultimate。这允许用户在不使用更新DLL中的资源字符串的情况下在语言之间切换。这样的版本将始终有英文字符串。
答案 1 :(得分:3)
好吧,如果你使用标准MessageBox.Show()
函数并传递它的approriate参数,它将自动为你yes/no/okay/cancel按钮本地化。
更有趣的是如何本地化消息文本。
答案 2 :(得分:1)
不,没有标准的,支持的方式来做到这一点。是的,Windows确实存储了这些字符串,并且(通过一些努力)可以获得它们,但是不能保证它们将保留在相同的位置并且在版本之间的相同标识符下。
虽然您可能想要这是答案,但答案确实是本地化您的应用程序。如果您正在本地化其他所有内容(除非您 希望OK
和Cancel
进行本地化),我不确定为什么会这样做尽最大努力包括OK
和Cancel
的本地化值。
答案 3 :(得分:1)
请参阅MB_GetString
声称完成此操作:
https://msdn.microsoft.com/en-us/library/windows/desktop/dn910915(v=vs.85).aspx
但是,它似乎需要运行时链接: