[Libreoffice-commits] online.git: wsd/FileServer.cpp wsd/LOOLWSD.cpp wsd/LOOLWSD.hpp

Libreoffice Gerrit user logerrit at kemper.freedesktop.org
Tue Mar 5 23:41:25 UTC 2019


 wsd/FileServer.cpp |   30 ++++++++++++++++++++++++++----
 wsd/LOOLWSD.cpp    |    7 +++++++
 wsd/LOOLWSD.hpp    |    2 ++
 3 files changed, 35 insertions(+), 4 deletions(-)

New commits:
commit c2aef686012c4130553a0d36f260b12615408126
Author:     Henry Castro <hcastro at collabora.com>
AuthorDate: Sun Feb 10 15:25:37 2019 -0400
Commit:     Henry Castro <hcastro at collabora.com>
CommitDate: Tue Mar 5 19:40:58 2019 -0400

    wsd: add boost::locale generation and caching
    
    Change-Id: I75009a87038632ceaddb29094d340b6d9066d5ef

diff --git a/wsd/FileServer.cpp b/wsd/FileServer.cpp
index 409a9c540..b82becbf1 100644
--- a/wsd/FileServer.cpp
+++ b/wsd/FileServer.cpp
@@ -38,6 +38,9 @@
 #include <Poco/StreamCopier.h>
 #include <Poco/StringTokenizer.h>
 #include <Poco/URI.h>
+#include <boost/locale.hpp>
+#include <boost/locale/gnu_gettext.hpp>
+#include <boost/exception/all.hpp>
 
 #include "Auth.hpp"
 #include <Common.hpp>
@@ -426,6 +429,18 @@ void FileServerRequestHandler::handleRequest(const HTTPRequest& request, Poco::M
         sendError(404, request, socket, "404 - file not found!",
                   "There seems to be a problem locating");
     }
+    catch (const boost::exception&  exc)
+    {
+        LOG_WRN("FileServerRequestHandler: " << boost::diagnostic_information(exc));
+        sendError(404, request, socket, "404 - file not found!",
+            "There seems to be a localization problem");
+    }
+    catch (const std::exception&  exc)
+    {
+        LOG_WRN("FileServerRequestHandler: " << exc.what());
+        sendError(404, request, socket, "404 - file not found!",
+            "Internal error");
+    }
 }
 
 void FileServerRequestHandler::sendError(int errorCode, const Poco::Net::HTTPRequest& request,
@@ -683,11 +698,19 @@ void FileServerRequestHandler::preprocessFile(const HTTPRequest& request, Poco::
         documentSigningDiv = "<div id=\"document-signing-bar\"></div>";
     }
 
-    std::string lang;
-    std::locale locale;
+    std::string lang("en");
     std::ostringstream ostr;
     std::istringstream istr(preprocess);
 
+    auto pos = std::find_if(params.begin(), params.end(),
+        [](const std::pair<std::string, std::string>& it) { return it.first == "lang"; });
+    if (pos != params.end())
+    {
+        lang = pos->second;
+    }
+
+    std::locale locale(LOOLWSD::Generator(lang + ".utf8"));
+
     parse(locale, istr, ostr, [&](const std::string& var) {
         bool result = true;
         if (var == "ACCESS_TOKEN")
@@ -977,8 +1000,7 @@ void FileServerRequestHandler::parse(const std::locale& locale, std::istringstre
         {
             if (state == ParseState::L10n)
             {
-                LOG_INF(locale.name());
-                //ostr << '\'' << boost::locale::gettext(varL10n.str().c_str(), locale) << '\'';
+                ostr << '\'' << boost::locale::gettext(varL10n.str().c_str(), locale) << '\'';
                 state = ParseState::None;
             }
             else ostr << token;
diff --git a/wsd/LOOLWSD.cpp b/wsd/LOOLWSD.cpp
index b135fd6bf..1f0e4dc0a 100644
--- a/wsd/LOOLWSD.cpp
+++ b/wsd/LOOLWSD.cpp
@@ -694,6 +694,7 @@ unsigned LOOLWSD::MaxConnections;
 unsigned LOOLWSD::MaxDocuments;
 std::string LOOLWSD::OverrideWatermark;
 std::set<const Poco::Util::AbstractConfiguration*> LOOLWSD::PluginConfigurations;
+boost::locale::generator LOOLWSD::Generator;
 
 static std::string UnitTestLibrary;
 
@@ -1012,6 +1013,12 @@ void LOOLWSD::initialize(Application& self)
     ChildRoot = getPathFromConfig("child_root_path");
     ServerName = config().getString("server_name");
 
+    Generator.locale_cache_enabled(true);
+    Generator.add_messages_domain("loolwsd");
+    Generator.characters(boost::locale::char_facet);
+    Generator.categories(boost::locale::message_facet);
+    Generator.add_messages_path(config().getString("application.dir", "./") + "locale");
+
     FileServerRoot = getPathFromConfig("file_server_root_path");
     NumPreSpawnedChildren = getConfigValue<int>(conf, "num_prespawn_children", 1);
     if (NumPreSpawnedChildren < 1)
diff --git a/wsd/LOOLWSD.hpp b/wsd/LOOLWSD.hpp
index f4c2db405..73571c9f0 100644
--- a/wsd/LOOLWSD.hpp
+++ b/wsd/LOOLWSD.hpp
@@ -21,6 +21,7 @@
 #include <Poco/Util/AbstractConfiguration.h>
 #include <Poco/Util/OptionSet.h>
 #include <Poco/Util/ServerApplication.h>
+#include <boost/locale.hpp>
 
 #include "Util.hpp"
 
@@ -72,6 +73,7 @@ public:
     static unsigned MaxDocuments;
     static std::string OverrideWatermark;
     static std::set<const Poco::Util::AbstractConfiguration*> PluginConfigurations;
+    static boost::locale::generator Generator;
 
     static std::vector<int> getKitPids();
 


More information about the Libreoffice-commits mailing list