diff options
| author | Elvis Angelaccio <[email protected]> | 2019-02-17 12:26:52 +0100 |
|---|---|---|
| committer | Elvis Angelaccio <[email protected]> | 2019-03-09 12:34:36 +0100 |
| commit | 1a325946174258186b6b8dfeae6dd096d90483f2 (patch) | |
| tree | 7f789d709436b2920beea38aaf84fcb2a0136657 | |
| parent | e602e532c0f7c023db097d0eac50a9d7a652b2d1 (diff) | |
Fix context for QDateTime::toString() translations
Summary:
The documentation of QDateTime::toString() says that:
Any sequence of characters that are enclosed in single
quotes will be treated as text and not be used as an expression.
This means that translators cannot replace single quotes with other
characters such as «...». This is now described in the context of the
affected strings.
We also check that the translated string contains exactly 2 single
quotes, and we use the untraslated string otherwise.
BUG: 401382
Reviewers: lueck, aacid, cfeck
Subscribers: ltoscano, kfm-devel
Tags: #dolphin
Differential Revision: https://phabricator.kde.org/D18769
| -rw-r--r-- | src/kitemviews/kfileitemmodel.cpp | 100 |
1 files changed, 70 insertions, 30 deletions
diff --git a/src/kitemviews/kfileitemmodel.cpp b/src/kitemviews/kfileitemmodel.cpp index 61bedfaca..a6d74a77b 100644 --- a/src/kitemviews/kfileitemmodel.cpp +++ b/src/kitemviews/kfileitemmodel.cpp @@ -2046,12 +2046,20 @@ QList<QPair<int, QVariant> > KFileItemModel::timeRoleGroups(const std::function< lastMonthDate.month() == fileDate.month()) { if (daysDistance == 1) { - newGroupValue = fileTime.toString(i18nc("@title:group Date: " - "MMMM is full month name in current locale, and yyyy is " - "full year number", "'Yesterday' (MMMM, yyyy)")); - newGroupValue = i18nc("Can be used to script translation of " - "\"'Yesterday' (MMMM, yyyy)\" with context @title:group Date", - "%1", newGroupValue); + const KLocalizedString format = ki18nc("@title:group Date: " + "MMMM is full month name in current locale, and yyyy is " + "full year number", "'Yesterday' (MMMM, yyyy)"); + const QString translatedFormat = format.toString(); + if (translatedFormat.count(QLatin1Char('\'')) == 2) { + newGroupValue = fileTime.toString(translatedFormat); + newGroupValue = i18nc("Can be used to script translation of " + "\"'Yesterday' (MMMM, yyyy)\" with context @title:group Date", + "%1", newGroupValue); + } else { + qCWarning(DolphinDebug).nospace() << "A wrong translation was found: " << translatedFormat << ". Please file a bug report at bugs.kde.org"; + const QString untranslatedFormat = format.toString({ QLatin1String("en_US") }); + newGroupValue = fileTime.toString(untranslatedFormat); + } } else if (daysDistance <= 7) { newGroupValue = fileTime.toString(i18nc("@title:group Date: " "The week day name: dddd, MMMM is full month name " @@ -2061,33 +2069,65 @@ QList<QPair<int, QVariant> > KFileItemModel::timeRoleGroups(const std::function< "\"dddd (MMMM, yyyy)\" with context @title:group Date", "%1", newGroupValue); } else if (daysDistance <= 7 * 2) { - newGroupValue = fileTime.toString(i18nc("@title:group Date: " - "MMMM is full month name in current locale, and yyyy is " - "full year number", "'One Week Ago' (MMMM, yyyy)")); - newGroupValue = i18nc("Can be used to script translation of " - "\"'One Week Ago' (MMMM, yyyy)\" with context @title:group Date", - "%1", newGroupValue); + const KLocalizedString format = ki18nc("@title:group Date: " + "MMMM is full month name in current locale, and yyyy is " + "full year number", "'One Week Ago' (MMMM, yyyy)"); + const QString translatedFormat = format.toString(); + if (translatedFormat.count(QLatin1Char('\'')) == 2) { + newGroupValue = fileTime.toString(translatedFormat); + newGroupValue = i18nc("Can be used to script translation of " + "\"'One Week Ago' (MMMM, yyyy)\" with context @title:group Date", + "%1", newGroupValue); + } else { + qCWarning(DolphinDebug).nospace() << "A wrong translation was found: " << translatedFormat << ". Please file a bug report at bugs.kde.org"; + const QString untranslatedFormat = format.toString({ QLatin1String("en_US") }); + newGroupValue = fileTime.toString(untranslatedFormat); + } } else if (daysDistance <= 7 * 3) { - newGroupValue = fileTime.toString(i18nc("@title:group Date: " - "MMMM is full month name in current locale, and yyyy is " - "full year number", "'Two Weeks Ago' (MMMM, yyyy)")); - newGroupValue = i18nc("Can be used to script translation of " - "\"'Two Weeks Ago' (MMMM, yyyy)\" with context @title:group Date", - "%1", newGroupValue); + const KLocalizedString format = ki18nc("@title:group Date: " + "MMMM is full month name in current locale, and yyyy is " + "full year number", "'Two Weeks Ago' (MMMM, yyyy)"); + const QString translatedFormat = format.toString(); + if (translatedFormat.count(QLatin1Char('\'')) == 2) { + newGroupValue = fileTime.toString(translatedFormat); + newGroupValue = i18nc("Can be used to script translation of " + "\"'Two Weeks Ago' (MMMM, yyyy)\" with context @title:group Date", + "%1", newGroupValue); + } else { + qCWarning(DolphinDebug).nospace() << "A wrong translation was found: " << translatedFormat << ". Please file a bug report at bugs.kde.org"; + const QString untranslatedFormat = format.toString({ QLatin1String("en_US") }); + newGroupValue = fileTime.toString(untranslatedFormat); + } } else if (daysDistance <= 7 * 4) { - newGroupValue = fileTime.toString(i18nc("@title:group Date: " - "MMMM is full month name in current locale, and yyyy is " - "full year number", "'Three Weeks Ago' (MMMM, yyyy)")); - newGroupValue = i18nc("Can be used to script translation of " - "\"'Three Weeks Ago' (MMMM, yyyy)\" with context @title:group Date", - "%1", newGroupValue); + const KLocalizedString format = ki18nc("@title:group Date: " + "MMMM is full month name in current locale, and yyyy is " + "full year number", "'Three Weeks Ago' (MMMM, yyyy)"); + const QString translatedFormat = format.toString(); + if (translatedFormat.count(QLatin1Char('\'')) == 2) { + newGroupValue = fileTime.toString(translatedFormat); + newGroupValue = i18nc("Can be used to script translation of " + "\"'Three Weeks Ago' (MMMM, yyyy)\" with context @title:group Date", + "%1", newGroupValue); + } else { + qCWarning(DolphinDebug).nospace() << "A wrong translation was found: " << translatedFormat << ". Please file a bug report at bugs.kde.org"; + const QString untranslatedFormat = format.toString({ QLatin1String("en_US") }); + newGroupValue = fileTime.toString(untranslatedFormat); + } } else { - newGroupValue = fileTime.toString(i18nc("@title:group Date: " - "MMMM is full month name in current locale, and yyyy is " - "full year number", "'Earlier on' MMMM, yyyy")); - newGroupValue = i18nc("Can be used to script translation of " - "\"'Earlier on' MMMM, yyyy\" with context @title:group Date", - "%1", newGroupValue); + const KLocalizedString format = ki18nc("@title:group Date: " + "MMMM is full month name in current locale, and yyyy is " + "full year number", "'Earlier on' MMMM, yyyy"); + const QString translatedFormat = format.toString(); + if (translatedFormat.count(QLatin1Char('\'')) == 2) { + newGroupValue = fileTime.toString(translatedFormat); + newGroupValue = i18nc("Can be used to script translation of " + "\"'Earlier on' MMMM, yyyy\" with context @title:group Date", + "%1", newGroupValue); + } else { + qCWarning(DolphinDebug).nospace() << "A wrong translation was found: " << translatedFormat << ". Please file a bug report at bugs.kde.org"; + const QString untranslatedFormat = format.toString({ QLatin1String("en_US") }); + newGroupValue = fileTime.toString(untranslatedFormat); + } } } else { newGroupValue = fileTime.toString(i18nc("@title:group " |
