[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-kimageshop
Subject: [graphics/krita] libs/widgetutils: Fix translation lookup in KisActionRegistry
From: Boudewijn Rempt <null () kde ! org>
Date: 2020-09-30 8:02:52
Message-ID: 20200930080252.4A7101240107 () leptone ! kde ! org
[Download RAW message or body]
Git commit e45e4e82ebd8b26b18e1c09dcdd4f99a398779d4 by Boudewijn Rempt, on behalf of \
L. E. Segovia. Committed on 30/09/2020 at 08:02.
Pushed by rempt into branch 'master'.
Fix translation lookup in KisActionRegistry
In b55fdf3303efa79c9c315916ab44a91b794b2ebd, unknowingly for
translators, a default "action" message context was introduced for
.action files. However, this context was hardcoded, meaning that
translations would break if the text used a more specific disambiguation
context.
This is only part of the fix for bug 426992. To fix it completely, the
i18n team must start marking strings as verified -- translations marked
with 'fuzzy' are skipped by gettext.
CCBUG: 426992
CCMAIL: kimageshop@kde.org
(cherry picked from commit a48ec499fd471799e46bfa6f43ff0d544d558139)
M +31 -10 libs/widgetutils/kis_action_registry.cpp
https://invent.kde.org/graphics/krita/commit/e45e4e82ebd8b26b18e1c09dcdd4f99a398779d4
diff --git a/libs/widgetutils/kis_action_registry.cpp \
b/libs/widgetutils/kis_action_registry.cpp index cd3e3e6ccf..3a0be6922e 100644
--- a/libs/widgetutils/kis_action_registry.cpp
+++ b/libs/widgetutils/kis_action_registry.cpp
@@ -80,6 +80,11 @@ namespace {
bool m_explicitlyReset = false;
};
+ // Convenience macros to extract a child node.
+ QDomElement getChild(QDomElement xml, QString node) {
+ return xml.firstChildElement(node);
+ }
+
// Convenience macros to extract text of a child node.
QString getChildContent(QDomElement xml, QString node) {
return xml.firstChildElement(node).text();
@@ -87,17 +92,33 @@ namespace {
// Use Krita debug logging categories instead of KDE's default qDebug() for
// harmless empty strings and translations
- QString quietlyTranslate(const QString &s) {
- if (s.isEmpty()) {
- return s;
+ QString quietlyTranslate(const QDomElement &s) {
+ if (s.isNull() || s.text().isEmpty()) {
+ return QString();
+ }
+ QString translatedString;
+ const QString attrContext = QStringLiteral("context");
+ const QString attrDomain = QStringLiteral("translationDomain");
+ QString context = QStringLiteral("action");
+
+ if (!s.attribute(attrContext).isEmpty()) {
+ context = s.attribute(attrContext);
+ }
+
+ QByteArray domain = s.attribute(attrDomain).toUtf8();
+ if (domain.isEmpty()) {
+ domain = \
s.ownerDocument().documentElement().attribute(attrDomain).toUtf8(); + if \
(domain.isEmpty()) { + domain = KLocalizedString::applicationDomain();
+ }
}
- QString translatedString = i18nc("action", s.toUtf8());
- if (translatedString == s) {
- translatedString = i18n(s.toUtf8());
+ translatedString = i18ndc(domain.constData(), context.toUtf8().constData(), \
s.text().toUtf8().constData()); + if (translatedString == s.text()) {
+ translatedString = i18n(s.text().toUtf8().constData());
}
if (translatedString.isEmpty()) {
- dbgAction << "No translation found for" << s;
- return s;
+ dbgAction << "No translation found for" << s.text();
+ return s.text();
}
return translatedString;
@@ -268,7 +289,7 @@ bool KisActionRegistry::propertizeAction(const QString &name, \
QAction * a) QDomElement actionXml = info.xmlData;
if (!actionXml.text().isEmpty()) {
// i18n requires converting format from QString.
- auto getChildContent_i18n = [=](QString node){return \
quietlyTranslate(getChildContent(actionXml, node));}; + auto \
getChildContent_i18n = [=](QString node){return quietlyTranslate(getChild(actionXml, \
node));};
// Note: the fields in the .action documents marked for translation are \
determined by extractrc. QString icon = getChildContent(actionXml, "icon");
@@ -340,7 +361,7 @@ void KisActionRegistry::Private::loadActionFiles()
// <text> field
QDomElement categoryTextNode = actions.firstChild().toElement();
- QString categoryName = \
quietlyTranslate(categoryTextNode.text()); + QString categoryName \
= quietlyTranslate(categoryTextNode);
// <action></action> tags
QDomElement actionXml = categoryTextNode.nextSiblingElement();
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic