From 9d05a8756796139d4911c8dbfd7d0c17b0e32181 Mon Sep 17 00:00:00 2001 From: Stenzek Date: Sat, 22 Aug 2026 17:58:29 +1000 Subject: [PATCH] Host: Fix broken relative time plurals --- .../create-update-and-edit-language.bat | 2 +- .../translations/duckstation-qt_en.ts | 32 +++++++++++++++++++ .../translations/update-and-edit-english.bat | 2 +- src/util/translation.cpp | 8 ++--- src/util/translation.h | 1 + 5 files changed, 39 insertions(+), 6 deletions(-) diff --git a/src/duckstation-qt/translations/create-update-and-edit-language.bat b/src/duckstation-qt/translations/create-update-and-edit-language.bat index fad833829..83ed6bb00 100644 --- a/src/duckstation-qt/translations/create-update-and-edit-language.bat +++ b/src/duckstation-qt/translations/create-update-and-edit-language.bat @@ -66,7 +66,7 @@ REM A good .ts file has been passed ECHO Updating %filename%... ECHO. SET "linguist=..\..\..\dep\prebuilt\windows-x64\bin" -SET "context=.././ ../../core/ ../../util/ -tr-function-alias QT_TRANSLATE_NOOP+=TRANSLATE,QT_TRANSLATE_NOOP+=TRANSLATE_SV,QT_TRANSLATE_NOOP+=TRANSLATE_STR,QT_TRANSLATE_NOOP+=TRANSLATE_FS,QT_TRANSLATE_NOOP3+=TRANSLATE_DISAMBIG,QT_TRANSLATE_NOOP3+=TRANSLATE_DISAMBIG_SV,QT_TRANSLATE_NOOP3+=TRANSLATE_DISAMBIG_STR,QT_TRANSLATE_NOOP3+=TRANSLATE_DISAMBIG_FS,QT_TRANSLATE_N_NOOP3+=TRANSLATE_FMT,QT_TRANSLATE_NOOP+=TRANSLATE_NOOP,QT_TRANSLATE_NOOP3+=TRANSLATE_DISAMBIG_NOOP,translate+=TRANSLATE_PLURAL_STR,translate+=TRANSLATE_PLURAL_SSTR,translate+=TRANSLATE_PLURAL_FS" +SET "context=.././ ../../core/ ../../util/ -tr-function-alias QT_TRANSLATE_NOOP+=TRANSLATE,QT_TRANSLATE_NOOP+=TRANSLATE_SV,QT_TRANSLATE_NOOP+=TRANSLATE_STR,QT_TRANSLATE_NOOP+=TRANSLATE_FS,QT_TRANSLATE_NOOP3+=TRANSLATE_DISAMBIG,QT_TRANSLATE_NOOP3+=TRANSLATE_DISAMBIG_SV,QT_TRANSLATE_NOOP3+=TRANSLATE_DISAMBIG_STR,QT_TRANSLATE_NOOP3+=TRANSLATE_DISAMBIG_FS,QT_TRANSLATE_N_NOOP3+=TRANSLATE_PLURAL_NOOP,QT_TRANSLATE_NOOP+=TRANSLATE_NOOP,QT_TRANSLATE_NOOP3+=TRANSLATE_DISAMBIG_NOOP,translate+=TRANSLATE_PLURAL_STR,translate+=TRANSLATE_PLURAL_SSTR,translate+=TRANSLATE_PLURAL_FS" "%linguist%\lupdate.exe" %context% -ts %filename% ECHO. diff --git a/src/duckstation-qt/translations/duckstation-qt_en.ts b/src/duckstation-qt/translations/duckstation-qt_en.ts index ac066219b..6d7ec5545 100644 --- a/src/duckstation-qt/translations/duckstation-qt_en.ts +++ b/src/duckstation-qt/translations/duckstation-qt_en.ts @@ -280,6 +280,38 @@ Host + + %n days ago + Date difference + + %n day ago + %n days ago + + + + %n seconds ago + Time difference + + %n second ago + %n seconds ago + + + + %n minutes ago + Time difference + + %n minute ago + %n minutes ago + + + + %n hours ago + Time difference + + %n hour ago + %n hours ago + + %n seconds diff --git a/src/duckstation-qt/translations/update-and-edit-english.bat b/src/duckstation-qt/translations/update-and-edit-english.bat index 8b29bc73c..c34c28f93 100644 --- a/src/duckstation-qt/translations/update-and-edit-english.bat +++ b/src/duckstation-qt/translations/update-and-edit-english.bat @@ -1,7 +1,7 @@ @echo off SET "linguist=..\..\..\dep\prebuilt\windows-x64\bin" -SET "context=.././ ../../core/ ../../util/ -tr-function-alias QT_TRANSLATE_NOOP+=TRANSLATE,QT_TRANSLATE_NOOP+=TRANSLATE_SV,QT_TRANSLATE_NOOP+=TRANSLATE_STR,QT_TRANSLATE_NOOP+=TRANSLATE_FS,QT_TRANSLATE_NOOP3+=TRANSLATE_DISAMBIG,QT_TRANSLATE_NOOP3+=TRANSLATE_DISAMBIG_SV,QT_TRANSLATE_NOOP3+=TRANSLATE_DISAMBIG_STR,QT_TRANSLATE_NOOP3+=TRANSLATE_DISAMBIG_FS,QT_TRANSLATE_N_NOOP3+=TRANSLATE_FMT,QT_TRANSLATE_NOOP+=TRANSLATE_NOOP,QT_TRANSLATE_NOOP3+=TRANSLATE_DISAMBIG_NOOP,translate+=TRANSLATE_PLURAL_STR,translate+=TRANSLATE_PLURAL_SSTR,translate+=TRANSLATE_PLURAL_FS -pluralonly -no-obsolete" +SET "context=.././ ../../core/ ../../util/ -tr-function-alias QT_TRANSLATE_NOOP+=TRANSLATE,QT_TRANSLATE_NOOP+=TRANSLATE_SV,QT_TRANSLATE_NOOP+=TRANSLATE_STR,QT_TRANSLATE_NOOP+=TRANSLATE_FS,QT_TRANSLATE_NOOP3+=TRANSLATE_DISAMBIG,QT_TRANSLATE_NOOP3+=TRANSLATE_DISAMBIG_SV,QT_TRANSLATE_NOOP3+=TRANSLATE_DISAMBIG_STR,QT_TRANSLATE_NOOP3+=TRANSLATE_DISAMBIG_FS,QT_TRANSLATE_N_NOOP3+=TRANSLATE_PLURAL_NOOP,QT_TRANSLATE_NOOP+=TRANSLATE_NOOP,QT_TRANSLATE_NOOP3+=TRANSLATE_DISAMBIG_NOOP,translate+=TRANSLATE_PLURAL_STR,translate+=TRANSLATE_PLURAL_SSTR,translate+=TRANSLATE_PLURAL_FS -pluralonly -no-obsolete" "%linguist%\lupdate.exe" %context% -ts duckstation-qt_en.ts pause diff --git a/src/util/translation.cpp b/src/util/translation.cpp index 530443f5f..775c217a4 100644 --- a/src/util/translation.cpp +++ b/src/util/translation.cpp @@ -178,7 +178,7 @@ TinyString Host::FormatRelativeDate(std::time_t timestamp, bool long_format /* = } else if (delta < 7 * 24 * 60 * 60) { - return TranslatePluralToTinyString("Host", TRANSLATE_DISAMBIG_NOOP("Host", "%n days ago", "Date difference"), + return TranslatePluralToTinyString("Host", TRANSLATE_PLURAL_NOOP("Host", "%n days ago", "Date difference"), "Date difference", static_cast(delta) / (24 * 60 * 60)); } } @@ -205,17 +205,17 @@ TinyString Host::FormatRelativeDateTime(std::time_t timestamp, bool long_format } else if (delta < 60) { - return TranslatePluralToTinyString("Host", TRANSLATE_DISAMBIG_NOOP("Host", "%n seconds ago", "Time difference"), + return TranslatePluralToTinyString("Host", TRANSLATE_PLURAL_NOOP("Host", "%n seconds ago", "Time difference"), "Time difference", static_cast(delta)); } else if (delta < 60 * 60) { - return TranslatePluralToTinyString("Host", TRANSLATE_DISAMBIG_NOOP("Host", "%n minutes ago", "Time difference"), + return TranslatePluralToTinyString("Host", TRANSLATE_PLURAL_NOOP("Host", "%n minutes ago", "Time difference"), "Time difference", static_cast(delta) / 60); } else if (delta < 12 * 60 * 60) { - return TranslatePluralToTinyString("Host", TRANSLATE_DISAMBIG_NOOP("Host", "%n hours ago", "Time difference"), + return TranslatePluralToTinyString("Host", TRANSLATE_PLURAL_NOOP("Host", "%n hours ago", "Time difference"), "Time difference", static_cast(delta) / (60 * 60)); } diff --git a/src/util/translation.h b/src/util/translation.h index 36fd40267..2dca2c346 100644 --- a/src/util/translation.h +++ b/src/util/translation.h @@ -75,3 +75,4 @@ s32 GetTranslatedStringImpl(std::string_view context, std::string_view msg, std: // Does not translate the string at runtime, but allows the UI to in its own way. #define TRANSLATE_NOOP(context, msg) msg #define TRANSLATE_DISAMBIG_NOOP(context, msg, disambiguation) msg +#define TRANSLATE_PLURAL_NOOP(context, msg, disambiguation) msg