From a75c3b308160ddd1004b5b49bde14685914eaca2 Mon Sep 17 00:00:00 2001 From: sdottaka Date: Sun, 2 Jun 2013 19:32:00 +0900 Subject: [PATCH] Add GNU gettext-like API --- Src/Common/LanguageSelect.cpp | 14 ++++++++++++++ Src/Common/LanguageSelect.h | 3 +++ Src/FileTransform.h | 2 +- Src/Merge.cpp | 5 +++++ Src/Merge.h | 1 + Src/MergeApp.cpp | 7 +++++++ Src/MergeApp.h | 6 +++++- 7 files changed, 36 insertions(+), 2 deletions(-) diff --git a/Src/Common/LanguageSelect.cpp b/Src/Common/LanguageSelect.cpp index d9c5d6425..5d21694a1 100644 --- a/Src/Common/LanguageSelect.cpp +++ b/Src/Common/LanguageSelect.cpp @@ -688,6 +688,7 @@ BOOL CLanguageSelect::LoadLanguageFile(LANGID wLangId) if (m_strarray.size() <= line) m_strarray.resize(line + 1); m_strarray[line] = msgid; + m_map_lineno.insert(std::make_pair(msgid, line)); } } lines.clear(); @@ -790,6 +791,7 @@ BOOL CLanguageSelect::LoadLanguageFile(LANGID wLangId) FreeLibrary(m_hCurrentDll); m_hCurrentDll = 0; m_strarray.clear(); + m_map_lineno.clear(); m_codepage = 0; if (m_hWnd) { @@ -823,6 +825,7 @@ BOOL CLanguageSelect::SetLanguage(LANGID wLangId) m_hCurrentDll = NULL; } m_strarray.clear(); + m_map_lineno.clear(); m_codepage = 0; if (wLangId != wSourceLangId) { @@ -938,6 +941,17 @@ bool CLanguageSelect::TranslateString(size_t line, std::wstring &ws) const return false; } +bool CLanguageSelect::TranslateString(const std::string& str, String &translated_str) const +{ + EngLinenoMap::const_iterator it = m_map_lineno.find(str); + if (it != m_map_lineno.end()) + { + return TranslateString(it->second, translated_str); + } + translated_str = ucr::toTString(str); + return false; +} + void CLanguageSelect::SetIndicators(CStatusBar &sb, const UINT *rgid, int n) const { HGDIOBJ hf = (HGDIOBJ)sb.SendMessage(WM_GETFONT); diff --git a/Src/Common/LanguageSelect.h b/Src/Common/LanguageSelect.h index 37128156e..e4f3885e3 100644 --- a/Src/Common/LanguageSelect.h +++ b/Src/Common/LanguageSelect.h @@ -37,6 +37,7 @@ public: bool TranslateString(size_t line, std::string &) const; bool TranslateString(size_t line, 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; @@ -54,6 +55,8 @@ private: HINSTANCE m_hCurrentDll; LANGID m_wCurLanguage; std::vector m_strarray; + typedef std::map EngLinenoMap; + EngLinenoMap m_map_lineno; unsigned m_codepage; // Implementation methods private: diff --git a/Src/FileTransform.h b/Src/FileTransform.h index 2b53e49de..b27e34ff3 100644 --- a/Src/FileTransform.h +++ b/Src/FileTransform.h @@ -84,7 +84,7 @@ public: } else { - pluginName = LoadResString(IDS_USERCHOICE_AUTOMATIC); + pluginName = _(""); } bToBeScanned = bMode; }; diff --git a/Src/Merge.cpp b/Src/Merge.cpp index 74a4902c4..bfdbbd184 100644 --- a/Src/Merge.cpp +++ b/Src/Merge.cpp @@ -895,6 +895,11 @@ String CMergeApp::LoadString(UINT id) const return m_pLangDlg->LoadString(id); } +bool CMergeApp::TranslateString(const std::string& str, String& translated_str) const +{ + return m_pLangDlg->TranslateString(str, translated_str); +} + /** * @brief Load dialog caption and translate to current WinMerge GUI language */ diff --git a/Src/Merge.h b/Src/Merge.h index df27d603f..49f2b124b 100644 --- a/Src/Merge.h +++ b/Src/Merge.h @@ -74,6 +74,7 @@ public: void TranslateMenu(HMENU) const; void TranslateDialog(HWND) const; String LoadString(UINT) const; + bool TranslateString(const std::string&, String&) const; std::wstring LoadDialogCaption(LPCTSTR) const; CMergeApp(); diff --git a/Src/MergeApp.cpp b/Src/MergeApp.cpp index cc18e94d0..e47b7bdc2 100644 --- a/Src/MergeApp.cpp +++ b/Src/MergeApp.cpp @@ -65,6 +65,13 @@ String LoadResString(unsigned id) return theApp.LoadString(id); } +String tr(const std::string &str) +{ + String translated_str; + theApp.TranslateString(str, translated_str); + return translated_str; +} + /** * @brief Lang aware version of AfxFormatStrings() */ diff --git a/Src/MergeApp.h b/Src/MergeApp.h index ead3af0a7..6dba2468c 100644 --- a/Src/MergeApp.h +++ b/Src/MergeApp.h @@ -3,6 +3,8 @@ #include "UnicodeString.h" +#define _(x) tr(x) + class COptionsMgr; /** @brief Retrieve error description from Windows; uses FormatMessage */ @@ -13,9 +15,11 @@ void LogErrorString(const String& sz); void LogErrorStringUTF8(const std::string& sz); void AppErrorMessageBox(const String& msg); - /** @brief Load string from string resources; shortcut for CString::LoadString */ +/** @brief Load string from string resources; shortcut for CString::LoadString */ String LoadResString(unsigned id); +String tr(const std::string &str); + /** @brief Lang aware version of AfxFormatStrings() */ String LangFormatStrings(unsigned, const TCHAR * const *, int); -- 2.11.0