一、漢化方法
1、首先打開Proteus軟件,在菜單欄中選擇“Tools”,然後選擇“Options”。
2、在彈出的對話框中選擇“Language”,然後單擊“Change”按鈕。
3、在下拉列表中選擇“中文(簡體)”,然後單擊“OK”按鈕。
4、重新啟動Proteus軟件,即可看到已完成漢化。
二、漢化過程中可能遇到的問題
1、因系統語言不同而無法漢化
如果出現此問題,請先將系統語言改為中文(簡體)或英文,然後再進行漢化操作。
2、因軟件版本不同而無法漢化
如果出現此問題,請首先檢查軟件版本是否支持漢化,如不支持,則無法進行漢化。
3、因翻譯文件不全而無法漢化
如果出現此問題,請下載完整的翻譯文件,以便能夠全部漢化。
三、漢化代碼示例
void Proteus::ChangeLanguage(LANGID LangID)
{
m_hInstance = AfxGetResourceHandle();
AfxSetResourceHandle(m_hInstance);
TCHAR szFilePath[MAX_PATH] = {0};
GetModuleFileName(NULL, szFilePath, MAX_PATH);
TCHAR szLangPath[MAX_PATH] = {0};
_tcsncpy_s(szLangPath, szFilePath, _tcsrchr(szFilePath,_T('\\')) - szFilePath + 1);
_tmakepath_s(szFilePath, _T(""), szLangPath, _T("Proteus.rc"), NULL);
if (m_hOldResData)
FreeResource(m_hOldResData);
HMODULE hModule = LoadLibrary(szFilePath);
if (!hModule)
return;
HRSRC ID_VAL_HRSRC = FindResource(hModule, MAKEINTRESOURCE(ID_VAL), _T("RT_VERSION"));
if (!ID_VAL_HRSRC)
return;
HGLOBAL hGlob = LoadResource(hModule, ID_VAL_HRSRC);
if (!hGlob)
return;
LPBYTE lpByte = (LPBYTE)LockResource(hGlob);
if (!lpByte)
return;
DWORD ValSize = *(DWORD*)(lpByte+40);
LPBYTE pVal = lpByte + 42 + *(WORD*)(lpByte+38);
UINT32* LanguageID = (UINT32*)pVal;
while (*LanguageID)
{
if (*LanguageID == LangID)
{
DWORD ValOffset = pVal - lpByte;
lpByte[ValOffset] = 0;
// Replace with new resource data
HGLOBAL hNewResData = GlobalAlloc(GMEM_MOVEABLE, ValSize + ValOffset + (130 * 2));
BYTE* pbNewResData = (BYTE*)GlobalLock(hNewResData);
memcpy(pbNewResData, lpByte, ValOffset);
memcpy(pbNewResData+ValOffset, _T("\r\nVS_VERSION_INFO VERSIONINFO\r\nFILEVERSION "));
TCHAR szFileVersion[20] = _T("6, 7, 0, 0");
_tcsncpy_s(szFileVersion, ProteusBuildStr(), 16);
int i = _tcslen(szFileVersion);
szFileVersion[i++] = ',';
szFileVersion[i++] = ' ';
szFileVersion[i++] = '0';
szFileVersion[i++] = ',';
szFileVersion[i++] = ' ';
szFileVersion[i++] = '0';
szFileVersion[i++] = ',';
szFileVersion[i++] = ' ';
szFileVersion[i++] = '0';
szFileVersion[i++] = '\r';
szFileVersion[i++] = '\n';
szFileVersion[i++] = _T("PRODUCTVERSION ");
TCHAR szProductVersion[20] = _T("6, 7, 0, 0");
_tcsncpy_s(szProductVersion, ProteusBuildStr(), 16);
i = _tcslen(szProductVersion);
szProductVersion[i++] = ',';
szProductVersion[i++] = ' ';
szProductVersion[i++] = '0';
szProductVersion[i++] = ',';
szProductVersion[i++] = ' ';
szProductVersion[i++] = '0';
szProductVersion[i++] = ',';
szProductVersion[i++] = ' ';
szProductVersion[i++] = '0';
szProductVersion[i++] = '\r';
szProductVersion[i++] = '\n';
memcpy(pbNewResData+ValOffset, szFileVersion, _tcslen(szFileVersion) * sizeof(TCHAR));
memcpy(pbNewResData+ValOffset+_tcslen(szFileVersion)*sizeof(TCHAR), pVal+(LANG_SIZE-2), ValSize-LANG_SIZE+2);
memcpy(pbNewResData+ValOffset+ValSize-LANG_SIZE+2+_tcslen(szFileVersion)*sizeof(TCHAR), szProductVersion, _tcslen(szProductVersion) * sizeof(TCHAR));
UnlockResource(hGlob);
m_hOldResData = lpByte;
lpByte = (LPBYTE)GlobalReAlloc(m_hOldResData, ValSize+ValOffset+(130 * 2), GMEM_MOVEABLE);
memcpy(lpByte, pbNewResData, ValSize+ValOffset+(130 * 2));
GlobalUnlock(hNewResData);
FreeResource(hGlob);
FreeLibrary(hModule);
UpdateResource(LangID);
return;
}
pVal += *LanguageID;
LanguageID = (UINT32*)pVal;
}
FreeLibrary(hModule);
}
四、總結
本文簡要介紹了Proteus軟件的漢化方法,針對漢化過程中可能遇到的問題進行了詳細的解決方案介紹,並提供了示例代碼以供參考。希望能夠幫助大家成功完成Proteus軟件的漢化。
原創文章,作者:TKWBE,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/370363.html
微信掃一掃
支付寶掃一掃