From 5cf60573caf756cca6ee9464514dcf26fc7a38f3 Mon Sep 17 00:00:00 2001 From: Takashi Sawanaka Date: Mon, 14 Jan 2019 02:00:24 +0900 Subject: [PATCH] Translate strings without using MergeLang.dll --HG-- branch : stable --- BuildArc.cmd | 1 - BuildBin.vs2015.cmd | 1 - BuildBin.vs2017.cmd | 1 - BuildBin.vs2019.cmd | 1 - Installer/InnoSetup/WinMerge.iss | 3 - Installer/InnoSetup/WinMergeX64.iss | 3 - Src/Common/LanguageSelect.cpp | 422 +++++++------------------- Src/Common/LanguageSelect.h | 11 +- Src/ConfigLog.cpp | 1 - Src/MergeLang.vcxproj | 253 --------------- Src/MergeLang.vs2015.vcxproj | 134 +------- Src/MergeLang.vs2015.vcxproj.filters | 5 - Src/MergeLang.vs2017.vcxproj | 142 ++------- Src/MergeLang.vs2017.vcxproj.filters | 51 ++-- Src/MergeLang.vs2019.vcxproj | 140 ++------- Src/MergeLang.vs2019.vcxproj.filters | 5 - Translations/WinMerge/CreateMasterPotFile.vbs | 22 +- Translations/WinMerge/English.pot | 2 +- 18 files changed, 196 insertions(+), 1002 deletions(-) delete mode 100644 Src/MergeLang.vcxproj diff --git a/BuildArc.cmd b/BuildArc.cmd index 3140e7a6d..a55e5f6de 100644 --- a/BuildArc.cmd +++ b/BuildArc.cmd @@ -67,7 +67,6 @@ copy ShellExtension\*Register.bat "%DISTDIR%\%PLATFORMH%zip-version\WinMerge\" rem Translation copy Build\%PLATFORM%\MergeUnicodeRelease\Languages\*.po "%DISTDIR%\%PLATFORMH%zip-version\WinMerge\Languages\" -copy Build\%PLATFORM%\MergeUnicodeRelease\MergeLang.dll "%DISTDIR%\%PLATFORMH%zip-version\WinMerge\" rem Filters for %%i in (Filters\*.flt Filters\*.tmpl Filters\*.txt) do ( diff --git a/BuildBin.vs2015.cmd b/BuildBin.vs2015.cmd index 7ae44e898..5c8b51231 100644 --- a/BuildBin.vs2015.cmd +++ b/BuildBin.vs2015.cmd @@ -28,7 +28,6 @@ endlocal if exist "%SIGNBAT_PATH%" ( call "%SIGNBAT_PATH%" Build\%PLATFORM%\MergeUnicodeRelease\WinMergeU.exe - call "%SIGNBAT_PATH%" Build\%PLATFORM%\MergeUnicodeRelease\MergeLang.dll ) mkdir Build\%PLATFORM%\MergeUnicodeRelease\%APPVER% 2> NUL diff --git a/BuildBin.vs2017.cmd b/BuildBin.vs2017.cmd index d65c596e6..6798ff06a 100644 --- a/BuildBin.vs2017.cmd +++ b/BuildBin.vs2017.cmd @@ -32,7 +32,6 @@ endlocal if exist "%SIGNBAT_PATH%" ( call "%SIGNBAT_PATH%" Build\%PLATFORM%\MergeUnicodeRelease\WinMergeU.exe - call "%SIGNBAT_PATH%" Build\%PLATFORM%\MergeUnicodeRelease\MergeLang.dll ) mkdir Build\%PLATFORM%\MergeUnicodeRelease\%APPVER% 2> NUL diff --git a/BuildBin.vs2019.cmd b/BuildBin.vs2019.cmd index 9c27455f7..3c426a285 100644 --- a/BuildBin.vs2019.cmd +++ b/BuildBin.vs2019.cmd @@ -32,7 +32,6 @@ endlocal if exist "%SIGNBAT_PATH%" ( call "%SIGNBAT_PATH%" Build\%PLATFORM%\MergeUnicodeRelease\WinMergeU.exe - call "%SIGNBAT_PATH%" Build\%PLATFORM%\MergeUnicodeRelease\MergeLang.dll ) mkdir Build\%PLATFORM%\MergeUnicodeRelease\%APPVER% 2> NUL diff --git a/Installer/InnoSetup/WinMerge.iss b/Installer/InnoSetup/WinMerge.iss index 2d39474db..dcba85684 100755 --- a/Installer/InnoSetup/WinMerge.iss +++ b/Installer/InnoSetup/WinMerge.iss @@ -440,9 +440,6 @@ Source: ..\..\Build\Merge7z\7z.dll; DestDir: {app}\Merge7z; Flags: promptifolder Source: ..\..\Build\Merge7z\*.txt; DestDir: {app}\Merge7z; Flags: promptifolder; MinVersion: 0, 4; Components: ArchiveSupport Source: ..\..\Build\Merge7z\Lang\*.txt; DestDir: {app}\Merge7z\Lang; Flags: promptifolder; MinVersion: 0, 4; Components: ArchiveSupport -; MergeLang.dll - translation helper dll -Source: ..\..\Build\MergeUnicodeRelease\MergeLang.dll; DestDir: {app}; Flags: promptifolder ignoreversion; Components: Core - ; Language files Source: ..\..\Translations\WinMerge\Basque.po; DestDir: {app}\Languages; Components: Languages\Basque; Flags: ignoreversion comparetimestamp Source: ..\..\Translations\Docs\Readme\ReadMe-Basque.txt; DestDir: {app}\Docs; Components: Languages\Basque diff --git a/Installer/InnoSetup/WinMergeX64.iss b/Installer/InnoSetup/WinMergeX64.iss index 5fa13dc60..d55a00735 100644 --- a/Installer/InnoSetup/WinMergeX64.iss +++ b/Installer/InnoSetup/WinMergeX64.iss @@ -419,9 +419,6 @@ Source: ..\..\Build\X64\Merge7z\7z.dll; DestDir: {app}\Merge7z; Flags: promptifo Source: ..\..\Build\X64\Merge7z\*.txt; DestDir: {app}\Merge7z; Flags: promptifolder; MinVersion: 0, 4; Components: ArchiveSupport Source: ..\..\Build\X64\Merge7z\Lang\*.txt; DestDir: {app}\Merge7z\Lang; Flags: promptifolder; MinVersion: 0, 4; Components: ArchiveSupport -; MergeLang.dll - translation helper dll -Source: ..\..\Build\X64\MergeUnicodeRelease\MergeLang.dll; DestDir: {app}; Flags: promptifolder ignoreversion; Components: Core - ; Language files Source: ..\..\Translations\WinMerge\Basque.po; DestDir: {app}\Languages; Components: Languages\Basque; Flags: ignoreversion comparetimestamp Source: ..\..\Translations\Docs\Readme\ReadMe-Basque.txt; DestDir: {app}\Docs; Components: Languages\Basque diff --git a/Src/Common/LanguageSelect.cpp b/Src/Common/LanguageSelect.cpp index e2e29b635..1891ad5ad 100644 --- a/Src/Common/LanguageSelect.cpp +++ b/Src/Common/LanguageSelect.cpp @@ -23,8 +23,10 @@ /** @brief Relative path to WinMerge executable for lang files. */ static const TCHAR szRelativePath[] = _T("Languages"); -static char *EatPrefix(char *text, const char *prefix); -static void unslash(unsigned codepage, std::string &s); +template +static wchar_t *EatPrefix(wchar_t *text, const wchar_t (&prefix)[len]); +static wchar_t *EatPrefix(wchar_t *text, const wchar_t *prefix); +static void unslash(std::wstring &s); static HANDLE NTAPI FindFile(HANDLE h, LPCTSTR path, WIN32_FIND_DATA *fd); /** @@ -413,36 +415,36 @@ LangFileInfo::LangFileInfo(LPCTSTR path) : id(0) { FILE *f; - if (_tfopen_s(&f, path, _T("r")) == 0 && f) + if (_tfopen_s(&f, path, _T("r,ccs=utf-8")) == 0 && f) { - char buf[1024 + 1]; - while (fgets(buf, sizeof buf - 1, f) != nullptr) + wchar_t buf[1024 + 1]; + while (fgetws(buf, countof(buf) - 1, f) != nullptr) { int i = 0; - strcat_s(buf, "1"); - sscanf_s(buf, "msgid \" LANG_ENGLISH , SUBLANG_ENGLISH_US \" %d", &i); + wcscat_s(buf, L"1"); + swscanf_s(buf, L"msgid \" LANG_ENGLISH , SUBLANG_ENGLISH_US \" %d", &i); if (i) { - if (fgets(buf, sizeof buf, f) != nullptr) + if (fgetws(buf, countof(buf), f) != nullptr) { - char *lang = strstr(buf, "LANG_"); - char *sublang = strstr(buf, "SUBLANG_"); - char *langNext = nullptr; - char *sublangNext = nullptr; + wchar_t *lang = wcsstr(buf, L"LANG_"); + wchar_t *sublang = wcsstr(buf, L"SUBLANG_"); + wchar_t *langNext = nullptr; + wchar_t *sublangNext = nullptr; if (lang && sublang) { - strtok_s(lang, ",\" \t\r\n", &langNext); - strtok_s(sublang, ",\" \t\r\n", &sublangNext); - lang += sizeof "LANG"; - sublang += sizeof "SUBLANG"; - if (0 != strcmp(sublang, "DEFAULT")) + wcstok_s(lang, L",\" \t\r\n", &langNext); + wcstok_s(sublang, L",\" \t\r\n", &sublangNext); + lang += countof("LANG"); + sublang += countof("SUBLANG"); + if (0 != wcscmp(sublang, L"DEFAULT")) { sublang = EatPrefix(sublang, lang); if (sublang && *sublang) - sublang = EatPrefix(sublang, "_"); + sublang = EatPrefix(sublang, L"_"); } if (sublang) - id = LangId(lang, sublang); + id = LangId(std::string(lang, lang + wcslen(lang)).c_str(), std::string(sublang, sublang + wcslen(sublang)).c_str()); } } break; @@ -484,9 +486,7 @@ static HANDLE NTAPI FindFile(HANDLE h, LPCTSTR path, WIN32_FIND_DATA *fd) const WORD wSourceLangId = MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US); CLanguageSelect::CLanguageSelect() -: m_hCurrentDll(nullptr) -, m_wCurLanguage(wSourceLangId) -, m_codepage(0) +: m_wCurLanguage(wSourceLangId) { SetThreadLocale(MAKELCID(m_wCurLanguage, SORT_DEFAULT)); } @@ -499,27 +499,35 @@ CLanguageSelect::CLanguageSelect() * @note Function returns pointer to original string, * it does not allocate a new string. */ -static char *EatPrefix(char *text, const char *prefix) +static wchar_t *EatPrefix(wchar_t *text, const wchar_t *prefix) { - if (size_t len = strlen(prefix)) - if (_memicmp(text, prefix, len) == 0) + if (size_t len = wcslen(prefix)) + if (_memicmp(text, prefix, len * sizeof(wchar_t)) == 0) return text + len; return 0; } +template +static wchar_t *EatPrefix(wchar_t *text, const wchar_t (&prefix)[len]) +{ + if (_memicmp(text, prefix, len * sizeof(wchar_t)) == 0) + return text + len; + return 0; +} + /** * @brief Convert C style \\nnn, \\r, \\n, \\t etc into their indicated characters. * @param [in] codepage Codepage to use in conversion. * @param [in,out] s String to convert. */ -static void unslash(unsigned codepage, std::string &s) +static void unslash(std::wstring &s) { - char *p = &*s.begin(); - char *q = p; - char c; + wchar_t *p = &*s.begin(); + wchar_t *q = p; + wchar_t c; do { - char *r = q + 1; + wchar_t *r = q + 1; switch (c = *q) { case '\\': @@ -547,10 +555,10 @@ static void unslash(unsigned codepage, std::string &s) c = '\v'; break; case 'x': - *p = (char)strtol(r, &q, 16); + *p = (wchar_t)wcstol(r, &q, 16); break; default: - *p = (char)strtol(r - 1, &q, 8); + *p = (wchar_t)wcstol(r - 1, &q, 8); break; } if (q >= r) @@ -558,8 +566,6 @@ static void unslash(unsigned codepage, std::string &s) // fall through default: *p = c; - if ((*p & 0x80) && IsDBCSLeadByteEx(codepage, *p)) - *++p = *r++; q = r; } ++p; @@ -578,100 +584,14 @@ bool CLanguageSelect::LoadLanguageFile(LANGID wLangId, bool bShowError /*= false if (strPath.empty()) return false; - m_hCurrentDll = LoadLibrary(_T("MergeLang.dll")); - // There is no point in translating error messages about inoperational - // translation system, so go without string resources here. - if (m_hCurrentDll == nullptr) - { - if (bShowError) - AfxMessageBox(_T("Failed to load MergeLang.dll"), MB_ICONSTOP); - return false; - } - CVersionInfo viInstance(AfxGetInstanceHandle()); - unsigned instanceVerMS = 0; - unsigned instanceVerLS = 0; - viInstance.GetFixedFileVersion(instanceVerMS, instanceVerLS); - CVersionInfo viResource(m_hCurrentDll); - unsigned resourceVerMS = 0; - unsigned resourceVerLS = 0; - viResource.GetFixedFileVersion(resourceVerMS, resourceVerLS); - if (instanceVerMS != resourceVerMS || instanceVerLS != resourceVerLS) - { - FreeLibrary(m_hCurrentDll); - m_hCurrentDll = nullptr; - if (bShowError) - AfxMessageBox(_T("MergeLang.dll version mismatch"), MB_ICONSTOP); - return false; - } - HRSRC mergepot = FindResource(m_hCurrentDll, _T("MERGEPOT"), RT_RCDATA); - if (mergepot == nullptr) - { - if (bShowError) - AfxMessageBox(_T("MergeLang.dll is invalid"), MB_ICONSTOP); - return false; - } - size_t size = SizeofResource(m_hCurrentDll, mergepot); - const char *data = (const char *)LoadResource(m_hCurrentDll, mergepot); - char buf[1024]; - std::string *ps = nullptr; - std::string msgid; + wchar_t buf[1024]; + std::wstring *ps = nullptr; + std::wstring msgid; unsigned uid = 0; bool found_uid = false; - int unresolved = 0; - int mismatched = 0; - while (const char *eol = (const char *)memchr(data, '\n', size)) - { - size_t len = eol - data; - if (len >= sizeof buf) - { - ASSERT(false); - break; - } - memcpy(buf, data, len); - buf[len++] = '\0'; - data += len; - size -= len; - if (char *p = EatPrefix(buf, "#:")) - { - if (char *q = strchr(p, ':')) - { - uid = strtoul(q + 1, &q, 16); - found_uid = true; - ++unresolved; - } - } - else if (EatPrefix(buf, "msgid ")) - { - ps = &msgid; - } - if (ps != nullptr) - { - char *p = strchr(buf, '"'); - char *q = strrchr(buf, '"'); - if (std::string::size_type n = q - p) - { - ps->append(p + 1, n - 1); - } - else - { - ps = nullptr; - // avoid dereference of empty vector or last vector - if (found_uid) - { - unslash(0, msgid); - m_map_msgid_to_uid.insert(std::make_pair(msgid, uid)); - m_map_uid_to_msgid.insert(std::make_pair(uid, msgid)); - } - found_uid = false; - msgid.erase(); - } - } - } FILE *f; - if (_tfopen_s(&f, strPath.c_str(), _T("r")) != 0) + if (_tfopen_s(&f, strPath.c_str(), _T("r,ccs=UTF-8")) != 0) { - FreeLibrary(m_hCurrentDll); - m_hCurrentDll = nullptr; if (bShowError) { String str = _T("Failed to load ") + strPath; @@ -682,45 +602,44 @@ bool CLanguageSelect::LoadLanguageFile(LANGID wLangId, bool bShowError /*= false ps = nullptr; msgid.erase(); found_uid = false; - std::string format; - std::string msgstr; - std::string directive; - while (fgets(buf, sizeof buf, f) != nullptr) + std::wstring format; + std::wstring msgstr; + std::wstring directive; + while (fgetws(buf, countof(buf), f) != nullptr) { - if (char *p0 = EatPrefix(buf, "#:")) + if (wchar_t *p0 = EatPrefix(buf, L"#:")) { - if (char *q = strchr(p0, ':')) + if (wchar_t *q = wcschr(p0, ':')) { - uid = strtoul(q + 1, &q, 16); + uid = wcstoul(q + 1, &q, 16); found_uid = true; - --unresolved; } } - else if (char *p1 = EatPrefix(buf, "#,")) + else if (wchar_t *p1 = EatPrefix(buf, L"#,")) { format = p1; - format.erase(0, format.find_first_not_of(" \t\r\n")); - format.erase(format.find_last_not_of(" \t\r\n") + 1); + format.erase(0, format.find_first_not_of(L" \t\r\n")); + format.erase(format.find_last_not_of(L" \t\r\n") + 1); } - else if (char *p2 = EatPrefix(buf, "#.")) + else if (wchar_t *p2 = EatPrefix(buf, L"#.")) { directive = p2; - directive.erase(0, directive.find_first_not_of(" \t\r\n")); - directive.erase(directive.find_last_not_of(" \t\r\n") + 1); + directive.erase(0, directive.find_first_not_of(L" \t\r\n")); + directive.erase(directive.find_last_not_of(L" \t\r\n") + 1); } - else if (EatPrefix(buf, "msgid ")) + else if (EatPrefix(buf, L"msgid ")) { ps = &msgid; } - else if (EatPrefix(buf, "msgstr ")) + else if (EatPrefix(buf, L"msgstr ")) { ps = &msgstr; } if (ps != nullptr) { - char *p = strchr(buf, '"'); - char *q = strrchr(buf, '"'); - if (std::string::size_type n = q - p) + wchar_t *p = wcschr(buf, '"'); + wchar_t *q = wcsrchr(buf, '"'); + if (std::wstring::size_type n = q - p) { ps->append(p + 1, n - 1); } @@ -728,45 +647,19 @@ bool CLanguageSelect::LoadLanguageFile(LANGID wLangId, bool bShowError /*= false { ps = nullptr; if (!msgid.empty()) - unslash(0, msgid); + unslash(msgid); if (msgstr.empty()) msgstr = msgid; - unslash(m_codepage, msgstr); - // avoid dereference of empty vector or last vector + unslash(msgstr); if (found_uid) - { - if (m_map_uid_to_msgid.find(uid) != m_map_uid_to_msgid.end() && m_map_uid_to_msgid.at(uid) == msgid) - m_map_uid_to_msgid[uid] = msgstr; - else - ++mismatched; - } + m_map_msgid_to_msgstr.insert_or_assign(msgid, msgstr); found_uid = false; - if (directive == "Codepage") - { - m_codepage = strtol(msgstr.c_str(), &p, 10); - directive.erase(); - } msgid.erase(); msgstr.erase(); } } } fclose(f); - if (unresolved != 0 || mismatched != 0) - { - FreeLibrary(m_hCurrentDll); - m_hCurrentDll = nullptr; - m_map_uid_to_msgid.clear(); - m_map_msgid_to_uid.clear(); - m_codepage = 0; - if (bShowError) - { - String str = _T("Unresolved or mismatched references detected when ") - _T("attempting to read translations from\n") + strPath; - AfxMessageBox(str.c_str(), MB_ICONSTOP); - } - return false; - } return true; } @@ -781,22 +674,10 @@ bool CLanguageSelect::SetLanguage(LANGID wLangId, bool bShowError /*= false*/) return false; if (m_wCurLanguage == wLangId) return true; - // reset the resource handle - AfxSetResourceHandle(AfxGetInstanceHandle()); - // free the existing DLL - if (m_hCurrentDll != nullptr) - { - FreeLibrary(m_hCurrentDll); - m_hCurrentDll = nullptr; - } - m_map_uid_to_msgid.clear(); - m_map_msgid_to_uid.clear(); - m_codepage = 0; + m_map_msgid_to_msgstr.clear(); if (wLangId != wSourceLangId) { - if (LoadLanguageFile(wLangId, bShowError)) - AfxSetResourceHandle(m_hCurrentDll); - else + if (!LoadLanguageFile(wLangId, bShowError)) wLangId = wSourceLangId; } m_wCurLanguage = wLangId; @@ -833,62 +714,26 @@ String CLanguageSelect::GetFileName(LANGID wLangId) const ///////////////////////////////////////////////////////////////////////////// // CLanguageSelect commands -bool CLanguageSelect::TranslateString(unsigned uid, std::string &s) const +bool CLanguageSelect::TranslateString(const std::wstring& msgid, std::wstring &s) const { - if (m_map_uid_to_msgid.find(uid) != m_map_uid_to_msgid.end()) + if (m_map_msgid_to_msgstr.find(msgid) != m_map_msgid_to_msgstr.end()) { - s = m_map_uid_to_msgid.at(uid); - unsigned codepage = GetACP(); - if (m_codepage != codepage) - { - // Attempt to convert to UI codepage - if (size_t len = s.length()) - { - std::wstring ws; - ws.resize(len); - len = MultiByteToWideChar(m_codepage, 0, s.c_str(), -1, &*ws.begin(), static_cast(len) + 1); - if (len) - { - ws.resize(len - 1); - len = WideCharToMultiByte(codepage, 0, ws.c_str(), -1, 0, 0, 0, 0); - if (len) - { - s.resize(len - 1); - WideCharToMultiByte(codepage, 0, ws.c_str(), -1, &*s.begin(), static_cast(len), 0, 0); - } - } - } - } + s = m_map_msgid_to_msgstr.at(msgid); return true; } + s = msgid; return false; } -bool CLanguageSelect::TranslateString(unsigned uid, std::wstring &ws) const +bool CLanguageSelect::TranslateString(const std::string& msgid, String& s) const { - if (m_map_uid_to_msgid.find(uid) != m_map_uid_to_msgid.end()) - { - if (size_t len = m_map_uid_to_msgid.at(uid).length()) - { - ws.resize(len); - const char *msgstr = m_map_uid_to_msgid.at(uid).c_str(); - len = MultiByteToWideChar(m_codepage, 0, msgstr, -1, &*ws.begin(), static_cast(len) + 1); - ws.resize(len - 1); - return true; - } - } - return false; -} - -bool CLanguageSelect::TranslateString(const std::string& str, String &translated_str) const -{ - EngMsgIDToUIDMap::const_iterator it = m_map_msgid_to_uid.find(str); - if (it != m_map_msgid_to_uid.end()) - { - return TranslateString(it->second, translated_str); - } - translated_str = ucr::toTString(str); - return false; +#ifdef _UNICODE + bool result = TranslateString(std::wstring(msgid.begin(), msgid.end()), s); +#else + bool result = TranslateString(std::wstring(msgid.begin(), msgid.end()), ws); + s = ucr::toTString(ws); +#endif + return result; } void CLanguageSelect::SetIndicators(CStatusBar &sb, const UINT *rgid, int n) const @@ -950,21 +795,17 @@ void CLanguageSelect::TranslateMenu(HMENU h) const { if (LPCWSTR text = pItemData->GetWideString()) { - unsigned uid = 0; - swscanf_s(text, L"Merge.rc:%x", &uid); std::wstring s; - if (TranslateString(uid, s)) + if (TranslateString(text, s)) pItemData->SetWideString(s.c_str()); } } - TCHAR text[80]; - if (::GetMenuString(h, i, text, countof(text), MF_BYPOSITION)) + wchar_t text[80]; + if (::GetMenuStringW(h, i, text, countof(text), MF_BYPOSITION)) { - unsigned uid = 0; - _stscanf_s(text, _T("Merge.rc:%x"), &uid); - String s; - if (TranslateString(uid, s)) - ::ModifyMenu(h, i, mii.fState | MF_BYPOSITION, mii.wID, s.c_str()); + std::wstring s; + if (TranslateString(text, s)) + ::ModifyMenuW(h, i, mii.fState | MF_BYPOSITION, mii.wID, s.c_str()); } } } @@ -974,13 +815,11 @@ void CLanguageSelect::TranslateDialog(HWND h) const UINT gw = GW_CHILD; do { - TCHAR text[80]; - ::GetWindowText(h, text, countof(text)); - unsigned uid = 0; - _stscanf_s(text, _T("Merge.rc:%x"), &uid); - String s; - if (TranslateString(uid, s)) - ::SetWindowText(h, s.c_str()); + wchar_t text[512]; + ::GetWindowTextW(h, text, countof(text)); + std::wstring s; + if (TranslateString(text, s)) + ::SetWindowTextW(h, s.c_str()); h = ::GetWindow(h, gw); gw = GW_HWNDNEXT; } while (h != nullptr); @@ -1063,64 +902,31 @@ void CLanguageSelect::RetranslateDialog(HWND h, const TCHAR *name) const reinterpret_cast((reinterpret_cast(pw) + 3) & ~DWORD_PTR(3))); // DWORD align }; - bool english = false; - HMODULE hModule = m_hCurrentDll; - if (hModule == nullptr) + DLGTEMPLATEEX *pTemplate = nullptr; + if ((pTemplate = loadDialogResource(AfxGetInstanceHandle(), name)) != nullptr) { - hModule = LoadLibrary(_T("MergeLang.dll")); - english = true; - } - if (hModule != nullptr) - { - if (DLGTEMPLATEEX* pTemplate = loadDialogResource(hModule, name)) + HWND hWndChlid = ::GetWindow(h, GW_CHILD); + const DLGITEMTEMPLATEEX *pItem = findFirstDlgItem(pTemplate); + for (int nDlgItems = 0; nDlgItems < pTemplate->cDlgItems; ++nDlgItems) { - DLGTEMPLATEEX *pTemplateEng = nullptr; - if (!english || (pTemplateEng = loadDialogResource(AfxGetInstanceHandle(), name)) != nullptr) - { - HWND hWndChlid = ::GetWindow(h, GW_CHILD); - const DLGITEMTEMPLATEEX *pItem = findFirstDlgItem(pTemplate); - const DLGITEMTEMPLATEEX *pItemEng = pTemplateEng ? findFirstDlgItem(pTemplateEng) : nullptr; - for (int nDlgItems = 0; nDlgItems < pTemplate->cDlgItems; ++nDlgItems) - { - const WORD *pw = reinterpret_cast(pItem); - pw += sizeof(DLGITEMTEMPLATEEX) / sizeof(WORD); - skip(pw); // Skip class name string or ordinal - - if (*pw == static_cast(-1)) // Skip text string or ordinal - pw += 2; - else - { - const wchar_t *p = reinterpret_cast(pw); - if (wcsncmp(p, L"Merge.rc:", 9) == 0) - { - if (pItemEng != nullptr) - { - const WORD *pw2 = reinterpret_cast(pItemEng); - pw2 += sizeof(DLGITEMTEMPLATEEX) / sizeof(WORD); - skip(pw2); // Skip class name string or ordinal - const wchar_t *peng = reinterpret_cast(pw2); - ::SetWindowText(hWndChlid, peng); - } - else - { - ::SetWindowText(hWndChlid, p); - } - } - while (*pw++); - } + const WORD *pw = reinterpret_cast(pItem); + pw += sizeof(DLGITEMTEMPLATEEX) / sizeof(WORD); + skip(pw); // Skip class name string or ordinal - hWndChlid = ::GetWindow(hWndChlid, GW_HWNDNEXT); - pItem = findNextDlgItem(pItem); - if (pItemEng != nullptr) - pItemEng = findNextDlgItem(pItemEng); - } + if (*pw == static_cast(-1)) // Skip text string or ordinal + pw += 2; + else + { + const wchar_t *p = reinterpret_cast(pw); + ::SetWindowTextW(hWndChlid, p); + while (*pw++); } + + hWndChlid = ::GetWindow(hWndChlid, GW_HWNDNEXT); + pItem = findNextDlgItem(pItem); } - if (english) - FreeLibrary(hModule); - else - TranslateDialog(h); } + TranslateDialog(h); } String CLanguageSelect::LoadString(UINT id) const @@ -1128,11 +934,9 @@ String CLanguageSelect::LoadString(UINT id) const String s; if (id) { - TCHAR text[1024]; + wchar_t text[1024]; AfxLoadString(id, text, countof(text)); - unsigned uid = 0; - _stscanf_s(text, _T("Merge.rc:%x"), &uid); - if (!TranslateString(uid, s)) + if (!TranslateString(text, s)) s = text; } return s; @@ -1160,9 +964,7 @@ std::wstring CLanguageSelect::LoadDialogCaption(LPCTSTR lpDialogTemplateID) cons else while (*text++); // Caption string is ahead - unsigned uid = 0; - swscanf_s(text, L"Merge.rc:%x", &uid); - if (!TranslateString(uid, s)) + if (!TranslateString(text, s)) s = text; } } diff --git a/Src/Common/LanguageSelect.h b/Src/Common/LanguageSelect.h index dfa3a3f7b..ee4465cf3 100644 --- a/Src/Common/LanguageSelect.h +++ b/Src/Common/LanguageSelect.h @@ -27,9 +27,8 @@ public: String GetFileName(LANGID) const; void InitializeLanguage(WORD langID); - bool TranslateString(unsigned uid, std::string &) const; - bool TranslateString(unsigned uid, std::wstring &) const; - bool TranslateString(const std::string&, String &) const; + bool TranslateString(const std::wstring&, std::wstring&) const; + bool TranslateString(const std::string&, String&) const; void SetIndicators(CStatusBar &, const UINT *, int) const; void TranslateMenu(HMENU) const; void TranslateDialog(HWND) const; @@ -41,12 +40,8 @@ public: // Implementation data private: - HINSTANCE m_hCurrentDll; LANGID m_wCurLanguage; - std::map m_map_uid_to_msgid; - typedef std::map EngMsgIDToUIDMap; - EngMsgIDToUIDMap m_map_msgid_to_uid; - unsigned m_codepage; + std::map m_map_msgid_to_msgstr; // Implementation methods private: bool LoadLanguageFile(LANGID, bool bShowError = false); diff --git a/Src/ConfigLog.cpp b/Src/ConfigLog.cpp index 9b84030e8..bf2eabba6 100644 --- a/Src/ConfigLog.cpp +++ b/Src/ConfigLog.cpp @@ -382,7 +382,6 @@ bool CConfigLog::DoFile(String &sError) FileWriteString(_T( " WinMerge: Path names are relative to the Code File's directory.\r\n")); WriteVersionOf1(2, _T(".\\ShellExtensionU.dll")); WriteVersionOf1(2, _T(".\\ShellExtensionX64.dll")); - WriteVersionOf1(2, _T(".\\MergeLang.dll")); WriteVersionOf1(2, _T(".\\Frhed\\hekseditU.dll")); WriteVersionOf1(2, _T(".\\WinIMerge\\WinIMergeLib.dll")); WriteVersionOf1(2, _T(".\\Merge7z\\7z.dll")); diff --git a/Src/MergeLang.vcxproj b/Src/MergeLang.vcxproj deleted file mode 100644 index ee33ccca8..000000000 --- a/Src/MergeLang.vcxproj +++ /dev/null @@ -1,253 +0,0 @@ - - - - - UnicodeDebug - Win32 - - - UnicodeDebug - x64 - - - UnicodeRelease - Win32 - - - UnicodeRelease - x64 - - - - MergeLang - {4B011DDA-2279-437D-903C-8028913AF31B} - MergeLang - Win32Proj - - - - DynamicLibrary - Unicode - v141_xp - - - DynamicLibrary - Unicode - v141 - - - DynamicLibrary - Unicode - v141_xp - - - DynamicLibrary - Unicode - v141 - - - - - - - - - - - - - - - - - - - <_ProjectFileVersion>10.0.30319.1 - .\..\Build\MergeUnicodeDebug\ - .\..\BuildTmp\MergeLang\$(Configuration)\ - true - .\..\Build\$(Platform)\Merge$(Configuration)\ - .\..\BuildTmp\MergeLang\$(Platform)\$(Configuration)\ - true - .\..\Build\MergeUnicodeRelease\ - .\..\BuildTmp\MergeLang\$(Configuration)\ - false - .\..\Build\$(Platform)\Merge$(Configuration)\ - .\..\BuildTmp\MergeLang\$(Platform)\$(Configuration)\ - false - - - - - - - - Disabled - WIN32;_DEBUG;_WINDOWS;_USRDLL;MERGELANG_EXPORTS;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebug - - - Level3 - EditAndContinue - - - $(OutDir)MergeLang.dll - true - $(OutDir)MergeLang.pdb - Windows - true - false - - - $(OutDir)MergeLang.lib - MachineX86 - - - pushd $(ProjectDir)..\Translations\WinMerge -cscript UpdatePoFilesFromPotFile.vbs -popd -mkdir $(OutDir)\Languages\ 2> NUL -copy /Y "$(ProjectDir)..\Translations\WinMerge\*.po" "$(OutDir)\Languages\" - - - - - - - - - X64 - - - Disabled - WIN32;_DEBUG;_WINDOWS;_USRDLL;MERGELANG_EXPORTS;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebug - - - Level3 - ProgramDatabase - - - $(OutDir)MergeLang.dll - true - $(OutDir)MergeLang.pdb - Windows - true - false - - - $(OutDir)MergeLang.lib - MachineX64 - - - pushd $(ProjectDir)..\Translations\WinMerge -cscript UpdatePoFilesFromPotFile.vbs -popd -mkdir $(OutDir)\Languages\ 2> NUL -copy /Y "$(ProjectDir)..\Translations\WinMerge\*.po" "$(OutDir)\Languages\" - - - - - - - - - WIN32;NDEBUG;_WINDOWS;_USRDLL;MERGELANG_EXPORTS;%(PreprocessorDefinitions) - MultiThreaded - - - Level3 - ProgramDatabase - - - $(OutDir)MergeLang.dll - true - Windows - true - true - true - false - - - $(OutDir)MergeLang.lib - MachineX86 - - - pushd $(ProjectDir)..\Translations\WinMerge -cscript UpdatePoFilesFromPotFile.vbs -popd -mkdir $(OutDir)\Languages\ 2> NUL -copy /Y "$(ProjectDir)..\Translations\WinMerge\*.po" "$(OutDir)\Languages\" - - - - - - - - - - X64 - - - WIN32;NDEBUG;_WINDOWS;_USRDLL;MERGELANG_EXPORTS;%(PreprocessorDefinitions) - MultiThreaded - - - Level3 - ProgramDatabase - - - $(OutDir)MergeLang.dll - true - Windows - true - true - true - false - - - $(OutDir)MergeLang.lib - MachineX64 - - - pushd $(ProjectDir)..\Translations\WinMerge -cscript UpdatePoFilesFromPotFile.vbs -popd -mkdir $(OutDir)\Languages\ 2> NUL -copy /Y "$(ProjectDir)..\Translations\WinMerge\*.po" "$(OutDir)\Languages\" - - - - - cd ..\Translations\WinMerge -cscript CreateMasterPotFile.vbs - - $(ProjectDir)..\Translations\WinMerge\English.pot - cd ..\Translations\WinMerge -cscript CreateMasterPotFile.vbs - - $(ProjectDir)..\Translations\WinMerge\English.pot - cd ..\Translations\WinMerge -cscript CreateMasterPotFile.vbs - - $(ProjectDir)..\Translations\WinMerge\English.pot - cd ..\Translations\WinMerge -cscript CreateMasterPotFile.vbs - - $(ProjectDir)..\Translations\WinMerge\English.pot - - - $(ProjectDir);%(AdditionalIncludeDirectories) - $(ProjectDir);%(AdditionalIncludeDirectories) - - - - - - \ No newline at end of file diff --git a/Src/MergeLang.vs2015.vcxproj b/Src/MergeLang.vs2015.vcxproj index 8e90d2dcb..7bde45aea 100644 --- a/Src/MergeLang.vs2015.vcxproj +++ b/Src/MergeLang.vs2015.vcxproj @@ -27,22 +27,22 @@ - DynamicLibrary + Utility Unicode v140_xp - DynamicLibrary + Utility Unicode v140_xp - DynamicLibrary + Utility Unicode v140_xp - DynamicLibrary + Utility Unicode v140_xp @@ -64,16 +64,16 @@ <_ProjectFileVersion>10.0.30319.1 - .\..\Build\MergeUnicodeDebug\ + .\..\Translations\WinMerge\ .\..\BuildTmp\MergeLang\$(Configuration)\ true - .\..\Build\$(Platform)\Merge$(Configuration)\ + .\..\Translations\WinMerge\ .\..\BuildTmp\MergeLang\$(Platform)\$(Configuration)\ true - .\..\Build\MergeUnicodeRelease\ + .\..\Translations\WinMerge\ .\..\BuildTmp\MergeLang\$(Configuration)\ false - .\..\Build\$(Platform)\Merge$(Configuration)\ + .\..\Translations\WinMerge\ .\..\BuildTmp\MergeLang\$(Platform)\$(Configuration)\ false @@ -82,34 +82,8 @@ - - Disabled - WIN32;_DEBUG;_WINDOWS;_USRDLL;MERGELANG_EXPORTS;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebug - - - Level3 - EditAndContinue - - - $(OutDir)MergeLang.dll - true - $(OutDir)MergeLang.pdb - Windows - true - false - - - $(OutDir)MergeLang.lib - MachineX86 - - pushd $(ProjectDir)..\Translations\WinMerge -cscript UpdatePoFilesFromPotFile.vbs -popd -mkdir $(OutDir)\Languages\ 2> NUL + mkdir $(OutDir)\Languages\ 2> NUL copy /Y "$(ProjectDir)..\Translations\WinMerge\*.po" "$(OutDir)\Languages\" @@ -121,29 +95,6 @@ copy /Y "$(ProjectDir)..\Translations\WinMerge\*.po" "$(OutDir)\Languages\" X64 - - Disabled - WIN32;_DEBUG;_WINDOWS;_USRDLL;MERGELANG_EXPORTS;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebug - - - Level3 - ProgramDatabase - - - $(OutDir)MergeLang.dll - true - $(OutDir)MergeLang.pdb - Windows - true - false - - - $(OutDir)MergeLang.lib - MachineX64 - pushd $(ProjectDir)..\Translations\WinMerge cscript UpdatePoFilesFromPotFile.vbs @@ -157,27 +108,6 @@ copy /Y "$(ProjectDir)..\Translations\WinMerge\*.po" "$(OutDir)\Languages\" - - WIN32;NDEBUG;_WINDOWS;_USRDLL;MERGELANG_EXPORTS;%(PreprocessorDefinitions) - MultiThreaded - - - Level3 - ProgramDatabase - - - $(OutDir)MergeLang.dll - true - Windows - true - true - true - false - - - $(OutDir)MergeLang.lib - MachineX86 - pushd $(ProjectDir)..\Translations\WinMerge cscript UpdatePoFilesFromPotFile.vbs @@ -195,27 +125,6 @@ copy /Y "$(ProjectDir)..\Translations\WinMerge\*.po" "$(OutDir)\Languages\" X64 - - WIN32;NDEBUG;_WINDOWS;_USRDLL;MERGELANG_EXPORTS;%(PreprocessorDefinitions) - MultiThreaded - - - Level3 - ProgramDatabase - - - $(OutDir)MergeLang.dll - true - Windows - true - true - true - false - - - $(OutDir)MergeLang.lib - MachineX64 - pushd $(ProjectDir)..\Translations\WinMerge cscript UpdatePoFilesFromPotFile.vbs @@ -226,27 +135,14 @@ copy /Y "$(ProjectDir)..\Translations\WinMerge\*.po" "$(OutDir)\Languages\" - cd ..\Translations\WinMerge -cscript CreateMasterPotFile.vbs - - $(ProjectDir)..\Translations\WinMerge\English.pot - cd ..\Translations\WinMerge -cscript CreateMasterPotFile.vbs - - $(ProjectDir)..\Translations\WinMerge\English.pot - cd ..\Translations\WinMerge -cscript CreateMasterPotFile.vbs - - $(ProjectDir)..\Translations\WinMerge\English.pot - cd ..\Translations\WinMerge + pushd ..\Translations\WinMerge + cscript CreateMasterPotFile.vbs +cscript UpdatePoFilesFromPotFile.vbs +popd - $(ProjectDir)..\Translations\WinMerge\English.pot + $(ProjectDir)..\Translations\WinMerge\English.pot - - $(ProjectDir);%(AdditionalIncludeDirectories) - $(ProjectDir);%(AdditionalIncludeDirectories) - @@ -255,4 +151,4 @@ cscript CreateMasterPotFile.vbs - \ No newline at end of file + diff --git a/Src/MergeLang.vs2015.vcxproj.filters b/Src/MergeLang.vs2015.vcxproj.filters index 49ae38807..73cf91a14 100644 --- a/Src/MergeLang.vs2015.vcxproj.filters +++ b/Src/MergeLang.vs2015.vcxproj.filters @@ -17,11 +17,6 @@ - - Resource FIles - - - Resource FIles diff --git a/Src/MergeLang.vs2017.vcxproj b/Src/MergeLang.vs2017.vcxproj index 997ccc70b..d90802b5e 100644 --- a/Src/MergeLang.vs2017.vcxproj +++ b/Src/MergeLang.vs2017.vcxproj @@ -23,32 +23,32 @@ {4B011DDA-2279-437D-903C-8028913AF31B} MergeLang Win32Proj - 10.0.17134.0 + 7.0 - DynamicLibrary + Utility Unicode v141_xp - false + false - DynamicLibrary + Utility Unicode v141_xp - false + false - DynamicLibrary + Utility Unicode v141_xp - false + false - DynamicLibrary + Utility Unicode v141_xp - false + false @@ -68,16 +68,16 @@ <_ProjectFileVersion>10.0.30319.1 - .\..\Build\MergeUnicodeDebug\ + .\..\Translations\WinMerge\ .\..\BuildTmp\MergeLang\$(Configuration)\ true - .\..\Build\$(Platform)\Merge$(Configuration)\ + .\..\Translations\WinMerge\ .\..\BuildTmp\MergeLang\$(Platform)\$(Configuration)\ true - .\..\Build\MergeUnicodeRelease\ + .\..\Translations\WinMerge\ .\..\BuildTmp\MergeLang\$(Configuration)\ false - .\..\Build\$(Platform)\Merge$(Configuration)\ + .\..\Translations\WinMerge\ .\..\BuildTmp\MergeLang\$(Platform)\$(Configuration)\ false @@ -86,34 +86,8 @@ - - Disabled - WIN32;_DEBUG;_WINDOWS;_USRDLL;MERGELANG_EXPORTS;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebug - - - Level3 - EditAndContinue - - - $(OutDir)MergeLang.dll - true - $(OutDir)MergeLang.pdb - Windows - true - false - - - $(OutDir)MergeLang.lib - MachineX86 - - pushd $(ProjectDir)..\Translations\WinMerge -cscript UpdatePoFilesFromPotFile.vbs -popd -mkdir $(OutDir)\Languages\ 2> NUL + mkdir $(OutDir)\Languages\ 2> NUL copy /Y "$(ProjectDir)..\Translations\WinMerge\*.po" "$(OutDir)\Languages\" @@ -125,29 +99,6 @@ copy /Y "$(ProjectDir)..\Translations\WinMerge\*.po" "$(OutDir)\Languages\" X64 - - Disabled - WIN32;_DEBUG;_WINDOWS;_USRDLL;MERGELANG_EXPORTS;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebug - - - Level3 - ProgramDatabase - - - $(OutDir)MergeLang.dll - true - $(OutDir)MergeLang.pdb - Windows - true - false - - - $(OutDir)MergeLang.lib - MachineX64 - pushd $(ProjectDir)..\Translations\WinMerge cscript UpdatePoFilesFromPotFile.vbs @@ -161,27 +112,6 @@ copy /Y "$(ProjectDir)..\Translations\WinMerge\*.po" "$(OutDir)\Languages\" - - WIN32;NDEBUG;_WINDOWS;_USRDLL;MERGELANG_EXPORTS;%(PreprocessorDefinitions) - MultiThreaded - - - Level3 - ProgramDatabase - - - $(OutDir)MergeLang.dll - true - Windows - true - true - true - false - - - $(OutDir)MergeLang.lib - MachineX86 - pushd $(ProjectDir)..\Translations\WinMerge cscript UpdatePoFilesFromPotFile.vbs @@ -199,27 +129,6 @@ copy /Y "$(ProjectDir)..\Translations\WinMerge\*.po" "$(OutDir)\Languages\" X64 - - WIN32;NDEBUG;_WINDOWS;_USRDLL;MERGELANG_EXPORTS;%(PreprocessorDefinitions) - MultiThreaded - - - Level3 - ProgramDatabase - - - $(OutDir)MergeLang.dll - true - Windows - true - true - true - false - - - $(OutDir)MergeLang.lib - MachineX64 - pushd $(ProjectDir)..\Translations\WinMerge cscript UpdatePoFilesFromPotFile.vbs @@ -230,27 +139,14 @@ copy /Y "$(ProjectDir)..\Translations\WinMerge\*.po" "$(OutDir)\Languages\" - cd ..\Translations\WinMerge -cscript CreateMasterPotFile.vbs - - $(ProjectDir)..\Translations\WinMerge\English.pot - cd ..\Translations\WinMerge -cscript CreateMasterPotFile.vbs - - $(ProjectDir)..\Translations\WinMerge\English.pot - cd ..\Translations\WinMerge -cscript CreateMasterPotFile.vbs - - $(ProjectDir)..\Translations\WinMerge\English.pot - cd ..\Translations\WinMerge + pushd ..\Translations\WinMerge + cscript CreateMasterPotFile.vbs +cscript UpdatePoFilesFromPotFile.vbs +popd - $(ProjectDir)..\Translations\WinMerge\English.pot + $(ProjectDir)..\Translations\WinMerge\English.pot - - $(ProjectDir);%(AdditionalIncludeDirectories) - $(ProjectDir);%(AdditionalIncludeDirectories) - diff --git a/Src/MergeLang.vs2017.vcxproj.filters b/Src/MergeLang.vs2017.vcxproj.filters index 49ae38807..67e92b3ac 100644 --- a/Src/MergeLang.vs2017.vcxproj.filters +++ b/Src/MergeLang.vs2017.vcxproj.filters @@ -1,29 +1,24 @@ - - - - - VBS Scripts - - - VBS Scripts - - - - - {51a3b56c-eeee-43c9-a0e7-c2561a2e74fe} - - - {6ed17c4f-f8ad-4783-b08d-accd2076a66b} - - - - - Resource FIles - - - - - Resource FIles - - + + + + + VBS Scripts + + + VBS Scripts + + + + + {51a3b56c-eeee-43c9-a0e7-c2561a2e74fe} + + + {6ed17c4f-f8ad-4783-b08d-accd2076a66b} + + + + + Resource FIles + + \ No newline at end of file diff --git a/Src/MergeLang.vs2019.vcxproj b/Src/MergeLang.vs2019.vcxproj index 5765a9a8d..90dbc2a66 100644 --- a/Src/MergeLang.vs2019.vcxproj +++ b/Src/MergeLang.vs2019.vcxproj @@ -27,28 +27,28 @@ - DynamicLibrary + Utility Unicode v141_xp - false + false - DynamicLibrary + Utility Unicode v141_xp - false + false - DynamicLibrary + Utility Unicode v141_xp - false + false - DynamicLibrary + Utility Unicode v141_xp - false + false @@ -68,16 +68,16 @@ <_ProjectFileVersion>10.0.30319.1 - .\..\Build\MergeUnicodeDebug\ + .\..\Translations\WinMerge\ .\..\BuildTmp\MergeLang\$(Configuration)\ true - .\..\Build\$(Platform)\Merge$(Configuration)\ + .\..\Translations\WinMerge\ .\..\BuildTmp\MergeLang\$(Platform)\$(Configuration)\ true - .\..\Build\MergeUnicodeRelease\ + .\..\Translations\WinMerge\ .\..\BuildTmp\MergeLang\$(Configuration)\ false - .\..\Build\$(Platform)\Merge$(Configuration)\ + .\..\Translations\WinMerge\ .\..\BuildTmp\MergeLang\$(Platform)\$(Configuration)\ false @@ -86,34 +86,8 @@ - - Disabled - WIN32;_DEBUG;_WINDOWS;_USRDLL;MERGELANG_EXPORTS;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebug - - - Level3 - EditAndContinue - - - $(OutDir)MergeLang.dll - true - $(OutDir)MergeLang.pdb - Windows - true - false - - - $(OutDir)MergeLang.lib - MachineX86 - - pushd $(ProjectDir)..\Translations\WinMerge -cscript UpdatePoFilesFromPotFile.vbs -popd -mkdir $(OutDir)\Languages\ 2> NUL + mkdir $(OutDir)\Languages\ 2> NUL copy /Y "$(ProjectDir)..\Translations\WinMerge\*.po" "$(OutDir)\Languages\" @@ -125,29 +99,6 @@ copy /Y "$(ProjectDir)..\Translations\WinMerge\*.po" "$(OutDir)\Languages\" X64 - - Disabled - WIN32;_DEBUG;_WINDOWS;_USRDLL;MERGELANG_EXPORTS;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebug - - - Level3 - ProgramDatabase - - - $(OutDir)MergeLang.dll - true - $(OutDir)MergeLang.pdb - Windows - true - false - - - $(OutDir)MergeLang.lib - MachineX64 - pushd $(ProjectDir)..\Translations\WinMerge cscript UpdatePoFilesFromPotFile.vbs @@ -161,27 +112,6 @@ copy /Y "$(ProjectDir)..\Translations\WinMerge\*.po" "$(OutDir)\Languages\" - - WIN32;NDEBUG;_WINDOWS;_USRDLL;MERGELANG_EXPORTS;%(PreprocessorDefinitions) - MultiThreaded - - - Level3 - ProgramDatabase - - - $(OutDir)MergeLang.dll - true - Windows - true - true - true - false - - - $(OutDir)MergeLang.lib - MachineX86 - pushd $(ProjectDir)..\Translations\WinMerge cscript UpdatePoFilesFromPotFile.vbs @@ -199,27 +129,6 @@ copy /Y "$(ProjectDir)..\Translations\WinMerge\*.po" "$(OutDir)\Languages\" X64 - - WIN32;NDEBUG;_WINDOWS;_USRDLL;MERGELANG_EXPORTS;%(PreprocessorDefinitions) - MultiThreaded - - - Level3 - ProgramDatabase - - - $(OutDir)MergeLang.dll - true - Windows - true - true - true - false - - - $(OutDir)MergeLang.lib - MachineX64 - pushd $(ProjectDir)..\Translations\WinMerge cscript UpdatePoFilesFromPotFile.vbs @@ -230,27 +139,14 @@ copy /Y "$(ProjectDir)..\Translations\WinMerge\*.po" "$(OutDir)\Languages\" - cd ..\Translations\WinMerge -cscript CreateMasterPotFile.vbs - - $(ProjectDir)..\Translations\WinMerge\English.pot - cd ..\Translations\WinMerge -cscript CreateMasterPotFile.vbs - - $(ProjectDir)..\Translations\WinMerge\English.pot - cd ..\Translations\WinMerge -cscript CreateMasterPotFile.vbs - - $(ProjectDir)..\Translations\WinMerge\English.pot - cd ..\Translations\WinMerge + pushd ..\Translations\WinMerge + cscript CreateMasterPotFile.vbs +cscript UpdatePoFilesFromPotFile.vbs +popd - $(ProjectDir)..\Translations\WinMerge\English.pot + $(ProjectDir)..\Translations\WinMerge\English.pot - - $(ProjectDir);%(AdditionalIncludeDirectories) - $(ProjectDir);%(AdditionalIncludeDirectories) - diff --git a/Src/MergeLang.vs2019.vcxproj.filters b/Src/MergeLang.vs2019.vcxproj.filters index 49ae38807..73cf91a14 100644 --- a/Src/MergeLang.vs2019.vcxproj.filters +++ b/Src/MergeLang.vs2019.vcxproj.filters @@ -17,11 +17,6 @@ - - Resource FIles - - - Resource FIles diff --git a/Translations/WinMerge/CreateMasterPotFile.vbs b/Translations/WinMerge/CreateMasterPotFile.vbs index 9824aa356..65b93fb47 100644 --- a/Translations/WinMerge/CreateMasterPotFile.vbs +++ b/Translations/WinMerge/CreateMasterPotFile.vbs @@ -19,7 +19,6 @@ Const ACCELERATORS_BLOCK = 5 Const PATH_ENGLISH_POT = "English.pot" Const PATH_MERGE_RC = "../../Src/Merge.rc" -Const PATH_MERGELANG_RC = "MergeLang.rc" Dim oFSO, bRunFromCmd, bInsertLineNumbers @@ -48,8 +47,8 @@ Sub Main InfoBox "Creating POT file from Merge.rc...", 3 bNecessary = True - If (oFSO.FileExists(PATH_ENGLISH_POT) = True) And (oFSO.FileExists(PATH_MERGELANG_RC) = True) Then 'If the POT and RC file exists... - bNecessary = GetArchiveBit(PATH_MERGE_RC) Or GetArchiveBit(PATH_ENGLISH_POT) Or GetArchiveBit(PATH_MERGELANG_RC) 'RCs or POT file changed? + If (oFSO.FileExists(PATH_ENGLISH_POT) = True) Then 'If the POT file exists... + bNecessary = GetArchiveBit(PATH_MERGE_RC) Or GetArchiveBit(PATH_ENGLISH_POT) 'RCs or POT file changed? End If If (bNecessary = True) Then 'If update necessary... @@ -57,7 +56,6 @@ Sub Main CreateMasterPotFile PATH_ENGLISH_POT, oStrings SetArchiveBit PATH_MERGE_RC, False SetArchiveBit PATH_ENGLISH_POT, False - SetArchiveBit PATH_MERGELANG_RC, False For Each oFile In oFSO.GetFolder(".").Files 'For all files in the current folder... If (LCase(oFSO.GetExtensionName(oFile.Name)) = "po") Then 'If a PO file... SetArchiveBit oFile.Path, True @@ -108,7 +106,7 @@ End Function Function GetStringsFromRcFile(ByVal sRcFilePath) Dim oBlacklist, oStrings, oString, oRcFile, sLine, iLine, oUIDs Dim sRcFileName, iBlockType, sReference, sString, sComment, sContext, oMatch, sTemp, sKey - Dim oLcFile, sLcLine, fContinuation + Dim fContinuation Set oBlacklist = GetStringBlacklist("StringBlacklist.txt") @@ -120,10 +118,8 @@ Function GetStringsFromRcFile(ByVal sRcFilePath) iLine = 0 iBlockType = NO_BLOCK Set oRcFile = oFSO.OpenTextFile(sRcFilePath, ForReading) - Set oLcFile = oFSO.CreateTextFile("MergeLang.rc", True) Do Until oRcFile.AtEndOfStream = True 'For all lines... - sLcLine = oRcFile.ReadLine - sLine = Trim(sLcLine) + sLine = Trim(oRcFile.ReadLine) iLine = iLine + 1 sReference = sRcFileName & ":" & iLine @@ -172,11 +168,6 @@ Function GetStringsFromRcFile(ByVal sRcFilePath) sTemp = oMatch.SubMatches(0) If (sTemp <> "") And (oBlacklist.Exists(sTemp) = False) Then 'If NOT blacklisted... sString = Replace(sTemp, """""", "\""") - If bInsertLineNumbers Then - sLcLine = Replace(sLcLine, """" & sTemp & """", """" & sReference & """", 1, 1) - Else - sLcLine = Replace(sLcLine, """" & sTemp & """", """" & sRcFileName & ":" & Hex(GetUniqueId(oUIDs, sString)) & """", 1, 1) - End If If (FoundRegExpMatch(sLine, "//#\. (.*?)$", oMatch) = True) Then 'If found a comment for the translators... sComment = Trim(oMatch.SubMatches(0)) ElseIf (FoundRegExpMatch(sLine, "//msgctxt (.*?)$", oMatch) = True) Then 'If found a context for the translation... @@ -218,7 +209,7 @@ Function GetStringsFromRcFile(ByVal sRcFilePath) Else oString.References = sReference End If - End If + End If oString.Context = sContext oString.Id = sString oString.Str = "" @@ -229,12 +220,9 @@ Function GetStringsFromRcFile(ByVal sRcFilePath) oStrings.Add sContext & sString, oString End If End If - oLcFile.WriteLine sLcLine fContinuation = sLine <> "" And InStr(",|", Right(sLine, 1)) <> 0 Loop - oLcFile.WriteLine "MERGEPOT RCDATA ""English.pot""" oRcFile.Close - oLcFile.Close End If Set GetStringsFromRcFile = oStrings End Function diff --git a/Translations/WinMerge/English.pot b/Translations/WinMerge/English.pot index d0df6e71e..e00c9a63a 100644 --- a/Translations/WinMerge/English.pot +++ b/Translations/WinMerge/English.pot @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: WinMerge\n" "Report-Msgid-Bugs-To: http://bugs.winmerge.org/\n" -"POT-Creation-Date: 2019-01-07 22:08+0000\n" +"POT-Creation-Date: 2019-01-14 01:56+0000\n" "PO-Revision-Date: \n" "Last-Translator: \n" "Language-Team: English \n" -- 2.11.0