问题
我已经将一些资源文件翻译成几种语言,并且发现某些字符在UI中无法正确显示。
例如:Versión:
显示为Versión:
。我已经确保我拥有UNICODE
和_UNICODE
指令,从我阅读的所有内容来看,它们应该能够按预期工作。可能是什么原因造成的?
代码
正在被调用的代码(并且我确实验证了它已到达此方法):
static HINSTANCE _languageDll = NULL; //Setup in another function call
CString GetLangString(int resourceId)
{
CString langString;
langString.LoadString(_languageDll, resourceId);
return langString;
}
检查langString
可以看到它正在加载Versión:
要查看是否为显示问题,我尝试了以下类似操作,并且显示正确:
return CString("Versión:");
浏览代码,我发现 WinUser.h 中有一个名为LoadString
的定义,它基于{{1}在LoadStringW
和LoadStringA
之间切换}指令。经过一番Google-fu之后,我没有运气尝试了以下方法:
UNICODE
我没有让它返回,看着调试器,我可以看到它再次加载了CString GetLangString(int resourceId)
{
WCHAR buffer[256];
LoadString(_languageDll, resourceId, buffer, sizeof(buffer)/sizeof(WCHAR));
return CString(buffer);
}
。
我完全不知道为什么会这样。资源文件可能有问题吗?我只是想学习C ++,所以我的技能会更好(又称“我是菜鸟”),因此对此提供的任何帮助将不胜感激。
注意:我要接管由别人建造的项目,所以我不知道为什么使用某些功能的原因。
编辑1
原始RC文件中的字符串如下:
Versión:
在翻译后的RC文件中:
STRINGTABLE
BEGIN
IDS_STRING703 "Version: %d.%d.%d.%d"
END