From e5420327ea5f87f7564e706373f2824cfa30ab21 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Paul=20L=C3=BCtzner?= Date: Wed, 14 Oct 2026 11:23:53 +0200 Subject: [PATCH] Bring own inbox tabs up to date with main - The migration is dated after the ones main has run since, under a name no open branch uses (#109 and #112 hold the earlier slots today). - The inbox's query ceiling is one above the shared one again: main raised that to 28 for the sidebar's change counter, and the own-tabs read is still the one statement the inbox adds on top. - French for the new strings. Co-Authored-By: Claude Opus 5.5 --- ...12140000.php => Version20261014170000.php} | 2 +- .../Mail/ThreadListQueryBudgetTest.php | 8 +++---- translations/messages.fr.yaml | 24 +++++++++++++++++++ 3 files changed, 29 insertions(+), 5 deletions(-) rename migrations/{Version20261012140000.php => Version20261014170000.php} (98%) diff --git a/migrations/Version20261012140000.php b/migrations/Version20261014170000.php similarity index 98% rename from migrations/Version20261012140000.php rename to migrations/Version20261014170000.php index a2d88791..e61b07e3 100644 --- a/migrations/Version20261012140000.php +++ b/migrations/Version20261014170000.php @@ -31,7 +31,7 @@ use Doctrine\Migrations\AbstractMigration; * category un-files its mail in the database, leaving no pointer at a row that * is gone. The owner's foreign key is CASCADE, so a category goes with its user. */ -final class Version20261012140000 extends AbstractMigration +final class Version20261014170000 extends AbstractMigration { public function getDescription(): string { diff --git a/tests/Controller/Mail/ThreadListQueryBudgetTest.php b/tests/Controller/Mail/ThreadListQueryBudgetTest.php index 172b6746..1c3753d5 100644 --- a/tests/Controller/Mail/ThreadListQueryBudgetTest.php +++ b/tests/Controller/Mail/ThreadListQueryBudgetTest.php @@ -86,10 +86,10 @@ final class ThreadListQueryBudgetTest extends WebTestCase private const int BUDGET = 28; /** - * The ceiling for the INBOX alone: twenty-eight, and the one read that moved - * it. + * The ceiling for the INBOX alone: one above BUDGET, and the one read that + * moved it. * - * The inbox was at twenty-seven exactly, so the one read the reader's own + * The inbox was at BUDGET exactly, so the one read the reader's own * tabs need — `SELECT … FROM inbox_category WHERE usr_id = ?`, an indexed * lookup of a table that is empty for most people — took it over. It is the * only statement added, it is made once per request however many callers ask @@ -100,7 +100,7 @@ final class ThreadListQueryBudgetTest extends WebTestCase * the ceiling they had: a shared ceiling raised for one view would let each * of the others regress by a query and still pass. */ - private const int INBOX_BUDGET = 28; + private const int INBOX_BUDGET = 29; /** * The ceiling for the same list NAVIGATED rather than visited. diff --git a/translations/messages.fr.yaml b/translations/messages.fr.yaml index b5c49c88..b911e6a2 100644 --- a/translations/messages.fr.yaml +++ b/translations/messages.fr.yaml @@ -2356,6 +2356,7 @@ message: default: 'rien ne l’a désigné comme courrier de masse' forum: 'un en-tête de liste de diffusion : ' gmail: 'Gmail l’a dit : ' + own_filter: "classé ici par l’un de vos filtres" # A category somebody chose by dragging the conversation onto a tab. # Nothing below the first row can move it while this holds. pinned: 'vous l’avez déplacé ici' @@ -2895,6 +2896,26 @@ settings: refresh: 'Actualiser depuis le fournisseur' subheading: 'Les adresses sous lesquelles ce compte envoie et reçoit.' system: 'système' + categories: + add: "Ajouter" + created: "Catégorie « %name% » créée." + delete: "Supprimer la catégorie" + delete_confirm: "Supprimer « %name% » ? Le courrier qui y est classé retourne dans l’onglet où il serait sinon. Aucun courrier n’est supprimé." + deleted: "Catégorie « %name% » supprimée." + empty: "Vous n’avez pas encore d’onglet personnel." + error: + empty: "Une catégorie a besoin d’un nom." + reserved: "Ce nom appartient à l’un des onglets intégrés." + taken: "Vous avez déjà une catégorie de ce nom." + too_long: "Ce nom est trop long (40 caractères au maximum)." + filters_link: "Réglages → Filtres." + heading: "Vos propres onglets" + hint: "Un onglet apparaît dans la boîte de réception tant qu’il contient du courrier. Le courrier y arrive par un filtre dont l’action est « Classer dans une catégorie » — configurez-en un dans" + name_label: "Nom" + placeholder: "p. ex. Livraisons" + rename: "Renommer" + renamed: "Renommée en « %name% »." + subheading: "Des onglets de boîte de réception que vous nommez vous-même, à côté des cinq fournis avec plMail." clock: heading: Horloge subheading: Si les heures s’écrivent au format 12 ou 24 heures, et où l’heure actuelle s’affiche. Rien n’est stocké différemment — seuls les chiffres changent. @@ -3151,6 +3172,7 @@ settings: action: applyLabel: Appliquer le libellé archive: Ignorer la boîte de réception + fileInCategory: "Classer dans une catégorie" markRead: Marquer comme lu markSpam: Marquer comme spam removeLabel: Retirer le libellé @@ -3162,6 +3184,7 @@ settings: add_condition: Ajouter une condition add_group: Ajouter un groupe all_accounts: Tous les comptes + category_missing: "(catégorie supprimée)" count: '%count% filtres' count_capped: 'Correspond à %count%+ messages existants' count_error: Pas encore un filtre utilisable @@ -3230,6 +3253,7 @@ settings: new_title: Nouveau filtre no: Non no_actions: Aucune action pour l’instant + no_categories: "Aucune catégorie pour l’instant — créez-en une d’abord." no_integrations: 'Aucun service connecté — configurez-en un d’abord dans Intégrations.' of_the_following: des conditions suivantes op: