diff --git a/autotests/kformattest.cpp b/autotests/kformattest.cpp --- a/autotests/kformattest.cpp +++ b/autotests/kformattest.cpp @@ -351,34 +351,65 @@ QCOMPARE(format.formatRelativeDate(testDate, QLocale::ShortFormat), QStringLiteral("Yesterday")); QCOMPARE(format.formatRelativeDate(testDate, QLocale::NarrowFormat), QStringLiteral("Yesterday")); - // Relative dates within a week are up to translators but there's no - // expectation that day names are shortened -- per the API docs, the date - // format is only used when the date is outside the relative window - testDate = QDate::currentDate().addDays(-7); - QCOMPARE(format.formatRelativeDate(testDate, QLocale::LongFormat), - QStringLiteral("Last %1").arg(QLocale::c().dayName(testDate.dayOfWeek(), QLocale::LongFormat))); - QCOMPARE(format.formatRelativeDate(testDate, QLocale::ShortFormat), - QStringLiteral("Last %1").arg(QLocale::c().dayName(testDate.dayOfWeek(), QLocale::LongFormat))); - QCOMPARE(format.formatRelativeDate(testDate, QLocale::NarrowFormat), - QStringLiteral("Last %1").arg(QLocale::c().dayName(testDate.dayOfWeek(), QLocale::LongFormat))); + testDate = QDate::currentDate().addDays(2); + QCOMPARE(format.formatRelativeDate(testDate, QLocale::LongFormat), QStringLiteral("In two days")); + QCOMPARE(format.formatRelativeDate(testDate, QLocale::ShortFormat), QStringLiteral("In two days")); + QCOMPARE(format.formatRelativeDate(testDate, QLocale::NarrowFormat), QStringLiteral("In two days")); + + testDate = QDate::currentDate().addDays(-2); + QCOMPARE(format.formatRelativeDate(testDate, QLocale::LongFormat), QStringLiteral("Two days ago")); + QCOMPARE(format.formatRelativeDate(testDate, QLocale::ShortFormat), QStringLiteral("Two days ago")); + QCOMPARE(format.formatRelativeDate(testDate, QLocale::NarrowFormat), QStringLiteral("Two days ago")); + + testDate = QDate::currentDate().addDays(3); + QCOMPARE(format.formatRelativeDate(testDate, QLocale::LongFormat), QStringLiteral("In three days")); + QCOMPARE(format.formatRelativeDate(testDate, QLocale::ShortFormat), QStringLiteral("In three days")); + QCOMPARE(format.formatRelativeDate(testDate, QLocale::NarrowFormat), QStringLiteral("In three days")); + + testDate = QDate::currentDate().addDays(-3); + QCOMPARE(format.formatRelativeDate(testDate, QLocale::LongFormat), QStringLiteral("Three days ago")); + QCOMPARE(format.formatRelativeDate(testDate, QLocale::ShortFormat), QStringLiteral("Three days ago")); + QCOMPARE(format.formatRelativeDate(testDate, QLocale::NarrowFormat), QStringLiteral("Three days ago")); + + testDate = QDate::currentDate().addDays(4); + QCOMPARE(format.formatRelativeDate(testDate, QLocale::LongFormat), QStringLiteral("In four days")); + QCOMPARE(format.formatRelativeDate(testDate, QLocale::ShortFormat), QStringLiteral("In four days")); + QCOMPARE(format.formatRelativeDate(testDate, QLocale::NarrowFormat), QStringLiteral("In four days")); + + testDate = QDate::currentDate().addDays(-4); + QCOMPARE(format.formatRelativeDate(testDate, QLocale::LongFormat), QStringLiteral("Four days ago")); + QCOMPARE(format.formatRelativeDate(testDate, QLocale::ShortFormat), QStringLiteral("Four days ago")); + QCOMPARE(format.formatRelativeDate(testDate, QLocale::NarrowFormat), QStringLiteral("Four days ago")); + + testDate = QDate::currentDate().addDays(5); + QCOMPARE(format.formatRelativeDate(testDate, QLocale::LongFormat), QStringLiteral("In five days")); + QCOMPARE(format.formatRelativeDate(testDate, QLocale::ShortFormat), QStringLiteral("In five days")); + QCOMPARE(format.formatRelativeDate(testDate, QLocale::NarrowFormat), QStringLiteral("In five days")); + + testDate = QDate::currentDate().addDays(-5); + QCOMPARE(format.formatRelativeDate(testDate, QLocale::LongFormat), QStringLiteral("Five days ago")); + QCOMPARE(format.formatRelativeDate(testDate, QLocale::ShortFormat), QStringLiteral("Five days ago")); + QCOMPARE(format.formatRelativeDate(testDate, QLocale::NarrowFormat), QStringLiteral("Five days ago")); + + testDate = QDate::currentDate().addDays(6); + QCOMPARE(format.formatRelativeDate(testDate, QLocale::LongFormat), QStringLiteral("In six days")); + QCOMPARE(format.formatRelativeDate(testDate, QLocale::ShortFormat), QStringLiteral("In six days")); + QCOMPARE(format.formatRelativeDate(testDate, QLocale::NarrowFormat), QStringLiteral("In six days")); + + testDate = QDate::currentDate().addDays(-6); + QCOMPARE(format.formatRelativeDate(testDate, QLocale::LongFormat), QStringLiteral("Six days ago")); + QCOMPARE(format.formatRelativeDate(testDate, QLocale::ShortFormat), QStringLiteral("Six days ago")); + QCOMPARE(format.formatRelativeDate(testDate, QLocale::NarrowFormat), QStringLiteral("Six days ago")); - testDate = QDate::currentDate().addDays(7); - QCOMPARE(format.formatRelativeDate(testDate, QLocale::LongFormat), - QStringLiteral("Next %1").arg(QLocale::c().dayName(testDate.dayOfWeek(), QLocale::LongFormat))); - QCOMPARE(format.formatRelativeDate(testDate, QLocale::ShortFormat), - QStringLiteral("Next %1").arg(QLocale::c().dayName(testDate.dayOfWeek(), QLocale::LongFormat))); - QCOMPARE(format.formatRelativeDate(testDate, QLocale::NarrowFormat), - QStringLiteral("Next %1").arg(QLocale::c().dayName(testDate.dayOfWeek(), QLocale::LongFormat))); - - testDate = QDate::currentDate().addDays(-8); + testDate = QDate::currentDate().addDays(-7); QCOMPARE(format.formatRelativeDate(testDate, QLocale::LongFormat), QLocale::c().toString(testDate, QLocale::LongFormat)); QCOMPARE(format.formatRelativeDate(testDate, QLocale::ShortFormat), QLocale::c().toString(testDate, QLocale::ShortFormat)); QCOMPARE(format.formatRelativeDate(testDate, QLocale::NarrowFormat), QLocale::c().toString(testDate, QLocale::NarrowFormat)); - testDate = QDate::currentDate().addDays(8); + testDate = QDate::currentDate().addDays(7); QCOMPARE(format.formatRelativeDate(testDate, QLocale::LongFormat), QLocale::c().toString(testDate, QLocale::LongFormat)); QCOMPARE(format.formatRelativeDate(testDate, QLocale::ShortFormat), diff --git a/src/lib/util/kformatprivate.cpp b/src/lib/util/kformatprivate.cpp --- a/src/lib/util/kformatprivate.cpp +++ b/src/lib/util/kformatprivate.cpp @@ -510,53 +510,37 @@ } const qint64 daysTo = QDate::currentDate().daysTo(date); - if (daysTo > 7 || daysTo < -7) { + if (daysTo > 6 || daysTo < -6) { return m_locale.toString(date, format); } switch (daysTo) { + case 6: + return tr("In six days"); + case 5: + return tr("In five days"); + case 4: + return tr("In four days"); + case 3: + return tr("In three days"); + case 2: + return tr("In two days"); case 1: return tr("Tomorrow"); case 0: return tr("Today"); case -1: return tr("Yesterday"); - } - - if (daysTo < -1) { - switch (date.dayOfWeek()) { - case 1: - return tr("Last Monday", "most recent such day before today"); - case 2: - return tr("Last Tuesday", "most recent such day before today"); - case 3: - return tr("Last Wednesday", "most recent such day before today"); - case 4: - return tr("Last Thursday", "most recent such day before today"); - case 5: - return tr("Last Friday", "most recent such day before today"); - case 6: - return tr("Last Saturday", "most recent such day before today"); - case 7: - return tr("Last Sunday", "most recent such day before today"); - } - } else if (daysTo > 1) { - switch (date.dayOfWeek()) { - case 1: - return tr("Next Monday", "the next such day after today"); - case 2: - return tr("Next Tuesday", "the next such day after today"); - case 3: - return tr("Next Wednesday", "the next such day after today"); - case 4: - return tr("Next Thursday", "the next such day after today"); - case 5: - return tr("Next Friday", "the next such day after today"); - case 6: - return tr("Next Saturday", "the next such day after today"); - case 7: - return tr("Next Sunday", "the next such day after today"); - } + case -2: + return tr("Two days ago"); + case -3: + return tr("Three days ago"); + case -4: + return tr("Four days ago"); + case -5: + return tr("Five days ago"); + case -6: + return tr("Six days ago"); } Q_UNREACHABLE(); }