summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCaolán McNamara <caolanm@redhat.com>2017-07-31 11:45:07 +0100
committerCaolán McNamara <caolanm@redhat.com>2017-07-31 17:46:15 +0200
commit6ea9062d233e153a5df0e7368af4c6a49d955485 (patch)
tree4261c15defb8df53c09a1f80ca1c65a8b95de957
parent6742173da1c50aacbd76d8dec30f11839e39ee8e (diff)
Related: tdf#109427 cache std::locales
Change-Id: I9c2f3372334a70039abbd851568e37a69deeb311 Reviewed-on: https://gerrit.libreoffice.org/40592 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Caolán McNamara <caolanm@redhat.com> Tested-by: Caolán McNamara <caolanm@redhat.com>
-rw-r--r--tools/source/rc/resmgr.cxx11
1 files changed, 9 insertions, 2 deletions
diff --git a/tools/source/rc/resmgr.cxx b/tools/source/rc/resmgr.cxx
index 293a78d24ab9..842e58cee3b9 100644
--- a/tools/source/rc/resmgr.cxx
+++ b/tools/source/rc/resmgr.cxx
@@ -91,6 +91,12 @@ namespace Translate
{
std::locale Create(const sal_Char* pPrefixName, const LanguageTag& rLocale)
{
+ static std::unordered_map<OString, std::locale, OStringHash> aCache;
+ OString sIdentifier = rLocale.getGlibcLocaleString(".UTF-8").toUtf8();
+ OString sUnique = sIdentifier + OString(pPrefixName);
+ auto aFind = aCache.find(sUnique);
+ if (aFind != aCache.end())
+ return aFind->second;
boost::locale::generator gen;
gen.characters(boost::locale::char_facet);
gen.categories(boost::locale::message_facet | boost::locale::information_facet);
@@ -100,8 +106,9 @@ namespace Translate
osl::File::getSystemPathFromFileURL(uri, path);
gen.add_messages_path(OUStringToOString(path, osl_getThreadTextEncoding()).getStr());
gen.add_messages_domain(pPrefixName);
- OString sIdentifier = rLocale.getGlibcLocaleString(".UTF-8").toUtf8();
- return gen(sIdentifier.getStr());
+ std::locale aRet(gen(sIdentifier.getStr()));
+ aCache[sUnique] = aRet;
+ return aRet;
}
OUString get(const char* pContextAndId, const std::locale &loc)