做项目的时候需要使用Qt框架做软件翻译,但是Qt版本较低国际化支持比较差。
打算使用读写InI文件的方式来手动翻译,但测试发现Qt4.8.6版本下的QSettings键只支持英文字符,无法达到翻译需求。
注意:下面方法只适合读取单个节(组)组名为"section",编码使用utf-16。
翻阅资料手动整理了一个使用Win32API读取ini的方式,代码如下:
#include"windows.h"
#include <qstringlist.h>
#include <qstring.h>
QMap<QString, QString> ReadIniFile(const QString& Path)
{
QStringList List;
QMap<QString, QString> Map;
wchar_t* s_path = (wchar_t*)Path.utf16();
TCHAR szBuffer[1024] = { 0 };
BOOL bRet = GetPrivateProfileSection(L"section", szBuffer, _countof(szBuffer), s_path);
if (bRet == 0)
{
return Map;
}
if (bRet) {
LPTSTR lpKeyValue = szBuffer;
while (*lpKeyValue != L'\0') {
wprintf_s(L"%s\n", lpKeyValue);
int size = (int)wcslen(lpKeyValue);
List << QString::fromUtf16((ushort*)lpKeyValue, (int)size);
lpKeyValue += wcslen(lpKeyValue) + 1;
}
}
foreach(auto i, List)
{
QStringList list = i.split("=");
if(list.size()!=2)
continue;
QString Key = list[0];
QString Value = list[1];
Map.insert(Key, Value);
}
return Map;
}
希望可以帮到有共同需求的朋友。