diff options
author | Noel Grandin <noel.grandin@collabora.co.uk> | 2021-07-28 15:21:26 +0200 |
---|---|---|
committer | Noel Grandin <noel.grandin@collabora.co.uk> | 2021-07-29 09:22:30 +0200 |
commit | 53840ffd9755bbf2965676136c9772089891bfe8 (patch) | |
tree | 813326af6895dab50d1fc14ee2a925b5f8ad52f9 /unotools | |
parent | 4598a385ffaaf8fdc124962d347fead994450bea (diff) |
Pass context and resource string down to boost::locale separately
because this is often on a hot path, and we can avoid the splitting and
joining of strings like this.
Create a new small index type TranslateId for some type-safety.
This change only updates accessibility to use the new API, other modules
will follow in stages.
Change-Id: I289245ad34fda775812302ca7ac1588710167b34
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/119632
Tested-by: Jenkins
Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
Diffstat (limited to 'unotools')
-rw-r--r-- | unotools/source/i18n/resmgr.cxx | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/unotools/source/i18n/resmgr.cxx b/unotools/source/i18n/resmgr.cxx index d35282025c4e..9d3aec3a607c 100644 --- a/unotools/source/i18n/resmgr.cxx +++ b/unotools/source/i18n/resmgr.cxx @@ -255,6 +255,31 @@ namespace Translate return result; } + OUString get(TranslateId sContextAndId, const std::locale &loc) + { + assert(!strchr(sContextAndId.mpId, '\004') && "should be using nget, not get"); + + //if it's a key id locale, generate it here + if (std::use_facet<boost::locale::info>(loc).language() == "qtz") + { + OString sKeyId(genKeyId(OString::Concat(sContextAndId.mpContext) + "|" + std::string_view(sContextAndId.mpId))); + return OUString::fromUtf8(sKeyId) + u"\u2016" + createFromUtf8(sContextAndId.mpId, strlen(sContextAndId.mpId)); + } + + //otherwise translate it + const std::string ret = boost::locale::pgettext(sContextAndId.mpContext, sContextAndId.mpId, loc); + OUString result(ExpandVariables(createFromUtf8(ret.data(), ret.size()))); + + if (comphelper::LibreOfficeKit::isActive()) + { + // If it is de-CH, change sharp s to double s. + if (std::use_facet<boost::locale::info>(loc).country() == "CH" && + std::use_facet<boost::locale::info>(loc).language() == "de") + result = result.replaceAll(OUString::fromUtf8("\xC3\x9F"), "ss"); + } + return result; + } + OUString nget(std::string_view aContextAndIds, int n, const std::locale &loc) { OString sContextIdId(aContextAndIds); @@ -308,4 +333,10 @@ namespace Translate } } +bool TranslateId::operator==(const TranslateId& other) const +{ + return strcmp(mpContext, other.mpContext) == 0 && strcmp(mpId,other.mpId) == 0; +} + + /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |