fix: count conversations in move toasts and search results when the list shows conversations

The menu-selection and search-result-count tests expected "N emails
moved" and "N results found" for grouped rows; they now expect the
conversation wording, which is the change.
This commit is contained in:
Linus Rath
2026-11-04 22:26:37 +01:00
parent 6f6a8a9931
commit b8e3ee9115
37 changed files with 146 additions and 13 deletions
@@ -36,9 +36,15 @@ describe('SearchResultCount', () => {
expect(container.textContent).toBe('mail_list_extra.search_count {"conversations":3,"messages":10}');
});
it('counts messages when every result is its own conversation', () => {
// mail-p3-7: the rows are conversations, so the line says so.
it('counts conversations when every result is its own conversation', () => {
const { container } = render(<SearchResultCount emails={results.slice(0, 1)} hasMore={false} />);
expect(container.textContent).toBe('advanced_search.results_found {"count":1}');
expect(container.textContent).toBe('mail_p3_list.conversations_found {"count":1}');
});
it('says no results when nothing matched', () => {
const { container } = render(<SearchResultCount emails={[]} hasMore={false} />);
expect(container.textContent).toBe('mail_p3_list.conversations_found {"count":0}');
});
it('counts messages when conversations are switched off', () => {
+2
View File
@@ -22,6 +22,8 @@ export function SearchResultCount({ emails, hasMore }: { emails: Email[]; hasMor
// "100+ results" above them reads wrong as well (mail-16).
if (hasMore && !disableThreading) return <>{t("email_list.conversations_count_plus", { count: conversations })}</>;
if (hasMore) return <>{t("advanced_search.results_found_more", { count: emails.length })}</>;
// Grouped rows are conversations, even one message each (mail-p3-7).
if (!disableThreading && conversations === emails.length) return <>{t("mail_p3_list.conversations_found", { count: conversations })}</>;
if (conversations === emails.length) return <>{t("advanced_search.results_found", { count: emails.length })}</>;
return <>{t("mail_list_extra.search_count", { conversations, messages: emails.length })}</>;
}
+3 -1
View File
@@ -103,6 +103,7 @@ import {
} from "@/lib/notification-mutes";
import { serverSupportsEmailPush } from "@/lib/web-push";
import { resolveFolderCounts } from "@/lib/folder-counts";
import { batchToastTitle } from "@/lib/selection-toast";
interface SidebarProps {
mailboxes: Mailbox[];
@@ -833,6 +834,7 @@ function MailboxTreeItem({
}) {
const tNotifications = useTranslations('notifications');
const tListExtra = useTranslations('mail_list_extra');
const tRoot = useTranslations();
const tSidebar = useTranslations('sidebar');
const hasChildren = node.children.length > 0;
const isExpanded = expandedFolders.has(node.id);
@@ -875,7 +877,7 @@ function MailboxTreeItem({
toastWithUndo(
count === 1
? tListExtra('moved_to', { mailbox: mailboxName })
: tListExtra('moved_count_to', { count, mailbox: mailboxName }),
: batchToastTitle(tRoot, 'move', count, useSettingsStore.getState().disableThreading, mailboxName),
undoMoveAction(useAuthStore.getState().client, restore, undoLabels(tNotifications), receipts),
);
},
@@ -114,7 +114,7 @@ beforeEach(() => {
getClientForAccount: () => client as never,
getAllConnectedClients: () => new Map([['login-a', client]]) as never,
});
useSettingsStore.setState({ enableUnifiedMailbox: false, interfaceLayout: 'default', mailLayout: 'split', proInterface: false } as never);
useSettingsStore.setState({ enableUnifiedMailbox: false, interfaceLayout: 'default', mailLayout: 'split', proInterface: false, disableThreading: false } as never);
batchMoveToMailbox = vi.fn().mockResolvedValue(true);
useEmailStore.setState({
emails: [a, b, c], selectedEmail: a, selectedMailbox: 'inbox', selectedKeyword: null, mailboxes: [inbox, later],
@@ -159,7 +159,17 @@ describe('the Message menu with three messages selected', () => {
expect(request?.emails.map((email) => email.id)).toEqual(['a', 'b', 'c']);
await act(async () => { request!.onMove('later'); });
await waitFor(() => expect(batchMoveToMailbox).toHaveBeenCalledWith(expect.anything(), 'later', undefined, expect.any(Array)));
await waitFor(() => expect(useToastStore.getState().toasts.map((toast) => toast.title)).toContain('moved_count_to'));
// Three conversations are selected, so the toast counts conversations (mail-p3-7).
await waitFor(() => expect(useToastStore.getState().toasts.map((toast) => toast.title)).toContain('mail_p2_list.conversations_moved_to'));
});
it('with conversations off, Move to… counts emails', async () => {
useSettingsStore.setState({ disableThreading: true } as never);
render(<MailApp />);
await waitFor(() => expect(reported['message.move']).toBe(true));
act(() => { runDesktopCommand('message.move'); });
await act(async () => { useMoveDialogStore.getState().request!.onMove('later'); });
await waitFor(() => expect(useToastStore.getState().toasts.map((toast) => toast.title)).toContain('mail_list_extra.moved_count_to'));
});
it('with one message open and none selected, Reply and Move are for that one', async () => {
+3 -5
View File
@@ -1442,18 +1442,16 @@ export function MailApp({ linkSegments: routeSegments }: MailAppProps = {}) {
// of seven, or Move for the open one only, would act on mail nobody picked.
const desktopMulti = selectedEmailKeys.size > 1;
const desktopSingle = !showComposer && !!selectedEmail && !desktopMulti;
const tListExtra = useTranslations('mail_list_extra');
/** Message > Move to… on the selection, as the selection bar's Move does: one toast with the count. */
const moveSelectionTo = async (mailboxId: string) => {
if (!client) return;
const count = selectedEmailKeys.size;
// Counted as the selection bar counts: conversations when it shows them (mail-p3-7).
const rows = selectionRowCount(resolveSelectedEmails(useEmailStore.getState()), selectedEmailKeys.size, disableThreading);
const restore = restoreBatchesForSelection(client);
const receipts: CrossAccountMoveReceipt[] = [];
const destination = mailboxes.find((m) => m.id === mailboxId);
await runBatchEmailAction(() => useEmailStore.getState().batchMoveToMailbox(client, mailboxId, undefined, receipts), {
success: destination
? tListExtra('moved_count_to', { count, mailbox: getMailboxPath(destination, mailboxes) })
: tNotifications('emails_moved', { count }),
success: batchToastTitle(t, 'move', rows, disableThreading, destination ? getMailboxPath(destination, mailboxes) : undefined),
error: tNotifications('move_failed'),
undo: undoMoveAction(client, restore, undo, receipts),
});
+19
View File
@@ -5,6 +5,7 @@ import type { Email, Mailbox } from '@/lib/jmap/types';
import type { IJMAPClient } from '@/lib/jmap/client-interface';
import { useEmailStore } from '@/stores/email-store';
import { useAuthStore } from '@/stores/auth-store';
import { useSettingsStore } from '@/stores/settings-store';
const drag = vi.hoisted(() => ({
isDragging: true,
@@ -128,4 +129,22 @@ describe('useMailboxDrop', () => {
expect(moveEmailsToMailbox).toHaveBeenCalledWith(client016, ['m1'], 'f');
expect(crossAccountMoveEmails).not.toHaveBeenCalled();
});
// mail-p3-7: the toast counts what the list shows, conversations when it groups them.
it('counts the conversations dropped, or the emails with conversations off', async () => {
drag.draggedEmails = [
email({ id: 'a1', threadId: 'ta' }), email({ id: 'a2', threadId: 'ta' }),
email({ id: 'b1', threadId: 'tb' }), email({ id: 'b2', threadId: 'tb' }),
];
const counts: number[] = [];
const dropCounting = async () => {
const { result } = renderHook(() => useMailboxDrop({ mailbox: mailbox({}), onSuccess: (count) => { counts.push(count); }, onError: () => {} }));
await act(async () => { result.current.dropHandlers.onDrop(dropEvent(['a1', 'a2', 'b1', 'b2'])); });
};
useSettingsStore.setState({ disableThreading: false });
await dropCounting();
useSettingsStore.setState({ disableThreading: true });
await dropCounting();
expect(counts).toEqual([2, 4]);
});
});
+9 -3
View File
@@ -11,6 +11,8 @@ import { useDragDropContext } from "@/contexts/drag-drop-context";
import { dragDropHooks } from "@/lib/plugin-hooks";
import { toast } from "@/stores/toast-store";
import { getMailboxPath } from "@/lib/utils";
import { batchToastTitle, selectionRowCount } from "@/lib/selection-toast";
import { useSettingsStore } from "@/stores/settings-store";
/**
* Returns the source accountId for an email being dragged. In unified view
@@ -58,6 +60,7 @@ interface UseMailboxDropReturn {
export function useMailboxDrop({ mailbox, accountId, onDropComplete, onSuccess, onError }: UseMailboxDropOptions): UseMailboxDropReturn {
const tListExtra = useTranslations("mail_list_extra");
const tRoot = useTranslations();
const [isOver, setIsOver] = useState(false);
const { client } = useAuthStore(useShallow((state) => ({ client: state.client })));
const { moveEmailsToMailbox, crossAccountMoveEmails, selectedEmailKeys, clearSelection, refreshCurrentMailbox, mailboxes } = useEmailStore(useShallow((state) => ({
@@ -230,14 +233,17 @@ export function useMailboxDrop({ mailbox, accountId, onDropComplete, onSuccess,
}
const mailboxPath = getMailboxPath(mailbox, mailboxes);
// Counted as the list shows them: conversations when it groups (mail-p3-7).
const disableThreading = useSettingsStore.getState().disableThreading;
const rows = emailIds.length === 1 ? 1 : selectionRowCount(draggedEmails.filter((em) => emailIds.includes(em.id)), emailIds.length, disableThreading);
if (onSuccess) {
onSuccess(emailIds.length, mailboxPath, restore, receipts);
onSuccess(rows, mailboxPath, restore, receipts);
} else {
if (emailIds.length === 1) {
toast.success(tListExtra("moved_to", { mailbox: mailboxPath }));
} else {
toast.success(tListExtra("moved_count_to", { count: emailIds.length, mailbox: mailboxPath }));
toast.success(batchToastTitle(tRoot, "move", rows, disableThreading, mailboxPath));
}
}
@@ -255,7 +261,7 @@ export function useMailboxDrop({ mailbox, accountId, onDropComplete, onSuccess,
} finally {
endDrag();
}
}, [client, mailbox, accountId, mailboxes, isValidTarget, moveEmailsToMailbox, crossAccountMoveEmails, draggedEmails, sourceMailboxId, selectedEmailKeys, clearSelection, refreshCurrentMailbox, endDrag, markDropped, onDropComplete, onSuccess, onError, tListExtra]);
}, [client, mailbox, accountId, mailboxes, isValidTarget, moveEmailsToMailbox, crossAccountMoveEmails, draggedEmails, sourceMailboxId, selectedEmailKeys, clearSelection, refreshCurrentMailbox, endDrag, markDropped, onDropComplete, onSuccess, onError, tListExtra, tRoot]);
const valid = isValidTarget();
+3
View File
@@ -3907,6 +3907,9 @@
"title_all_accounts": "{name} ({count}، {total} في كل الحسابات)",
"title_all_accounts_only": "{name} ({total} في كل الحسابات)"
},
"mail_p3_list": {
"conversations_found": "{count, plural, =0 {لم يتم العثور على نتائج} one {تم العثور على محادثة واحدة} two {تم العثور على محادثتين} few {تم العثور على # محادثات} many {تم العثور على # محادثة} other {تم العثور على # محادثة}}"
},
"uxs_folders": {
"manage_accounts": "إدارة الحسابات…",
"apply_to_existing": "{count, plural, one {تطبيق على رسالة موجودة واحدة في {folder}} other {تطبيق على # رسائل موجودة في {folder}}}"
+3
View File
@@ -3907,6 +3907,9 @@
"title_all_accounts": "{name} ({count}, {total} a tots els comptes)",
"title_all_accounts_only": "{name} ({total} a tots els comptes)"
},
"mail_p3_list": {
"conversations_found": "{count, plural, =0 {No s'ha trobat cap resultat} one {# conversa trobada} other {# converses trobades}}"
},
"uxs_folders": {
"manage_accounts": "Gestiona els comptes…",
"apply_to_existing": "{count, plural, one {Aplica a # missatge existent de {folder}} other {Aplica a # missatges existents de {folder}}}"
+3
View File
@@ -3907,6 +3907,9 @@
"title_all_accounts": "{name} ({count}, {total} ve všech účtech)",
"title_all_accounts_only": "{name} ({total} ve všech účtech)"
},
"mail_p3_list": {
"conversations_found": "{count, plural, =0 {Nenalezeny žádné výsledky} one {Nalezena # konverzace} few {Nalezeny # konverzace} many {Nalezeno # konverzace} other {Nalezeno # konverzací}}"
},
"uxs_folders": {
"manage_accounts": "Spravovat účty…",
"apply_to_existing": "{count, plural, one {Použít na # existující zprávu ve složce {folder}} few {Použít na # existující zprávy ve složce {folder}} many {Použít na # existující zprávy ve složce {folder}} other {Použít na # existujících zpráv ve složce {folder}}}"
+3
View File
@@ -3907,6 +3907,9 @@
"title_all_accounts": "{name} ({count}, {total} i alle konti)",
"title_all_accounts_only": "{name} ({total} i alle konti)"
},
"mail_p3_list": {
"conversations_found": "{count, plural, =0 {Ingen resultater fundet} one {# samtale fundet} other {# samtaler fundet}}"
},
"uxs_folders": {
"manage_accounts": "Administrer konti…",
"apply_to_existing": "{count, plural, one {Anvend på # eksisterende besked i {folder}} other {Anvend på # eksisterende beskeder i {folder}}}"
+3
View File
@@ -3907,6 +3907,9 @@
"title_all_accounts": "{name} ({count}, {total} in allen Konten)",
"title_all_accounts_only": "{name} ({total} in allen Konten)"
},
"mail_p3_list": {
"conversations_found": "{count, plural, =0 {Keine Ergebnisse gefunden} one {# Unterhaltung gefunden} other {# Unterhaltungen gefunden}}"
},
"uxs_folders": {
"manage_accounts": "Konten verwalten…",
"apply_to_existing": "{count, plural, one {Auf # vorhandene Nachricht in {folder} anwenden} other {Auf # vorhandene Nachrichten in {folder} anwenden}}"
+3
View File
@@ -3907,6 +3907,9 @@
"title_all_accounts": "{name} ({count}, {total} in all accounts)",
"title_all_accounts_only": "{name} ({total} in all accounts)"
},
"mail_p3_list": {
"conversations_found": "{count, plural, =0 {No results found} one {# conversation found} other {# conversations found}}"
},
"uxs_folders": {
"manage_accounts": "Manage accounts…",
"apply_to_existing": "{count, plural, one {Apply to # existing message in {folder}} other {Apply to # existing messages in {folder}}}"
+3
View File
@@ -3907,6 +3907,9 @@
"title_all_accounts": "{name} ({count}, {total} en todas las cuentas)",
"title_all_accounts_only": "{name} ({total} en todas las cuentas)"
},
"mail_p3_list": {
"conversations_found": "{count, plural, =0 {No se encontraron resultados} one {# conversación encontrada} other {# conversaciones encontradas}}"
},
"uxs_folders": {
"manage_accounts": "Gestionar cuentas…",
"apply_to_existing": "{count, plural, one {Aplicar a # mensaje existente en {folder}} other {Aplicar a # mensajes existentes en {folder}}}"
+3
View File
@@ -3907,6 +3907,9 @@
"title_all_accounts": "{name} ({count}, {total} kõigil kontodel)",
"title_all_accounts_only": "{name} ({total} kõigil kontodel)"
},
"mail_p3_list": {
"conversations_found": "{count, plural, =0 {Tulemusi ei leitud} one {# vestlus leitud} other {# vestlust leitud}}"
},
"uxs_folders": {
"manage_accounts": "Halda kontosid…",
"apply_to_existing": "{count, plural, one {Rakenda # olemasolevale kirjale kaustas {folder}} other {Rakenda # olemasolevale kirjale kaustas {folder}}}"
+3
View File
@@ -3907,6 +3907,9 @@
"title_all_accounts": "{name} ({count}، {total} در همه حساب‌ها)",
"title_all_accounts_only": "{name} ({total} در همه حساب‌ها)"
},
"mail_p3_list": {
"conversations_found": "{count, plural, =0 {نتیجه‌ای یافت نشد} one {# مکالمه یافت شد} other {# مکالمه یافت شد}}"
},
"uxs_folders": {
"manage_accounts": "مدیریت حساب‌ها…",
"apply_to_existing": "{count, plural, one {اعمال روی # پیام موجود در {folder}} other {اعمال روی # پیام موجود در {folder}}}"
+3
View File
@@ -3907,6 +3907,9 @@
"title_all_accounts": "{name} ({count}, {total} dans tous les comptes)",
"title_all_accounts_only": "{name} ({total} dans tous les comptes)"
},
"mail_p3_list": {
"conversations_found": "{count, plural, =0 {Aucun résultat trouvé} one {# conversation trouvée} other {# conversations trouvées}}"
},
"uxs_folders": {
"manage_accounts": "Gérer les comptes…",
"apply_to_existing": "{count, plural, one {Appliquer à # message existant dans {folder}} other {Appliquer à # messages existants dans {folder}}}"
+3
View File
@@ -5713,6 +5713,9 @@
"title_all_accounts": "{name} ({count}, {total} בכל החשבונות)",
"title_all_accounts_only": "{name} ({total} בכל החשבונות)"
},
"mail_p3_list": {
"conversations_found": "{count, plural, =0 {לא נמצאו תוצאות} one {נמצאה שיחה אחת} two {נמצאו שתי שיחות} other {נמצאו # שיחות}}"
},
"uxs_folders": {
"manage_accounts": "ניהול חשבונות…",
"apply_to_existing": "{count, plural, one {החלה על הודעה קיימת אחת בתיקייה {folder}} other {החלה על # הודעות קיימות בתיקייה {folder}}}"
+3
View File
@@ -3907,6 +3907,9 @@
"title_all_accounts": "{name} ({count}, {total} az összes fiókban)",
"title_all_accounts_only": "{name} ({total} az összes fiókban)"
},
"mail_p3_list": {
"conversations_found": "{count, plural, =0 {Nincs találat} one {# beszélgetés található} other {# beszélgetés található}}"
},
"uxs_folders": {
"manage_accounts": "Fiókok kezelése…",
"apply_to_existing": "{count, plural, one {Alkalmazás # meglévő üzenetre itt: {folder}} other {Alkalmazás # meglévő üzenetre itt: {folder}}}"
+3
View File
@@ -3907,6 +3907,9 @@
"title_all_accounts": "{name} ({count}, {total} in tutti gli account)",
"title_all_accounts_only": "{name} ({total} in tutti gli account)"
},
"mail_p3_list": {
"conversations_found": "{count, plural, =0 {Nessun risultato trovato} one {# conversazione trovata} other {# conversazioni trovate}}"
},
"uxs_folders": {
"manage_accounts": "Gestisci account…",
"apply_to_existing": "{count, plural, one {Applica a # messaggio esistente in {folder}} other {Applica a # messaggi esistenti in {folder}}}"
+3
View File
@@ -3907,6 +3907,9 @@
"title_all_accounts": "{name} ({count}、すべてのアカウントで {total})",
"title_all_accounts_only": "{name} (すべてのアカウントで {total})"
},
"mail_p3_list": {
"conversations_found": "{count, plural, =0 {結果が見つかりません} other {#件の会話が見つかりました}}"
},
"uxs_folders": {
"manage_accounts": "アカウントを管理…",
"apply_to_existing": "{count, plural, other {{folder} の既存の # 件に適用}}"
+3
View File
@@ -3907,6 +3907,9 @@
"title_all_accounts": "{name} ({count}, 모든 계정에 {total})",
"title_all_accounts_only": "{name} (모든 계정에 {total})"
},
"mail_p3_list": {
"conversations_found": "{count, plural, =0 {검색 결과가 없습니다} other {대화 #개를 찾았습니다}}"
},
"uxs_folders": {
"manage_accounts": "계정 관리…",
"apply_to_existing": "{count, plural, other {{folder}의 기존 메일 #개에 적용}}"
+3
View File
@@ -3907,6 +3907,9 @@
"title_all_accounts": "{name} ({count}, {total} visos kontos)",
"title_all_accounts_only": "{name} ({total} visos kontos)"
},
"mail_p3_list": {
"conversations_found": "{count, plural, =0 {Nekas netika atrasts} zero {Atrastas # sarunas} one {Atrasta # saruna} other {Atrastas # sarunas}}"
},
"uxs_folders": {
"manage_accounts": "Pārvaldīt kontus…",
"apply_to_existing": "{count, plural, zero {Piemērot # esošajām vēstulēm mapē {folder}} one {Piemērot # esošajai vēstulei mapē {folder}} other {Piemērot # esošajām vēstulēm mapē {folder}}}"
+3
View File
@@ -3907,6 +3907,9 @@
"title_all_accounts": "{name} ({count}, бүх бүртгэлд {total})",
"title_all_accounts_only": "{name} (бүх бүртгэлд {total})"
},
"mail_p3_list": {
"conversations_found": "{count, plural, =0 {Үр дүн олдсонгүй} one {# харилцан яриа олдлоо} other {# харилцан яриа олдлоо}}"
},
"uxs_folders": {
"manage_accounts": "Данснуудыг удирдах…",
"apply_to_existing": "{count, plural, one {{folder} доторх байгаа # захианд хэрэглэх} other {{folder} доторх байгаа # захианд хэрэглэх}}"
+3
View File
@@ -3907,6 +3907,9 @@
"title_all_accounts": "{name} ({count}, {total} i alle kontoer)",
"title_all_accounts_only": "{name} ({total} i alle kontoer)"
},
"mail_p3_list": {
"conversations_found": "{count, plural, =0 {Ingen treff} one {# samtale funnet} other {# samtaler funnet}}"
},
"uxs_folders": {
"manage_accounts": "Administrer kontoer…",
"apply_to_existing": "{count, plural, one {Bruk på # eksisterende melding i {folder}} other {Bruk på # eksisterende meldinger i {folder}}}"
+3
View File
@@ -3907,6 +3907,9 @@
"title_all_accounts": "{name} ({count}, {total} in alle accounts)",
"title_all_accounts_only": "{name} ({total} in alle accounts)"
},
"mail_p3_list": {
"conversations_found": "{count, plural, =0 {Geen resultaten gevonden} one {# gesprek gevonden} other {# gesprekken gevonden}}"
},
"uxs_folders": {
"manage_accounts": "Accounts beheren…",
"apply_to_existing": "{count, plural, one {Toepassen op # bestaand bericht in {folder}} other {Toepassen op # bestaande berichten in {folder}}}"
+3
View File
@@ -3907,6 +3907,9 @@
"title_all_accounts": "{name} ({count}, {total} we wszystkich kontach)",
"title_all_accounts_only": "{name} ({total} we wszystkich kontach)"
},
"mail_p3_list": {
"conversations_found": "{count, plural, =0 {Nie znaleziono wyników} one {Znaleziono # konwersację} few {Znaleziono # konwersacje} many {Znaleziono # konwersacji} other {Znaleziono # konwersacji}}"
},
"uxs_folders": {
"manage_accounts": "Zarządzaj kontami…",
"apply_to_existing": "{count, plural, one {Zastosuj do # istniejącej wiadomości w folderze {folder}} few {Zastosuj do # istniejących wiadomości w folderze {folder}} many {Zastosuj do # istniejących wiadomości w folderze {folder}} other {Zastosuj do # istniejącej wiadomości w folderze {folder}}}"
+3
View File
@@ -3907,6 +3907,9 @@
"title_all_accounts": "{name} ({count}, {total} em todas as contas)",
"title_all_accounts_only": "{name} ({total} em todas as contas)"
},
"mail_p3_list": {
"conversations_found": "{count, plural, =0 {Nenhum resultado encontrado} one {# conversa encontrada} other {# conversas encontradas}}"
},
"uxs_folders": {
"manage_accounts": "Gerir contas…",
"apply_to_existing": "{count, plural, one {Aplicar a # mensagem existente em {folder}} other {Aplicar a # mensagens existentes em {folder}}}"
+3
View File
@@ -3907,6 +3907,9 @@
"title_all_accounts": "{name} ({count}, {total} în toate conturile)",
"title_all_accounts_only": "{name} ({total} în toate conturile)"
},
"mail_p3_list": {
"conversations_found": "{count, plural, =0 {Nu s-au găsit rezultate} one {# conversație găsită} few {# conversații găsite} other {# de conversații găsite}}"
},
"uxs_folders": {
"manage_accounts": "Gestionați conturile…",
"apply_to_existing": "{count, plural, one {Aplicați la # mesaj existent din {folder}} few {Aplicați la # mesaje existente din {folder}} other {Aplicați la # de mesaje existente din {folder}}}"
+3
View File
@@ -3907,6 +3907,9 @@
"title_all_accounts": "{name} ({count}, {total} во всех аккаунтах)",
"title_all_accounts_only": "{name} ({total} во всех аккаунтах)"
},
"mail_p3_list": {
"conversations_found": "{count, plural, =0 {Ничего не найдено} one {Найдена # беседа} few {Найдено # беседы} many {Найдено # бесед} other {Найдено # беседы}}"
},
"uxs_folders": {
"manage_accounts": "Управление аккаунтами…",
"apply_to_existing": "{count, plural, one {Применить к # имеющемуся письму в папке {folder}} few {Применить к # имеющимся письмам в папке {folder}} many {Применить к # имеющимся письмам в папке {folder}} other {Применить к # имеющегося письма в папке {folder}}}"
+3
View File
@@ -3907,6 +3907,9 @@
"title_all_accounts": "{name} ({count}, {total} vo všetkých účtoch)",
"title_all_accounts_only": "{name} ({total} vo všetkých účtoch)"
},
"mail_p3_list": {
"conversations_found": "{count, plural, =0 {Neboli nájdené žiadne výsledky} one {Nájdená # konverzácia} few {Nájdené # konverzácie} many {Nájdených # konverzácií} other {Nájdených # konverzácií}}"
},
"uxs_folders": {
"manage_accounts": "Spravovať účty…",
"apply_to_existing": "{count, plural, one {Použiť na # existujúcu správu v priečinku {folder}} few {Použiť na # existujúce správy v priečinku {folder}} many {Použiť na # existujúcej správy v priečinku {folder}} other {Použiť na # existujúcich správ v priečinku {folder}}}"
+3
View File
@@ -1057,6 +1057,9 @@
"title_all_accounts": "{name} ({count}, {total} ในทุกบัญชี)",
"title_all_accounts_only": "{name} ({total} ในทุกบัญชี)"
},
"mail_p3_list": {
"conversations_found": "{count, plural, =0 {ไม่พบผลการค้นหา} other {พบ # การสนทนา}}"
},
"uxs_folders": {
"manage_accounts": "จัดการบัญชี…",
"apply_to_existing": "{count, plural, other {นำไปใช้กับข้อความเดิม # ฉบับใน {folder}}}"
+3
View File
@@ -3907,6 +3907,9 @@
"title_all_accounts": "{name} ({count}, tüm hesaplarda {total})",
"title_all_accounts_only": "{name} (tüm hesaplarda {total})"
},
"mail_p3_list": {
"conversations_found": "{count, plural, =0 {Sonuç bulunamadı} one {# konuşma bulundu} other {# konuşma bulundu}}"
},
"uxs_folders": {
"manage_accounts": "Hesapları yönet…",
"apply_to_existing": "{count, plural, one {{folder} içindeki # mevcut iletiye uygula} other {{folder} içindeki # mevcut iletiye uygula}}"
+3
View File
@@ -3907,6 +3907,9 @@
"title_all_accounts": "{name} ({count}, {total} в усіх акаунтах)",
"title_all_accounts_only": "{name} ({total} в усіх акаунтах)"
},
"mail_p3_list": {
"conversations_found": "{count, plural, =0 {Результатів не знайдено} one {Знайдено # розмову} few {Знайдено # розмови} many {Знайдено # розмов} other {Знайдено # розмови}}"
},
"uxs_folders": {
"manage_accounts": "Керувати обліковими записами…",
"apply_to_existing": "{count, plural, one {Застосувати до # наявного листа в теці {folder}} few {Застосувати до # наявних листів у теці {folder}} many {Застосувати до # наявних листів у теці {folder}} other {Застосувати до # наявного листа в теці {folder}}}"
+3
View File
@@ -3919,6 +3919,9 @@
"title_all_accounts": "{name} ({count}, {total} trong mọi tài khoản)",
"title_all_accounts_only": "{name} ({total} trong mọi tài khoản)"
},
"mail_p3_list": {
"conversations_found": "{count, plural, =0 {Không tìm thấy kết quả nào} other {Tìm thấy # cuộc trò chuyện}}"
},
"uxs_folders": {
"manage_accounts": "Quản lý tài khoản…",
"apply_to_existing": "{count, plural, one {Áp dụng cho # thư hiện có trong {folder}} other {Áp dụng cho # thư hiện có trong {folder}}}"
+3
View File
@@ -3907,6 +3907,9 @@
"title_all_accounts": "{name} ({count}、所有帳號共 {total})",
"title_all_accounts_only": "{name} (所有帳號共 {total})"
},
"mail_p3_list": {
"conversations_found": "{count, plural, =0 {找不到結果} other {找到 # 個對話串}}"
},
"uxs_folders": {
"manage_accounts": "管理帳號…",
"apply_to_existing": "{count, plural, other {套用到{folder}中的 # 封既有郵件}}"
+3
View File
@@ -3907,6 +3907,9 @@
"title_all_accounts": "{name} ({count}、所有账户共 {total})",
"title_all_accounts_only": "{name} (所有账户共 {total})"
},
"mail_p3_list": {
"conversations_found": "{count, plural, =0 {未找到结果} other {找到 # 个会话}}"
},
"uxs_folders": {
"manage_accounts": "管理账户…",
"apply_to_existing": "{count, plural, other {应用于{folder}中的 # 封已有邮件}}"