diff options
author | Caolán McNamara <caolanm@redhat.com> | 2017-07-31 11:45:07 +0100 |
---|---|---|
committer | Caolán McNamara <caolanm@redhat.com> | 2017-07-31 17:46:15 +0200 |
commit | 6ea9062d233e153a5df0e7368af4c6a49d955485 (patch) | |
tree | 4261c15defb8df53c09a1f80ca1c65a8b95de957 /tools | |
parent | 6742173da1c50aacbd76d8dec30f11839e39ee8e (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>
Diffstat (limited to 'tools')
-rw-r--r-- | tools/source/rc/resmgr.cxx | 11 |
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) |