v3 : relecture de decbc0b — lien annulé retiré de la page, liens annulés avant les sessions, pluriel espagnol

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Yvv
2026-10-23 09:26:56 +02:00
co-authored by Claude Opus 5.5
parent decbc0ba7b
commit dc2de0947c
10 changed files with 79 additions and 39 deletions
+2
View File
@@ -308,6 +308,8 @@ export const en: Messages = {
'access.sessions.closeMine': 'Close my other sessions ({n})',
'access.sessions.closed.one': '{n} session closed.',
'access.sessions.closed.other': '{n} sessions closed.',
'access.sessions.links.one': 'The sign-in link still waiting is cancelled.',
'access.sessions.links.other': 'The {n} sign-in links still waiting are cancelled.',
'access.kind.g1': 'Ğ1',
'access.kind.invite': 'invitation',
'access.kind.dev': 'dev',
+2
View File
@@ -308,6 +308,8 @@ export const es: Messages = {
'access.sessions.closeMine': 'Cerrar mis otras sesiones ({n})',
'access.sessions.closed.one': '{n} sesión cerrada.',
'access.sessions.closed.other': '{n} sesiones cerradas.',
'access.sessions.links.one': 'El enlace de conexión pendiente queda anulado.',
'access.sessions.links.other': 'Los {n} enlaces de conexión pendientes quedan anulados.',
'access.kind.g1': 'Ğ1',
'access.kind.invite': 'invitación',
'access.kind.dev': 'dev',
+2
View File
@@ -311,6 +311,8 @@ export const fr = {
'access.sessions.closeMine': 'Fermer mes autres sessions ({n})',
'access.sessions.closed.one': '{n} session fermée.',
'access.sessions.closed.other': '{n} sessions fermées.',
'access.sessions.links.one': 'Le lien de connexion encore en attente est annulé.',
'access.sessions.links.other': 'Les {n} liens de connexion encore en attente sont annulés.',
'access.kind.g1': 'Ğ1',
'access.kind.invite': 'invitation',
'access.kind.dev': 'dev',
+2 -2
View File
@@ -41,9 +41,9 @@ class I18n {
return raw.replace(/\{(\w+)\}/g, (_, k: string) => (k in params ? String(params[k]) : `{${k}}`));
};
/** `<key>.one` / `<key>.other` — French and Spanish use « one » for 0 and 1. */
/** `<key>.one` / `<key>.other` — French says « 0 session », English and Spanish « 0 sessions ». */
plural = (key: string, n: number, params: Record<string, string | number> = {}): string => {
const one = this.lang === 'en' ? n === 1 : n <= 1;
const one = this.lang === 'fr' ? n <= 1 : n === 1;
return this.t(`${key}.${one ? 'one' : 'other'}` as Key, { n, ...params });
};
+6 -3
View File
@@ -77,11 +77,14 @@
});
}
// A lost device, a person who left: their sessions close (never the one in use here).
// A lost device, a person who left: their sessions close (never the one in use here),
// and so does a sign-in link still waiting for them, even one shown just now.
async function closeSessions(id: string) {
await act(async () => {
const r = await api.del<{ closed: number }>(`/access/identities/${encodeURIComponent(id)}/sessions`);
toasts.show(i18n.plural('access.sessions.closed', r.closed));
const r = await api.del<{ closed: number; links: number }>(`/access/identities/${encodeURIComponent(id)}/sessions`);
if (relinked?.id === id) relinked = null;
const links = r.links > 0 ? ` ${i18n.plural('access.sessions.links', r.links)}` : '';
toasts.show(i18n.plural('access.sessions.closed', r.closed) + links);
});
}