mirror of
https://github.com/bulwarkmail/webmail.git
synced 2026-11-06 08:15:45 +00:00
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:
@@ -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', () => {
|
||||
|
||||
@@ -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 })}</>;
|
||||
}
|
||||
|
||||
@@ -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 () => {
|
||||
|
||||
@@ -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),
|
||||
});
|
||||
|
||||
@@ -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]);
|
||||
});
|
||||
});
|
||||
|
||||
@@ -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();
|
||||
|
||||
|
||||
@@ -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}}}"
|
||||
|
||||
@@ -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}}}"
|
||||
|
||||
@@ -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}}}"
|
||||
|
||||
@@ -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}}}"
|
||||
|
||||
@@ -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}}"
|
||||
|
||||
@@ -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}}}"
|
||||
|
||||
@@ -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}}}"
|
||||
|
||||
@@ -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}}}"
|
||||
|
||||
@@ -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}}}"
|
||||
|
||||
@@ -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}}}"
|
||||
|
||||
@@ -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}}}"
|
||||
|
||||
@@ -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}}}"
|
||||
|
||||
@@ -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}}}"
|
||||
|
||||
@@ -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} の既存の # 件に適用}}"
|
||||
|
||||
@@ -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}의 기존 메일 #개에 적용}}"
|
||||
|
||||
@@ -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}}}"
|
||||
|
||||
@@ -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} доторх байгаа # захианд хэрэглэх}}"
|
||||
|
||||
@@ -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}}}"
|
||||
|
||||
@@ -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}}}"
|
||||
|
||||
@@ -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}}}"
|
||||
|
||||
@@ -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}}}"
|
||||
|
||||
@@ -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}}}"
|
||||
|
||||
@@ -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}}}"
|
||||
|
||||
@@ -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}}}"
|
||||
|
||||
@@ -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}}}"
|
||||
|
||||
@@ -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}}"
|
||||
|
||||
@@ -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}}}"
|
||||
|
||||
@@ -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}}}"
|
||||
|
||||
@@ -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}中的 # 封既有郵件}}"
|
||||
|
||||
@@ -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}中的 # 封已有邮件}}"
|
||||
|
||||
Reference in New Issue
Block a user