From cc6b885be33a107eb9eac7833c6ffc1e88c33ab8 Mon Sep 17 00:00:00 2001 From: Dario Date: Sat, 16 Nov 2019 12:33:28 +0100 Subject: [PATCH] update translation --- src/cpp/HTTPInterface/LoginPage.cpp | 53 +++++++++++++++---- .../PageRequestMessagedHandler.cpp | 17 ++++-- src/cpp/ServerConfig.cpp | 2 + src/cpp/ServerConfig.h | 3 ++ src/cpp/SingletonManager/LanguageManager.cpp | 24 +++++++-- src/cpp/SingletonManager/LanguageManager.h | 2 + src/cpsp/login.cpsp | 21 ++++++-- 7 files changed, 98 insertions(+), 24 deletions(-) diff --git a/src/cpp/HTTPInterface/LoginPage.cpp b/src/cpp/HTTPInterface/LoginPage.cpp index 881dbe05a..e2e5fe1b3 100644 --- a/src/cpp/HTTPInterface/LoginPage.cpp +++ b/src/cpp/HTTPInterface/LoginPage.cpp @@ -38,6 +38,16 @@ void LoginPage::handleRequest(Poco::Net::HTTPServerRequest& request, Poco::Net:: auto langCatalog = lm->getFreeCatalog(lang); if(!form.empty()) { + auto langBtn = form.get("lang", ""); + bool langUpdated = false; + if(langBtn != "") { + auto updatedLang = chooseLanguage(request, langBtn); + if(updatedLang != lang) { + lang = updatedLang; + langCatalog = lm->getFreeCatalog(lang); + langUpdated = true; + } + } auto email = form.get("login-email", ""); auto password = form.get("login-password", ""); @@ -81,7 +91,7 @@ void LoginPage::handleRequest(Poco::Net::HTTPServerRequest& request, Poco::Net:: return; } - } else { + } else if(!langUpdated) { addError(new Error(langCatalog->gettext("Login"), langCatalog->gettext("Username and password are needed!"))); } @@ -134,7 +144,7 @@ void LoginPage::handleRequest(Poco::Net::HTTPServerRequest& request, Poco::Net:: responseStream << "
\n"; responseStream << " \n"; responseStream << " \"logo\"\n"; responseStream << " \n"; @@ -144,22 +154,43 @@ void LoginPage::handleRequest(Poco::Net::HTTPServerRequest& request, Poco::Net:: responseStream << "
\n"; responseStream << "
\n"; responseStream << "\t\t "; -#line 90 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\login.cpsp" +#line 100 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\login.cpsp" responseStream << ( getErrorsHtml() ); responseStream << "\n"; responseStream << "
\n"; - responseStream << "
\n"; + responseStream << " \n"; + responseStream << "\t\t\t \n"; responseStream << "
\n"; responseStream << "
\n"; responseStream << "
\n"; - responseStream << " \n"; responseStream << "
\n"; responseStream << "
\n"; responseStream << "
\n"; responseStream << "
\n"; - responseStream << " \n"; responseStream << "
\n"; @@ -169,27 +200,27 @@ void LoginPage::handleRequest(Poco::Net::HTTPServerRequest& request, Poco::Net:: responseStream << "
\n"; responseStream << "
\n"; responseStream << " gettext("E-Mail") ); responseStream << "\" />\n"; responseStream << "
\n"; responseStream << "
\n"; responseStream << " gettext("Password") ); responseStream << "\" />\n"; responseStream << "
\n"; responseStream << " \n"; responseStream << "
\n"; responseStream << "

"; -#line 119 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\login.cpsp" +#line 132 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\login.cpsp" responseStream << ( langCatalog->gettext("You haven't any account yet? Please follow the link to create one.") ); responseStream << "

\n"; responseStream << " "; -#line 120 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\login.cpsp" +#line 133 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\login.cpsp" responseStream << ( langCatalog->gettext("Create New Account") ); responseStream << "\n"; responseStream << "
\n"; diff --git a/src/cpp/HTTPInterface/PageRequestMessagedHandler.cpp b/src/cpp/HTTPInterface/PageRequestMessagedHandler.cpp index bf6899205..cf99db028 100644 --- a/src/cpp/HTTPInterface/PageRequestMessagedHandler.cpp +++ b/src/cpp/HTTPInterface/PageRequestMessagedHandler.cpp @@ -2,7 +2,9 @@ #include "Poco/Net/HTTPServerRequest.h" -const Poco::RegularExpression PageRequestMessagedHandler::mDetectLanguageGET("^/(?:[a-zA-Z0-9_-]*)/(en|de)"); +#include "../ServerConfig.h" + +const Poco::RegularExpression PageRequestMessagedHandler::mDetectLanguageGET("^(?:/[a-zA-Z0-9_-]*)?/(en|de)"); Languages PageRequestMessagedHandler::chooseLanguage(Poco::Net::HTTPServerRequest& request, std::string post_lang /* = std::string("") */) { @@ -12,10 +14,11 @@ Languages PageRequestMessagedHandler::chooseLanguage(Poco::Net::HTTPServerReques if (lang == LANG_NULL) { // from URL std::string uri = request.getURI(); - std::string lang_str; - mDetectLanguageGET.extract(uri, lang_str); - if (lang_str.size() > 0) { - lang = LanguageManager::languageFromString(lang_str); + std::vector matches; + //std::string lang_str; + mDetectLanguageGET.split(uri, matches); + if (matches.size() > 0) { + lang = LanguageManager::languageFromString(matches[matches.size()-1]); } else { // from Header @@ -29,5 +32,9 @@ Languages PageRequestMessagedHandler::chooseLanguage(Poco::Net::HTTPServerReques } } + if (lang == LANG_NULL) { + //lang = ServerConfig::g_default_locale; + } + return lang; } \ No newline at end of file diff --git a/src/cpp/ServerConfig.cpp b/src/cpp/ServerConfig.cpp index e8264ab61..26f150d07 100644 --- a/src/cpp/ServerConfig.cpp +++ b/src/cpp/ServerConfig.cpp @@ -38,6 +38,7 @@ namespace ServerConfig { EmailAccount g_EmailAccount; int g_SessionTimeout = SESSION_TIMEOUT_DEFAULT; std::string g_serverPath; + Languages g_default_locale; std::string g_php_serverPath; std::string g_php_serverHost; Poco::Mutex g_TimeMutex; @@ -95,6 +96,7 @@ namespace ServerConfig { DISASM_FALSERET; g_SessionTimeout = cfg.getInt("session.timeout", SESSION_TIMEOUT_DEFAULT); g_serverPath = cfg.getString("loginServer.path", ""); + g_default_locale = LanguageManager::languageFromString(cfg.getString("loginServer.default_locale")); g_php_serverPath = cfg.getString("phpServer.url", ""); g_php_serverHost = cfg.getString("phpServer.host", ""); return true; diff --git a/src/cpp/ServerConfig.h b/src/cpp/ServerConfig.h index 611af97ed..ad19858af 100644 --- a/src/cpp/ServerConfig.h +++ b/src/cpp/ServerConfig.h @@ -9,6 +9,8 @@ #include "tasks/CPUSheduler.h" +#include "SingletonManager/LanguageManager.h" + namespace ServerConfig { enum Mnemonic_Types { @@ -37,6 +39,7 @@ namespace ServerConfig { extern EmailAccount g_EmailAccount; extern int g_SessionTimeout; extern std::string g_serverPath; + extern Languages g_default_locale; extern std::string g_php_serverPath; extern std::string g_php_serverHost; extern Poco::Mutex g_TimeMutex; diff --git a/src/cpp/SingletonManager/LanguageManager.cpp b/src/cpp/SingletonManager/LanguageManager.cpp index 7d2bcb4ce..7d818f153 100644 --- a/src/cpp/SingletonManager/LanguageManager.cpp +++ b/src/cpp/SingletonManager/LanguageManager.cpp @@ -3,17 +3,23 @@ #include "Poco/Path.h" #include "Poco/File.h" +#include "../ServerConfig.h" + #include LanguageCatalog::LanguageCatalog(Languages lang) : mReferenceCount(1), mCatalog(nullptr), mThisLanguage(lang) { // TODO: Catalog init code - std::string path = Poco::Path::config() + "grd_login/LOCALE/" + LanguageManager::filenameForLanguage(lang) + ".po"; + std::string path = Poco::Path::config() + "grd_login/LOCALE/"; +#if defined(_WIN32) || defined(_WIN64) + path = "./LOCALE/"; +#endif + path += LanguageManager::filenameForLanguage(lang) + ".po"; auto file = Poco::File(path); if (file.exists()) { - std::ifstream ifs(path + LanguageManager::filenameForLanguage(lang) + ".po"); + std::ifstream ifs(path); std::string po_file{ std::istreambuf_iterator{ifs}, std::istreambuf_iterator() }; mCatalog = new spirit_po::default_catalog(spirit_po::default_catalog::from_range(po_file)); @@ -105,15 +111,24 @@ Languages LanguageManager::languageFromString(const std::string& language_key) } return LANG_NULL; } + std::string LanguageManager::keyForLanguage(Languages lang) +{ + switch(lang) { + case LANG_DE: return "de"; + case LANG_EN: return "en"; + } + return ""; +} + Poco::AutoPtr LanguageManager::getFreeCatalog(Languages lang) { if (lang >= LANG_COUNT) { //printf("[LanguageManager::getFreeCatalog] invalid language: %d\n", lang); - mLogging.information("[LanguageManager::getFreeCatalog] invalid language: %d, set to default (en_GB)", (int)lang); + mLogging.information("[LanguageManager::getFreeCatalog] invalid language: %d, set to default (%s)", (int)lang, filenameForLanguage(ServerConfig::g_default_locale)); //return nullptr; - lang = LANG_EN; + lang = ServerConfig::g_default_locale; } lock(); if (mFreeCatalogs[lang].size() > 0) { @@ -123,6 +138,7 @@ Poco::AutoPtr LanguageManager::getFreeCatalog(Languages lang) unlock(); return result; } + unlock(); Poco::AutoPtr result = new LanguageCatalog(lang); return result; } \ No newline at end of file diff --git a/src/cpp/SingletonManager/LanguageManager.h b/src/cpp/SingletonManager/LanguageManager.h index a40667edd..a24f5a807 100644 --- a/src/cpp/SingletonManager/LanguageManager.h +++ b/src/cpp/SingletonManager/LanguageManager.h @@ -79,6 +79,8 @@ public: Poco::AutoPtr getFreeCatalog(Languages lang); static std::string filenameForLanguage(Languages lang); + // return empty for null + static std::string keyForLanguage(Languages lang); static Languages languageFromString(const std::string& language_key); protected: diff --git a/src/cpsp/login.cpsp b/src/cpsp/login.cpsp index 326b529f7..730335b58 100644 --- a/src/cpsp/login.cpsp +++ b/src/cpsp/login.cpsp @@ -22,6 +22,16 @@ auto langCatalog = lm->getFreeCatalog(lang); if(!form.empty()) { + auto langBtn = form.get("lang", ""); + bool langUpdated = false; + if(langBtn != "") { + auto updatedLang = chooseLanguage(request, langBtn); + if(updatedLang != lang) { + lang = updatedLang; + langCatalog = lm->getFreeCatalog(lang); + langUpdated = true; + } + } auto email = form.get("login-email", ""); auto password = form.get("login-password", ""); @@ -65,7 +75,7 @@ return; } - } else { + } else if(!langUpdated) { addError(new Error(langCatalog->gettext("Login"), langCatalog->gettext("Username and password are needed!"))); } @@ -89,18 +99,21 @@
<%= getErrorsHtml() %>
- + +
-
-