This commit is contained in:
rustmailer
2026-05-07 11:56:08 +08:00
parent 2802c7ea07
commit 7eacfbfb20
27 changed files with 465 additions and 353 deletions
+1 -38
View File
@@ -17,11 +17,11 @@
// along with this program. If not, see <http://www.gnu.org/licenses/>. // along with this program. If not, see <http://www.gnu.org/licenses/>.
use crate::{ use crate::{
raise_error, utc_now,
{ {
database::{async_find_impl, delete_impl, manager::DB_MANAGER, update_impl, upsert_impl}, database::{async_find_impl, delete_impl, manager::DB_MANAGER, update_impl, upsert_impl},
error::{code::ErrorCode, BichonResult}, error::{code::ErrorCode, BichonResult},
}, },
raise_error, utc_now,
}; };
use native_db::*; use native_db::*;
use native_model::{native_model, Model}; use native_model::{native_model, Model};
@@ -91,7 +91,6 @@ pub struct DownloadState {
pub history: Vec<DownloadSession>, pub history: Vec<DownloadSession>,
pub last_trigger_at: i64, pub last_trigger_at: i64,
pub last_finished_at: Option<i64>, pub last_finished_at: Option<i64>,
pub global_errors: Vec<AccountError>,
} }
#[derive(Clone, Debug, Default, Eq, PartialEq, Deserialize, Serialize)] #[derive(Clone, Debug, Default, Eq, PartialEq, Deserialize, Serialize)]
@@ -122,7 +121,6 @@ impl DownloadState {
}), }),
history: Default::default(), history: Default::default(),
last_finished_at: Default::default(), last_finished_at: Default::default(),
global_errors: Default::default(),
}; };
upsert_impl(DB_MANAGER.envelope_db(), state).await upsert_impl(DB_MANAGER.envelope_db(), state).await
} }
@@ -305,39 +303,4 @@ impl DownloadState {
}) })
.await .await
} }
pub async fn append_global_error_message(account_id: u64, error: String) -> BichonResult<()> {
Self::update_state(account_id, move |current| {
let mut updated = current.clone();
updated.append_global_error_log(error);
Ok(updated)
})
.await
}
fn append_global_error_log(&mut self, error: String) {
let new_error = AccountError {
error,
at: utc_now!(),
};
self.global_errors.push(new_error);
let to_remove = self.global_errors.len().saturating_sub(30);
if to_remove > 0 {
self.global_errors.drain(0..to_remove);
}
}
pub async fn clear_global_errors(account_id: u64) -> BichonResult<()> {
Self::update_state(account_id, move |current| {
let mut updated = current.clone();
updated.clear_global_error_log();
Ok(updated)
})
.await
}
fn clear_global_error_log(&mut self) {
self.global_errors.clear();
}
} }
+18
View File
@@ -1,3 +1,21 @@
//
// Copyright (c) 2025-2026 rustmailer.com (https://rustmailer.com)
//
// This file is part of the Bichon Email Archiving Project
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Affero General Public License for more details.
//
// You should have received a copy of the GNU Affero General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
use serde::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};
#[derive(Clone, Debug, Default, Eq, PartialEq, Deserialize, Serialize)] #[derive(Clone, Debug, Default, Eq, PartialEq, Deserialize, Serialize)]
+3 -4
View File
@@ -21,8 +21,8 @@ use crate::account::state::DownloadState;
use crate::cache::imap::download::process_imap_download; use crate::cache::imap::download::process_imap_download;
use crate::common::periodic::{PeriodicTask, TaskHandle}; use crate::common::periodic::{PeriodicTask, TaskHandle};
use crate::oauth2::token::OAuth2AccessToken; use crate::oauth2::token::OAuth2AccessToken;
use crate::{account::migration::AccountModel, error::BichonResult};
use crate::utc_now; use crate::utc_now;
use crate::{account::migration::AccountModel, error::BichonResult};
use std::collections::HashMap; use std::collections::HashMap;
use std::sync::atomic::{AtomicI64, Ordering}; use std::sync::atomic::{AtomicI64, Ordering};
use std::{sync::LazyLock, time::Duration}; use std::{sync::LazyLock, time::Duration};
@@ -83,7 +83,7 @@ impl AccountSyncTask {
} }
} }
if let Err(e) = process_imap_download(&account, internal_token).await { if let Err(e) = process_imap_download(&account, internal_token).await {
DownloadState::append_global_error_message( DownloadState::append_session_error(
account.id, account.id,
format!("error in account download task: {:#?}", e), format!("error in account download task: {:#?}", e),
) )
@@ -140,8 +140,7 @@ impl AccountSyncTask {
account_id account_id
); );
token.cancel(); token.cancel();
if let Err(_) = tokio::time::timeout(Duration::from_secs(5), handler.stop()).await if let Err(_) = tokio::time::timeout(Duration::from_secs(5), handler.stop()).await {
{
error!( error!(
"Shutdown: Account {} download task forced timeout.", "Shutdown: Account {} download task forced timeout.",
account_id account_id
-1
View File
@@ -82,7 +82,6 @@ export interface DownloadState {
history: DownloadSession[]; history: DownloadSession[];
last_trigger_at: number; last_trigger_at: number;
last_finished_at: number | null; last_finished_at: number | null;
global_errors: AccountError[];
} }
@@ -0,0 +1,159 @@
//
// Copyright (c) 2025-2026 rustmailer.com (https://rustmailer.com)
//
// This file is part of the Bichon Email Archiving Project
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Affero General Public License for more details.
//
// You should have received a copy of the GNU Affero General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
//
import * as React from 'react'
import { Mail, Database } from 'lucide-react'
import { useTranslation } from 'react-i18next'
import { cn } from '@/lib/utils'
import { Button } from '@/components/ui/button'
import {
Dialog,
DialogContent,
DialogDescription,
DialogFooter,
DialogHeader,
DialogTitle,
} from '@/components/ui/dialog'
import { Label } from '@/components/ui/label'
import { RadioGroup, RadioGroupItem } from '@/components/ui/radio-group'
import { useAccountContext } from '../context'
export type AddAccountType = 'IMAP' | 'NoSync'
interface Props {
open: boolean;
onOpenChange: (open: boolean) => void;
}
export function AddAccountDialog({
open,
onOpenChange
}: Props) {
const { t } = useTranslation()
const { setOpen } = useAccountContext()
const [value, setValue] = React.useState<AddAccountType>('IMAP')
function handleContinue() {
if (value === 'IMAP') {
setOpen('add-imap')
} else {
setOpen('add-nosync')
}
}
return (
<Dialog open={open} onOpenChange={onOpenChange}>
<DialogContent className="sm:max-w-xl">
<DialogHeader className="text-left">
<DialogTitle>
{t('accounts.add')}
</DialogTitle>
<DialogDescription>
{t('accounts.selectAccountType')}
</DialogDescription>
</DialogHeader>
<RadioGroup
value={value}
onValueChange={(v) => setValue(v as AddAccountType)}
className="space-y-4 py-2"
>
<Label
htmlFor="imap-account"
className={cn(
'flex cursor-pointer items-start gap-4 rounded-2xl border p-5 transition-all',
value === 'IMAP'
? 'border-primary bg-muted/50'
: 'hover:bg-muted/30'
)}
>
<RadioGroupItem
value="IMAP"
id="imap-account"
className="mt-1"
/>
<div className="flex flex-1 gap-4">
<div className="rounded-xl border p-2">
<Mail className="h-5 w-5" />
</div>
<div className="space-y-1">
<div className="font-medium">
{t('accounts.imapAccount')}
</div>
<div className="text-sm text-muted-foreground">
{t('accounts.imapAccountDescription')}
</div>
</div>
</div>
</Label>
<Label
htmlFor="nosync-account"
className={cn(
'flex cursor-pointer items-start gap-4 rounded-2xl border p-5 transition-all',
value === 'NoSync'
? 'border-primary bg-muted/50'
: 'hover:bg-muted/30'
)}
>
<RadioGroupItem
value="NoSync"
id="nosync-account"
className="mt-1"
/>
<div className="flex flex-1 gap-4">
<div className="rounded-xl border p-2">
<Database className="h-5 w-5" />
</div>
<div className="space-y-1">
<div className="font-medium">
{t('accounts.noSyncAccount')}
</div>
<div className="text-sm text-muted-foreground">
{t('accounts.noSyncAccountDescription')}
</div>
</div>
</div>
</Label>
</RadioGroup>
<DialogFooter>
<Button
variant="outline"
onClick={() => onOpenChange(false)}
>
{t('common.cancel')}
</Button>
<Button onClick={handleContinue}>
{t('accounts.continue')}
</Button>
</DialogFooter>
</DialogContent>
</Dialog>
)
}
@@ -38,7 +38,6 @@ import {
AccordionTrigger, AccordionTrigger,
} from "@/components/ui/accordion" } from "@/components/ui/accordion"
import { import {
CheckCircle,
Clock, Clock,
Loader2, Loader2,
Activity, Activity,
@@ -55,7 +54,6 @@ interface Props {
} }
function StatusBadge({ status }: { status: string }) { function StatusBadge({ status }: { status: string }) {
// 保持颜色逻辑,但在暗色模式下这些颜色也相对友好,如果需要完全适配可调整为 bg-primary/10 等
const map: Record<string, string> = { const map: Record<string, string> = {
Running: 'bg-blue-500/10 text-blue-600', Running: 'bg-blue-500/10 text-blue-600',
Downloading: 'bg-blue-500/10 text-blue-600', Downloading: 'bg-blue-500/10 text-blue-600',
@@ -141,7 +139,6 @@ export function RunningStateDialog({ currentRow, open, onOpenChange }: Props) {
const session = state?.active_session const session = state?.active_session
const history = state?.history || [] const history = state?.history || []
const globalErrors = state?.global_errors || []
return ( return (
<Dialog open={open} onOpenChange={onOpenChange}> <Dialog open={open} onOpenChange={onOpenChange}>
@@ -168,10 +165,6 @@ export function RunningStateDialog({ currentRow, open, onOpenChange }: Props) {
{t('accounts.runningState.tabs.history')} {t('accounts.runningState.tabs.history')}
<Badge variant="secondary" className="ml-2 h-4 px-1 text-[10px] font-bold">{history.length}</Badge> <Badge variant="secondary" className="ml-2 h-4 px-1 text-[10px] font-bold">{history.length}</Badge>
</TabsTrigger> </TabsTrigger>
<TabsTrigger value="errors" className="whitespace-nowrap data-[state=active]:border-b-2 data-[state=active]:border-primary rounded-none h-full bg-transparent shadow-none px-0 text-xs sm:text-sm font-bold">
{t('accounts.runningState.tabs.global_errors')}
{globalErrors.length > 0 && <Badge variant="destructive" className="ml-2 h-4 px-1 text-[10px] font-bold">{globalErrors.length}</Badge>}
</TabsTrigger>
</TabsList> </TabsList>
</div> </div>
@@ -395,82 +388,6 @@ export function RunningStateDialog({ currentRow, open, onOpenChange }: Props) {
</div> </div>
</ScrollArea> </ScrollArea>
</TabsContent> </TabsContent>
<TabsContent value="errors" className="h-full m-0 data-[state=active]:flex flex-col">
<ScrollArea className="flex-1">
<div className="p-4 sm:p-6">
{globalErrors.length === 0 ? (
<div className="py-32 text-center text-muted-foreground">
<CheckCircle className="w-12 h-12 mx-auto mb-2 opacity-20" />
<p className="font-medium italic text-sm">{t('accounts.runningState.empty.no_global_errors')}</p>
</div>
) : (
<div className="relative">
<div className="absolute left-[19px] top-2 bottom-2 w-0.5 bg-destructive/20" />
<div className="space-y-6">
{[...globalErrors]
.sort((a, b) => new Date(b.at).getTime() - new Date(a.at).getTime())
.map((e, i) => (
<div key={i} className="relative pl-10 min-w-0">
<div className="absolute left-0 top-1.5 w-[40px] flex justify-center">
{i === 0 ? (
<span className="relative flex h-3 w-3">
<span className="animate-ping absolute inline-flex h-full w-full rounded-full bg-destructive opacity-75"></span>
<span className="relative inline-flex rounded-full h-3 w-3 bg-destructive"></span>
</span>
) : (
<div className="w-2.5 h-2.5 rounded-full bg-destructive/20 mt-0.5" />
)}
</div>
<div
className={`
p-4 border rounded-2xl shadow-sm transition-all min-w-0
${i === 0
? 'border-destructive/20 bg-destructive/5 ring-1 ring-destructive/10'
: 'border-border bg-card'}
`}
>
<div className="flex items-start justify-between gap-3 mb-2 min-w-0">
<div className="flex items-center gap-1.5 flex-wrap min-w-0">
{i === 0 && (
<Badge className="bg-destructive hover:bg-destructive text-[9px] h-4 px-1">
{t('accounts.runningState.latest')}
</Badge>
)}
<div className="text-[10px] font-mono font-bold text-destructive bg-destructive/10 px-1.5 py-0.5 rounded break-all">
<span className="sm:hidden">
{format(new Date(e.at), 'HH:mm')}
</span>
<span className="hidden sm:inline">
{format(new Date(e.at), 'yyyy-MM-dd HH:mm:ss')}
</span>
</div>
</div>
<AlertTriangle
className={`w-4 h-4 shrink-0 ${i === 0 ? 'text-destructive' : 'text-destructive/50'
}`}
/>
</div>
<div className="min-w-0">
<p
className={`
text-xs font-bold leading-relaxed whitespace-pre-wrap break-all min-w-0
${i === 0 ? 'text-foreground' : 'text-muted-foreground'}
`}
>
{e.error}
</p>
</div>
</div>
</div>
))}
</div>
</div>
)}
</div>
</ScrollArea>
</TabsContent>
</> </>
)} )}
</div> </div>
@@ -21,6 +21,7 @@ import { AccountModel } from '@/api/account/api';
import React from 'react' import React from 'react'
export type AccountDialogType = export type AccountDialogType =
| 'add'
| 'add-imap' | 'add-imap'
| 'add-nosync' | 'add-nosync'
| 'edit-imap' | 'edit-imap'
+9 -22
View File
@@ -43,6 +43,7 @@ import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigge
import { useTranslation } from 'react-i18next' import { useTranslation } from 'react-i18next'
import { AccountAccessAssignmentDialog } from './components/access-assignment-dialog' import { AccountAccessAssignmentDialog } from './components/access-assignment-dialog'
import { useCurrentUser } from '@/hooks/use-current-user' import { useCurrentUser } from '@/hooks/use-current-user'
import { AddAccountDialog } from './components/add-account-dialog'
export default function Accounts() { export default function Accounts() {
const { t } = useTranslation() const { t } = useTranslation()
@@ -75,29 +76,12 @@ export default function Accounts() {
{require_any_permission(['system:root', 'account:create']) && <div className="flex gap-2"> {require_any_permission(['system:root', 'account:create']) && <div className="flex gap-2">
<div className="flex rounded-md shadow-sm"> <div className="flex rounded-md shadow-sm">
<Button <Button
onClick={() => setOpen("add-imap")} onClick={() => setOpen("add")}
className="rounded-r-none border-r-0" className="rounded-r-none border-r-0"
> >
<Plus className="h-4 w-4" /> <Plus className="h-4 w-4" />
{t('accounts.addImap')} {t('accounts.add')}
</Button> </Button>
<DropdownMenu>
<DropdownMenuTrigger asChild>
<Button
size="icon"
className="h-9 w-9 rounded-l-none border-l-0"
>
<MoreVertical className="h-4 w-4" />
<span className="sr-only">{t('accounts.moreAccountTypes')}</span>
</Button>
</DropdownMenuTrigger>
<DropdownMenuContent align="end">
<DropdownMenuItem onClick={() => setOpen("add-nosync")}>
<Plus className="h-4 w-4" />
{t('accounts.addNoSync')}
</DropdownMenuItem>
</DropdownMenuContent>
</DropdownMenu>
</div> </div>
</div>} </div>}
</div> </div>
@@ -120,8 +104,8 @@ export default function Accounts() {
{t('accounts.noAccountConfigurationsDesc')} {t('accounts.noAccountConfigurationsDesc')}
</p> </p>
<div className="mt-4 flex flex-col items-center gap-3 sm:flex-row sm:flex-wrap sm:justify-center sm:gap-4"> <div className="mt-4 flex flex-col items-center gap-3 sm:flex-row sm:flex-wrap sm:justify-center sm:gap-4">
<Button variant="default" className="w-64" onClick={() => setOpen("add-imap")}> <Button variant="default" className="w-64" onClick={() => setOpen("add")}>
{t('accounts.addConfiguration')} {t('accounts.add')}
</Button> </Button>
</div> </div>
</div> </div>
@@ -130,7 +114,10 @@ export default function Accounts() {
</div> </div>
</div> </div>
</Main> </Main>
<AddAccountDialog
key='account-add'
open={open === 'add'}
onOpenChange={() => setOpen('add')} />
<AccountActionDialog <AccountActionDialog
key='imap-account-add' key='imap-account-add'
+147 -114
View File
@@ -18,7 +18,7 @@
import { useState } from 'react'; import { useState } from 'react';
import { useInfiniteQuery } from '@tanstack/react-query'; import { useInfiniteQuery } from '@tanstack/react-query';
import { ChevronDown, ChevronUp, Loader2, MessageSquareText } from 'lucide-react'; import { Loader2, MessageSquareText } from 'lucide-react';
import { import {
Dialog, Dialog,
@@ -27,7 +27,9 @@ import {
DialogTitle, DialogTitle,
} from '@/components/ui/dialog'; } from '@/components/ui/dialog';
import { Button } from '@/components/ui/button'; import { Button } from '@/components/ui/button';
import { Badge } from '@/components/ui/badge';
import { Card, CardContent, CardHeader } from '@/components/ui/card'; import { Card, CardContent, CardHeader } from '@/components/ui/card';
import { ScrollArea } from '@/components/ui/scroll-area';
import { Skeleton } from '@/components/ui/skeleton'; import { Skeleton } from '@/components/ui/skeleton';
import { get_thread_messages } from '@/api/mailbox/envelope/api'; import { get_thread_messages } from '@/api/mailbox/envelope/api';
import { MailMessageView } from './mail-message-view'; import { MailMessageView } from './mail-message-view';
@@ -72,6 +74,7 @@ export function MailThreadDialog({ open, onOpenChange }: MailThreadDialogProps)
const allMessages = data?.pages.flatMap((page) => page.items) ?? []; const allMessages = data?.pages.flatMap((page) => page.items) ?? [];
const totalCount = data?.pages[0]?.total_items ?? 0; const totalCount = data?.pages[0]?.total_items ?? 0;
const sortedMessages = [...allMessages].sort((a, b) => a.date - b.date);
const toggleExpand = (id: string) => { const toggleExpand = (id: string) => {
setExpandedIds((prev) => { setExpandedIds((prev) => {
@@ -84,138 +87,168 @@ export function MailThreadDialog({ open, onOpenChange }: MailThreadDialogProps)
return ( return (
<Dialog open={open} onOpenChange={onOpenChange}> <Dialog open={open} onOpenChange={onOpenChange}>
<DialogContent className="w-full max-width-full p-0 max-h-full flex flex-col md:max-w-3xl lg:max-w-4xl"> <DialogContent className="w-full max-width-full p-0 max-h-full flex flex-col md:max-w-3xl lg:max-w-4xl">
{/* Header */}
<DialogHeader className="p-4 pb-3 border-b shrink-0"> <DialogHeader className="p-4 pb-3 border-b shrink-0">
<div className="flex items-center justify-between"> <DialogTitle className="flex items-center gap-2">
<DialogTitle className="flex items-center gap-2"> <MessageSquareText className="w-5 h-5" />
<MessageSquareText className="w-5 h-5" /> <span className="text-sm">
<div className="text-sm"> {t('search.thread.title', { count: totalCount })}
{t('search.thread.title', { count: totalCount })} </span>
</div> </DialogTitle>
</DialogTitle>
</div>
</DialogHeader> </DialogHeader>
{/* Body */} <ScrollArea className="h-[calc(100vh-260px)] w-full pr-4 -mr-4 py-1">
<div className="flex-1 overflow-y-auto p-4 space-y-4"> <div className="p-4 sm:p-6">
{isLoading && <ThreadSkeleton />} {isLoading && <ThreadSkeleton />}
{isError && ( {isError && (
<div className="text-center text-destructive text-sm"> <div className="text-center text-destructive text-sm">
{t('search.thread.error')}: {(error as Error)?.message} {t('search.thread.error')}: {(error as Error)?.message}
</div> </div>
)} )}
{!isLoading && allMessages.length === 0 && ( {!isLoading && sortedMessages.length === 0 && (
<div className="text-center text-muted-foreground text-sm"> <div className="text-center text-muted-foreground text-sm">
{t('search.thread.empty')} {t('search.thread.empty')}
</div> </div>
)} )}
{allMessages {sortedMessages.length > 0 && (
.sort((a, b) => a.date - b.date) <div className="relative">
.map((msg) => { <div className="absolute left-[19px] top-2 bottom-2 w-0.5 bg-destructive/20" />
const isExpanded = expandedIds.has(msg.id); <div className="absolute left-[15px] bottom-0 w-0 h-0 border-l-[5px] border-r-[5px] border-t-[7px] border-l-transparent border-r-transparent border-t-destructive/40" />
const preview = msg.preview;
const date = new Date(msg.date);
const formattedDate = isNaN(date.getTime())
? t('search.thread.invalidDate')
: format(date, 'yyyy-MM-dd HH:mm:ss');
return ( <div className="space-y-6">
<Card {sortedMessages.map((msg, i) => {
key={msg.id} const isExpanded = expandedIds.has(msg.id);
className={`transition-all ${isExpanded ? 'ring-2 ring-primary' : ''}`} const isLatest = i === sortedMessages.length - 1;
>
<CardHeader const date = new Date(msg.date);
className="cursor-pointer pb-3" const formattedDate = isNaN(date.getTime())
onClick={() => toggleExpand(msg.id)} ? t('search.thread.invalidDate')
> : format(date, 'yyyy-MM-dd HH:mm:ss');
<div className="flex items-start justify-between gap-4">
<div className="flex-1 min-w-0"> return (
<div className="flex items-center gap-2 text-sm"> <div key={msg.id} className={`relative pl-10 min-w-0 ${isLatest ? 'mt-6' : ''}`}>
<span className="font-medium truncate">{msg.from}</span> <div className="absolute left-0 top-1.5 w-[40px] flex flex-col items-center gap-1">
<span className="text-muted-foreground"></span> {isLatest && (
<span className="text-muted-foreground truncate"> <Badge className="bg-primary hover:bg-primary text-[9px] h-4 px-1 shrink-0 w-fit">
{msg.to.join(', ')} {t('search.thread.latest')}
</span> </Badge>
)}
{isLatest ? (
<span className="relative flex h-3 w-3">
<span className="animate-ping absolute inline-flex h-full w-full rounded-full bg-primary opacity-75" />
<span className="relative inline-flex rounded-full h-3 w-3 bg-primary" />
</span>
) : (
<div className="w-2.5 h-2.5 rounded-full bg-muted-foreground/30 mt-0.5" />
)}
</div> </div>
<p className="font-medium mt-1 text-sm"> <Card
{msg.subject || t('search.thread.noSubject')} className={`transition-all min-w-0 shadow-sm ${isLatest
</p> ? 'border-primary/20 bg-primary/5 ring-1 ring-primary/10'
{!isExpanded && preview && ( : 'border-border bg-card'
<p className="text-xs text-muted-foreground mt-1 line-clamp-2"> } ${isExpanded ? 'ring-2 ring-primary' : ''}`}
{preview} >
</p> <CardHeader
)} className="cursor-pointer pb-3"
</div> onClick={() => toggleExpand(msg.id)}
>
<div className="flex items-start justify-between gap-3 mb-1 min-w-0">
<div className="flex items-center gap-1.5 flex-wrap min-w-0">
<span className="font-medium truncate text-sm">{msg.from}</span>
<span className="text-muted-foreground text-sm"></span>
<span className="text-muted-foreground truncate text-sm">
{msg.to.join(', ')}
</span>
</div>
<div className="text-[10px] font-mono font-bold text-muted-foreground bg-muted px-1.5 py-0.5 rounded shrink-0">
<span className="sm:hidden">
{isNaN(date.getTime()) ? '' : format(date, 'HH:mm')}
</span>
<span className="hidden sm:inline">{formattedDate}</span>
</div>
</div>
<div className="flex items-center gap-2 text-xs text-muted-foreground"> <p className="font-medium text-sm">
<span>{formattedDate}</span> {msg.subject || t('search.thread.noSubject')}
{isExpanded ? ( </p>
<ChevronUp className="w-4 h-4" />
) : (
<ChevronDown className="w-4 h-4" />
)}
</div>
</div>
</CardHeader>
{isExpanded && ( {!isExpanded && msg.preview && (
<CardContent className="p-0"> <p className="text-xs text-muted-foreground mt-1 line-clamp-2">
<div className="h-96 border-t m-5"> {msg.preview}
<MailMessageView </p>
envelope={msg} )}
showActions={false} </CardHeader>
showAttachments={false}
showHeader={false} {isExpanded && (
/> <CardContent className="p-0">
<div className="h-96 border-t m-5">
<MailMessageView
envelope={msg}
showActions={false}
showAttachments={false}
showHeader={false}
/>
</div>
</CardContent>
)}
</Card>
</div> </div>
</CardContent> );
})}
</div>
</div>
)}
{hasNextPage && (
<div className="flex justify-center py-3 mt-4">
<Button
onClick={() => fetchNextPage()}
disabled={isFetchingNextPage}
variant="outline"
size="sm"
>
{isFetchingNextPage ? (
<>
<Loader2 className="w-4 h-4 mr-2 animate-spin" />
{t('search.thread.loadingMore')}
</>
) : (
t('search.thread.loadMore')
)} )}
</Card> </Button>
); </div>
})} )}
</div>
{hasNextPage && ( </ScrollArea>
<div className="flex justify-center py-3">
<Button
onClick={() => fetchNextPage()}
disabled={isFetchingNextPage}
variant="outline"
size="sm"
>
{isFetchingNextPage ? (
<>
<Loader2 className="w-4 h-4 mr-2 animate-spin" />
{t('search.thread.loadingMore')}
</>
) : (
t('search.thread.loadMore')
)}
</Button>
</div>
)}
</div>
</DialogContent> </DialogContent>
</Dialog> </Dialog>
); );
} }
// Skeleton
function ThreadSkeleton() { function ThreadSkeleton() {
return ( return (
<div className="space-y-4"> <div className="relative">
{[...Array(3)].map((_, i) => ( <div className="absolute left-[19px] top-2 bottom-2 w-0.5 bg-destructive/20" />
<Card key={i}> <div className="absolute left-[15px] bottom-0 w-0 h-0 border-l-[5px] border-r-[5px] border-t-[7px] border-l-transparent border-r-transparent border-t-destructive/40" />
<CardHeader> <div className="space-y-6">
<Skeleton className="h-4 w-48 mb-2" /> {[...Array(3)].map((_, i) => (
<Skeleton className="h-5 w-64 mb-1" /> <div key={i} className="relative pl-10 min-w-0">
<Skeleton className="h-4 w-full" /> <div className="absolute left-0 top-1.5 w-[40px] flex justify-center">
<Skeleton className="h-4 w-32 mt-2" /> <div className="w-2.5 h-2.5 rounded-full bg-muted-foreground/30 mt-0.5" />
</CardHeader> </div>
</Card> <Card>
))} <CardHeader>
<Skeleton className="h-4 w-48 mb-2" />
<Skeleton className="h-5 w-64 mb-1" />
<Skeleton className="h-4 w-full" />
<Skeleton className="h-4 w-32 mt-2" />
</CardHeader>
</Card>
</div>
))}
</div>
</div> </div>
); );
} }
+7 -5
View File
@@ -92,11 +92,9 @@
"accountUpdated": "تم تحديث الحساب", "accountUpdated": "تم تحديث الحساب",
"accountUpdatedDesc": "تم تحديث حسابك بنجاح.", "accountUpdatedDesc": "تم تحديث حسابك بنجاح.",
"actions": "الإجراءات", "actions": "الإجراءات",
"add": "إضافة حساب",
"addAccount": "إضافة حساب", "addAccount": "إضافة حساب",
"addConfiguration": "إضافة تكوين",
"addImap": "إضافة IMAP",
"addNewEmailAccountHere": "إضافة حساب بريد إلكتروني جديد هنا. ", "addNewEmailAccountHere": "إضافة حساب بريد إلكتروني جديد هنا. ",
"addNoSync": "إضافة NoSync",
"allMailFolderSelected": "تنبيه: تم تحديد مجلد \"جميع رسائل البريد\"", "allMailFolderSelected": "تنبيه: تم تحديد مجلد \"جميع رسائل البريد\"",
"allMailFolderSelectedDesc": "من المحتمل أن يؤدي تحديد المجلدات التي تحمل سمة \"جميع رسائل البريد\" إلى تكرار الرسائل التي تمت مزامنتها بالفعل من مجلدات مثل البريد الوارد والمرسل. قد يستهلك هذا مساحة تخزين أكبر بكثير.", "allMailFolderSelectedDesc": "من المحتمل أن يؤدي تحديد المجلدات التي تحمل سمة \"جميع رسائل البريد\" إلى تكرار الرسائل التي تمت مزامنتها بالفعل من مجلدات مثل البريد الوارد والمرسل. قد يستهلك هذا مساحة تخزين أكبر بكثير.",
"allMailSkipped": "تم تحديد المجلدات القياسية. تم تخطي 'جميع رسائل البريد' لتجنب التكرارات.", "allMailSkipped": "تم تحديد المجلدات القياسية. تم تخطي 'جميع رسائل البريد' لتجنب التكرارات.",
@@ -170,6 +168,8 @@
"host": "المُضيف", "host": "المُضيف",
"id": "المعرّف", "id": "المعرّف",
"imap": "IMAP", "imap": "IMAP",
"imapAccount": "حساب IMAP",
"imapAccountDescription": "تنزيل وأرشفة البريد عبر IMAP.",
"imapAuthMethod": "طريقة مصادقة IMAP", "imapAuthMethod": "طريقة مصادقة IMAP",
"imapEncryption": "تشفير IMAP", "imapEncryption": "تشفير IMAP",
"imapHost": "مُضيف IMAP", "imapHost": "مُضيف IMAP",
@@ -185,7 +185,6 @@
"login_name": "اسم الدخول", "login_name": "اسم الدخول",
"minutes": "دقائق", "minutes": "دقائق",
"months": "أشهر", "months": "أشهر",
"moreAccountTypes": "المزيد من أنواع الحسابات",
"mustBeAtLeast1": "يجب أن يكون 1 على الأقل", "mustBeAtLeast1": "يجب أن يكون 1 على الأقل",
"name": "الاسم", "name": "الاسم",
"nameDescription": "اسم مستخدم IMAP. افتراضياً بريدك الإلكتروني، أو أدخل اسماً مخصصاً.", "nameDescription": "اسم مستخدم IMAP. افتراضياً بريدك الإلكتروني، أو أدخل اسماً مخصصاً.",
@@ -193,6 +192,8 @@
"noAccountConfigurations": "لا توجد تكوينات للحساب", "noAccountConfigurations": "لا توجد تكوينات للحساب",
"noAccountConfigurationsDesc": "لم تقم بإضافة أي تكوينات للحساب بعد. أضف واحدة لبدء استخدام ميزات الحساب.", "noAccountConfigurationsDesc": "لم تقم بإضافة أي تكوينات للحساب بعد. أضف واحدة لبدء استخدام ميزات الحساب.",
"noOAuth2Tokens": "لا توجد رموز OAuth2", "noOAuth2Tokens": "لا توجد رموز OAuth2",
"noSyncAccount": "حساب محلي",
"noSyncAccountDescription": "حساب محلي للبيانات المستوردة فقط.",
"none": "لا شيء", "none": "لا شيء",
"notAvailable": "غير متاح", "notAvailable": "غير متاح",
"oauth2Tokens": "رموز OAuth2", "oauth2Tokens": "رموز OAuth2",
@@ -235,11 +236,11 @@
"active_session": "الجلسة النشطة", "active_session": "الجلسة النشطة",
"errors": "أخطاء", "errors": "أخطاء",
"folders": "صناديق البريد", "folders": "صناديق البريد",
"global_errors": "الأخطاء العامة",
"history": "السجل" "history": "السجل"
} }
}, },
"saveChanges": "حفظ التغييرات", "saveChanges": "حفظ التغييرات",
"selectAccountType": "اختر نوع الحساب",
"selectAtLeastOneFolder": "يرجى تحديد مجلد واحد على الأقل", "selectAtLeastOneFolder": "يرجى تحديد مجلد واحد على الأقل",
"selectAuthMethod": "اختر طريقة مصادقة", "selectAuthMethod": "اختر طريقة مصادقة",
"selectDate": "اختر تاريخًا", "selectDate": "اختر تاريخًا",
@@ -1033,6 +1034,7 @@
"empty": "لا توجد رسائل في هذه المحادثة", "empty": "لا توجد رسائل في هذه المحادثة",
"error": "فشل تحميل المحادثة", "error": "فشل تحميل المحادثة",
"invalidDate": "تاريخ غير صالح", "invalidDate": "تاريخ غير صالح",
"latest": "الأحدث",
"loadMore": "تحميل المزيد", "loadMore": "تحميل المزيد",
"loadingMore": "جارٍ التحميل...", "loadingMore": "جارٍ التحميل...",
"noSubject": "(لا يوجد موضوع)", "noSubject": "(لا يوجد موضوع)",
+7 -5
View File
@@ -92,11 +92,9 @@
"accountUpdated": "Konto opdateret", "accountUpdated": "Konto opdateret",
"accountUpdatedDesc": "Din konto er blevet opdateret.", "accountUpdatedDesc": "Din konto er blevet opdateret.",
"actions": "Handlinger", "actions": "Handlinger",
"add": "Tilføj konto",
"addAccount": "Tilføj konto", "addAccount": "Tilføj konto",
"addConfiguration": "Tilføj konfiguration",
"addImap": "Tilføj IMAP",
"addNewEmailAccountHere": "Tilføj ny e-mailkonto her. ", "addNewEmailAccountHere": "Tilføj ny e-mailkonto her. ",
"addNoSync": "Tilføj NoSync",
"allMailFolderSelected": "Bemærk: Mappen \"Al mail\" er valgt", "allMailFolderSelected": "Bemærk: Mappen \"Al mail\" er valgt",
"allMailFolderSelectedDesc": "Valg af mapper med attributtet \"Al mail\" vil sandsynligvis resultere i duplikerede meddelelser, der allerede er synkroniseret fra mapper som Indbakke og Sendt. Dette kan optage betydeligt mere lagerplads.", "allMailFolderSelectedDesc": "Valg af mapper med attributtet \"Al mail\" vil sandsynligvis resultere i duplikerede meddelelser, der allerede er synkroniseret fra mapper som Indbakke og Sendt. Dette kan optage betydeligt mere lagerplads.",
"allMailSkipped": "Valgte standardmapper. \"Al mail\" blev sprunget over for at undgå dubletter.", "allMailSkipped": "Valgte standardmapper. \"Al mail\" blev sprunget over for at undgå dubletter.",
@@ -170,6 +168,8 @@
"host": "vært", "host": "vært",
"id": "ID", "id": "ID",
"imap": "IMAP", "imap": "IMAP",
"imapAccount": "IMAP-konto",
"imapAccountDescription": "Download og arkiver e-mails via IMAP.",
"imapAuthMethod": "IMAP-godkendelsesmetode", "imapAuthMethod": "IMAP-godkendelsesmetode",
"imapEncryption": "IMAP-kryptering", "imapEncryption": "IMAP-kryptering",
"imapHost": "IMAP-vært", "imapHost": "IMAP-vært",
@@ -185,7 +185,6 @@
"login_name": "Logindnavn", "login_name": "Logindnavn",
"minutes": "minutter", "minutes": "minutter",
"months": "Måneder", "months": "Måneder",
"moreAccountTypes": "Flere kontotyper",
"mustBeAtLeast1": "Skal være mindst 1", "mustBeAtLeast1": "Skal være mindst 1",
"name": "Navn", "name": "Navn",
"nameDescription": "IMAP-brugernavn. Standard er din e-mail, ellers angiv et eget.", "nameDescription": "IMAP-brugernavn. Standard er din e-mail, ellers angiv et eget.",
@@ -193,6 +192,8 @@
"noAccountConfigurations": "Ingen kontokonfigurationer", "noAccountConfigurations": "Ingen kontokonfigurationer",
"noAccountConfigurationsDesc": "Du har ikke tilføjet nogen kontokonfigurationer endnu. Tilføj en for at begynde at bruge kontofunktioner.", "noAccountConfigurationsDesc": "Du har ikke tilføjet nogen kontokonfigurationer endnu. Tilføj en for at begynde at bruge kontofunktioner.",
"noOAuth2Tokens": "Ingen OAuth2-tokens", "noOAuth2Tokens": "Ingen OAuth2-tokens",
"noSyncAccount": "Lokal konto",
"noSyncAccountDescription": "Lokal konto kun til importerede data.",
"none": "Ingen", "none": "Ingen",
"notAvailable": "ikke tilgængelig", "notAvailable": "ikke tilgængelig",
"oauth2Tokens": "OAuth2-tokens", "oauth2Tokens": "OAuth2-tokens",
@@ -235,11 +236,11 @@
"active_session": "Aktiv session", "active_session": "Aktiv session",
"errors": "Fejl", "errors": "Fejl",
"folders": "Postkasser", "folders": "Postkasser",
"global_errors": "Globale fejl",
"history": "Historik" "history": "Historik"
} }
}, },
"saveChanges": "Gem ændringer", "saveChanges": "Gem ændringer",
"selectAccountType": "Vælg kontotype",
"selectAtLeastOneFolder": "Vælg venligst mindst én mappe", "selectAtLeastOneFolder": "Vælg venligst mindst én mappe",
"selectAuthMethod": "Vælg en godkendelsesmetode", "selectAuthMethod": "Vælg en godkendelsesmetode",
"selectDate": "Vælg en dato", "selectDate": "Vælg en dato",
@@ -1033,6 +1034,7 @@
"empty": "Ingen meddelelser i denne tråd", "empty": "Ingen meddelelser i denne tråd",
"error": "Kunne ikke indlæse tråd", "error": "Kunne ikke indlæse tråd",
"invalidDate": "Ugyldig dato", "invalidDate": "Ugyldig dato",
"latest": "Seneste",
"loadMore": "Indlæs mere", "loadMore": "Indlæs mere",
"loadingMore": "Indlæser...", "loadingMore": "Indlæser...",
"noSubject": "(Intet emne)", "noSubject": "(Intet emne)",
+7 -5
View File
@@ -92,11 +92,9 @@
"accountUpdated": "Konto aktualisiert", "accountUpdated": "Konto aktualisiert",
"accountUpdatedDesc": "Ihr Konto wurde erfolgreich aktualisiert.", "accountUpdatedDesc": "Ihr Konto wurde erfolgreich aktualisiert.",
"actions": "Aktionen", "actions": "Aktionen",
"add": "Konto hinzufügen",
"addAccount": "Konto hinzufügen", "addAccount": "Konto hinzufügen",
"addConfiguration": "Konfiguration hinzufügen",
"addImap": "IMAP hinzufügen",
"addNewEmailAccountHere": "Fügen Sie hier ein neues E-Mail-Konto hinzu. ", "addNewEmailAccountHere": "Fügen Sie hier ein neues E-Mail-Konto hinzu. ",
"addNoSync": "NoSync hinzufügen",
"allMailFolderSelected": "Warnung: 'Alle E-Mails'-Ordner ausgewählt", "allMailFolderSelected": "Warnung: 'Alle E-Mails'-Ordner ausgewählt",
"allMailFolderSelectedDesc": "Die Auswahl von Ordnern mit dem Attribut 'Alle E-Mails' führt wahrscheinlich zur Duplizierung von Nachrichten, die bereits aus Ordnern wie Posteingang und Gesendet synchronisiert wurden. Dies könnte erheblich mehr Speicherplatz verbrauchen.", "allMailFolderSelectedDesc": "Die Auswahl von Ordnern mit dem Attribut 'Alle E-Mails' führt wahrscheinlich zur Duplizierung von Nachrichten, die bereits aus Ordnern wie Posteingang und Gesendet synchronisiert wurden. Dies könnte erheblich mehr Speicherplatz verbrauchen.",
"allMailSkipped": "Standardordner ausgewählt. 'Alle E-Mails' wurde übersprungen, um Duplikate zu vermeiden.", "allMailSkipped": "Standardordner ausgewählt. 'Alle E-Mails' wurde übersprungen, um Duplikate zu vermeiden.",
@@ -170,6 +168,8 @@
"host": "Host", "host": "Host",
"id": "ID", "id": "ID",
"imap": "IMAP", "imap": "IMAP",
"imapAccount": "IMAP-Konto",
"imapAccountDescription": "E-Mails über IMAP herunterladen und archivieren.",
"imapAuthMethod": "IMAP-Authentifizierungsmethode", "imapAuthMethod": "IMAP-Authentifizierungsmethode",
"imapEncryption": "IMAP-Verschlüsselung", "imapEncryption": "IMAP-Verschlüsselung",
"imapHost": "IMAP-Host", "imapHost": "IMAP-Host",
@@ -185,7 +185,6 @@
"login_name": "Anmeldename", "login_name": "Anmeldename",
"minutes": "Minuten", "minutes": "Minuten",
"months": "Monate", "months": "Monate",
"moreAccountTypes": "Mehr Kontotypen",
"mustBeAtLeast1": "Muss mindestens 1 sein", "mustBeAtLeast1": "Muss mindestens 1 sein",
"name": "Name", "name": "Name",
"nameDescription": "IMAP-Benutzername. Standardmäßig Ihre E-Mail, sonst hier anpassen.", "nameDescription": "IMAP-Benutzername. Standardmäßig Ihre E-Mail, sonst hier anpassen.",
@@ -193,6 +192,8 @@
"noAccountConfigurations": "Keine Kontokonfigurationen", "noAccountConfigurations": "Keine Kontokonfigurationen",
"noAccountConfigurationsDesc": "Sie haben noch keine Kontokonfigurationen hinzugefügt. Fügen Sie eine hinzu, um mit der Nutzung der Kontofunktionen zu beginnen.", "noAccountConfigurationsDesc": "Sie haben noch keine Kontokonfigurationen hinzugefügt. Fügen Sie eine hinzu, um mit der Nutzung der Kontofunktionen zu beginnen.",
"noOAuth2Tokens": "Keine OAuth2-Token", "noOAuth2Tokens": "Keine OAuth2-Token",
"noSyncAccount": "Lokales Konto",
"noSyncAccountDescription": "Lokales Konto nur für importierte Daten.",
"none": "Keine", "none": "Keine",
"notAvailable": "nicht verfügbar", "notAvailable": "nicht verfügbar",
"oauth2Tokens": "OAuth2-Token", "oauth2Tokens": "OAuth2-Token",
@@ -235,11 +236,11 @@
"active_session": "Aktive Sitzung", "active_session": "Aktive Sitzung",
"errors": "Fehler", "errors": "Fehler",
"folders": "Postfächer", "folders": "Postfächer",
"global_errors": "Globale Fehler",
"history": "Verlauf" "history": "Verlauf"
} }
}, },
"saveChanges": "Änderungen speichern", "saveChanges": "Änderungen speichern",
"selectAccountType": "Kontotyp auswählen",
"selectAtLeastOneFolder": "Wählen Sie mindestens einen Ordner aus", "selectAtLeastOneFolder": "Wählen Sie mindestens einen Ordner aus",
"selectAuthMethod": "Authentifizierungsmethode auswählen", "selectAuthMethod": "Authentifizierungsmethode auswählen",
"selectDate": "Datum auswählen", "selectDate": "Datum auswählen",
@@ -1033,6 +1034,7 @@
"empty": "Keine Nachrichten in diesem Thread", "empty": "Keine Nachrichten in diesem Thread",
"error": "Fehler beim Laden des Threads", "error": "Fehler beim Laden des Threads",
"invalidDate": "Ungültiges Datum", "invalidDate": "Ungültiges Datum",
"latest": "Neueste",
"loadMore": "Mehr laden", "loadMore": "Mehr laden",
"loadingMore": "Wird geladen...", "loadingMore": "Wird geladen...",
"noSubject": "(Kein Betreff)", "noSubject": "(Kein Betreff)",
+7 -5
View File
@@ -92,11 +92,9 @@
"accountUpdated": "Account Updated", "accountUpdated": "Account Updated",
"accountUpdatedDesc": "Your account has been successfully updated.", "accountUpdatedDesc": "Your account has been successfully updated.",
"actions": "Actions", "actions": "Actions",
"add": "Add account",
"addAccount": "Add Account", "addAccount": "Add Account",
"addConfiguration": "Add Configuration",
"addImap": "Add IMAP",
"addNewEmailAccountHere": "Add new email account here. ", "addNewEmailAccountHere": "Add new email account here. ",
"addNoSync": "Add NoSync",
"allMailFolderSelected": "Heads Up: \"All Mail\" Folder Selected", "allMailFolderSelected": "Heads Up: \"All Mail\" Folder Selected",
"allMailFolderSelectedDesc": "Selecting folders with the \"All Mail\" attribute will likely lead to duplicating messages already synced from folders like Inbox and Sent. This may consume significantly more storage space.", "allMailFolderSelectedDesc": "Selecting folders with the \"All Mail\" attribute will likely lead to duplicating messages already synced from folders like Inbox and Sent. This may consume significantly more storage space.",
"allMailSkipped": "Selected standard folders. 'All Mail' was skipped to avoid duplicates.", "allMailSkipped": "Selected standard folders. 'All Mail' was skipped to avoid duplicates.",
@@ -170,6 +168,8 @@
"host": "host", "host": "host",
"id": "ID", "id": "ID",
"imap": "IMAP", "imap": "IMAP",
"imapAccount": "IMAP account",
"imapAccountDescription": "Download and archive emails via IMAP.",
"imapAuthMethod": "IMAP Auth Method", "imapAuthMethod": "IMAP Auth Method",
"imapEncryption": "IMAP Encryption", "imapEncryption": "IMAP Encryption",
"imapHost": "IMAP Host", "imapHost": "IMAP Host",
@@ -185,7 +185,6 @@
"login_name": "Login Name", "login_name": "Login Name",
"minutes": "minutes", "minutes": "minutes",
"months": "Months", "months": "Months",
"moreAccountTypes": "More account types",
"mustBeAtLeast1": "Must be at least 1", "mustBeAtLeast1": "Must be at least 1",
"name": "Name", "name": "Name",
"nameDescription": "IMAP username. Defaults to your email; custom name supported.", "nameDescription": "IMAP username. Defaults to your email; custom name supported.",
@@ -193,6 +192,8 @@
"noAccountConfigurations": "No Account Configurations", "noAccountConfigurations": "No Account Configurations",
"noAccountConfigurationsDesc": "You haven't added any Account configurations yet. Add one to start using Account features.", "noAccountConfigurationsDesc": "You haven't added any Account configurations yet. Add one to start using Account features.",
"noOAuth2Tokens": "No OAuth2 Tokens", "noOAuth2Tokens": "No OAuth2 Tokens",
"noSyncAccount": "Local account",
"noSyncAccountDescription": "Local account for imported data only.",
"none": "None", "none": "None",
"notAvailable": "n/a", "notAvailable": "n/a",
"oauth2Tokens": "OAuth2 Tokens", "oauth2Tokens": "OAuth2 Tokens",
@@ -235,11 +236,11 @@
"active_session": "Active Session", "active_session": "Active Session",
"errors": "Errors", "errors": "Errors",
"folders": "Mailboxes", "folders": "Mailboxes",
"global_errors": "Global Errors",
"history": "History" "history": "History"
} }
}, },
"saveChanges": "Save changes", "saveChanges": "Save changes",
"selectAccountType": "Select account type",
"selectAtLeastOneFolder": "Please select at least one folder", "selectAtLeastOneFolder": "Please select at least one folder",
"selectAuthMethod": "Select an authentication method", "selectAuthMethod": "Select an authentication method",
"selectDate": "Select a date", "selectDate": "Select a date",
@@ -1033,6 +1034,7 @@
"empty": "No messages in this thread", "empty": "No messages in this thread",
"error": "Failed to load thread", "error": "Failed to load thread",
"invalidDate": "Invalid date", "invalidDate": "Invalid date",
"latest": "Latest",
"loadMore": "Load more", "loadMore": "Load more",
"loadingMore": "Loading...", "loadingMore": "Loading...",
"noSubject": "(No subject)", "noSubject": "(No subject)",
+7 -5
View File
@@ -92,11 +92,9 @@
"accountUpdated": "Cuenta actualizada", "accountUpdated": "Cuenta actualizada",
"accountUpdatedDesc": "Tu cuenta ha sido actualizada con éxito.", "accountUpdatedDesc": "Tu cuenta ha sido actualizada con éxito.",
"actions": "Acciones", "actions": "Acciones",
"add": "Añadir cuenta",
"addAccount": "Añadir cuenta", "addAccount": "Añadir cuenta",
"addConfiguration": "Añadir configuración",
"addImap": "Añadir IMAP",
"addNewEmailAccountHere": "Añade una nueva cuenta de correo electrónico aquí. ", "addNewEmailAccountHere": "Añade una nueva cuenta de correo electrónico aquí. ",
"addNoSync": "Añadir NoSync",
"allMailFolderSelected": "Advertencia: Carpeta 'Todo el correo' seleccionada", "allMailFolderSelected": "Advertencia: Carpeta 'Todo el correo' seleccionada",
"allMailFolderSelectedDesc": "Seleccionar carpetas con el atributo 'Todo el correo' probablemente resultará en la duplicación de mensajes ya sincronizados de carpetas como Bandeja de entrada y Enviados. Esto podría consumir significativamente más espacio de almacenamiento.", "allMailFolderSelectedDesc": "Seleccionar carpetas con el atributo 'Todo el correo' probablemente resultará en la duplicación de mensajes ya sincronizados de carpetas como Bandeja de entrada y Enviados. Esto podría consumir significativamente más espacio de almacenamiento.",
"allMailSkipped": "Carpetas predeterminadas seleccionadas. 'Todo el correo' omitido para evitar duplicados.", "allMailSkipped": "Carpetas predeterminadas seleccionadas. 'Todo el correo' omitido para evitar duplicados.",
@@ -170,6 +168,8 @@
"host": "host", "host": "host",
"id": "ID", "id": "ID",
"imap": "IMAP", "imap": "IMAP",
"imapAccount": "Cuenta IMAP",
"imapAccountDescription": "Descargar y archivar correos vía IMAP.",
"imapAuthMethod": "Método de autenticación IMAP", "imapAuthMethod": "Método de autenticación IMAP",
"imapEncryption": "Cifrado IMAP", "imapEncryption": "Cifrado IMAP",
"imapHost": "Host IMAP", "imapHost": "Host IMAP",
@@ -185,7 +185,6 @@
"login_name": "Nombre de usuario", "login_name": "Nombre de usuario",
"minutes": "minutos", "minutes": "minutos",
"months": "Meses", "months": "Meses",
"moreAccountTypes": "Más tipos de cuenta",
"mustBeAtLeast1": "Debe ser al menos 1", "mustBeAtLeast1": "Debe ser al menos 1",
"name": "Nombre", "name": "Nombre",
"nameDescription": "Usuario IMAP. Por defecto su email; cámbielo si es necesario.", "nameDescription": "Usuario IMAP. Por defecto su email; cámbielo si es necesario.",
@@ -193,6 +192,8 @@
"noAccountConfigurations": "Sin configuraciones de cuenta", "noAccountConfigurations": "Sin configuraciones de cuenta",
"noAccountConfigurationsDesc": "Aún no has añadido ninguna configuración de cuenta. Añade una para empezar a usar las funcionalidades de la cuenta.", "noAccountConfigurationsDesc": "Aún no has añadido ninguna configuración de cuenta. Añade una para empezar a usar las funcionalidades de la cuenta.",
"noOAuth2Tokens": "Sin tokens OAuth2", "noOAuth2Tokens": "Sin tokens OAuth2",
"noSyncAccount": "Cuenta local",
"noSyncAccountDescription": "Cuenta local solo para datos importados.",
"none": "Ninguno", "none": "Ninguno",
"notAvailable": "no disponible", "notAvailable": "no disponible",
"oauth2Tokens": "Tokens OAuth2", "oauth2Tokens": "Tokens OAuth2",
@@ -235,11 +236,11 @@
"active_session": "Sesión activa", "active_session": "Sesión activa",
"errors": "Errores", "errors": "Errores",
"folders": "Buzones", "folders": "Buzones",
"global_errors": "Errores globales",
"history": "Historial" "history": "Historial"
} }
}, },
"saveChanges": "Guardar cambios", "saveChanges": "Guardar cambios",
"selectAccountType": "Seleccionar tipo de cuenta",
"selectAtLeastOneFolder": "Selecciona al menos una carpeta", "selectAtLeastOneFolder": "Selecciona al menos una carpeta",
"selectAuthMethod": "Selecciona el método de autenticación", "selectAuthMethod": "Selecciona el método de autenticación",
"selectDate": "Seleccionar fecha", "selectDate": "Seleccionar fecha",
@@ -1033,6 +1034,7 @@
"empty": "No hay mensajes en este hilo", "empty": "No hay mensajes en este hilo",
"error": "Error al cargar el hilo", "error": "Error al cargar el hilo",
"invalidDate": "Fecha inválida", "invalidDate": "Fecha inválida",
"latest": "Último",
"loadMore": "Cargar más", "loadMore": "Cargar más",
"loadingMore": "Cargando...", "loadingMore": "Cargando...",
"noSubject": "(Sin asunto)", "noSubject": "(Sin asunto)",
+7 -5
View File
@@ -92,11 +92,9 @@
"accountUpdated": "Tili päivitetty", "accountUpdated": "Tili päivitetty",
"accountUpdatedDesc": "Tilisi on päivitetty onnistuneesti.", "accountUpdatedDesc": "Tilisi on päivitetty onnistuneesti.",
"actions": "Toiminnot", "actions": "Toiminnot",
"add": "Lisää tili",
"addAccount": "Lisää tili", "addAccount": "Lisää tili",
"addConfiguration": "Lisää määritys",
"addImap": "Lisää IMAP",
"addNewEmailAccountHere": "Lisää uusi sähköpostitili täällä. ", "addNewEmailAccountHere": "Lisää uusi sähköpostitili täällä. ",
"addNoSync": "Lisää NoSync",
"allMailFolderSelected": "Varoitus: 'Kaikki sähköpostit' -kansio valittu", "allMailFolderSelected": "Varoitus: 'Kaikki sähköpostit' -kansio valittu",
"allMailFolderSelectedDesc": "Kansioiden valitseminen, joilla on 'Kaikki sähköpostit' -attribuutti, johtaa todennäköisesti jo synkronoitujen viestien kahdentumiseen kansioista, kuten Saapuneet ja Lähetetyt. Tämä voi kuluttaa huomattavasti enemmän tallennustilaa.", "allMailFolderSelectedDesc": "Kansioiden valitseminen, joilla on 'Kaikki sähköpostit' -attribuutti, johtaa todennäköisesti jo synkronoitujen viestien kahdentumiseen kansioista, kuten Saapuneet ja Lähetetyt. Tämä voi kuluttaa huomattavasti enemmän tallennustilaa.",
"allMailSkipped": "Oletuskansiot valittu. 'Kaikki sähköpostit' ohitettiin päällekkäisyyksien välttämiseksi.", "allMailSkipped": "Oletuskansiot valittu. 'Kaikki sähköpostit' ohitettiin päällekkäisyyksien välttämiseksi.",
@@ -170,6 +168,8 @@
"host": "isäntä", "host": "isäntä",
"id": "ID", "id": "ID",
"imap": "IMAP", "imap": "IMAP",
"imapAccount": "IMAP-tili",
"imapAccountDescription": "Lataa ja arkistoi sähköpostit IMAP-yhteydellä.",
"imapAuthMethod": "IMAP-todennusmenetelmä", "imapAuthMethod": "IMAP-todennusmenetelmä",
"imapEncryption": "IMAP-salaus", "imapEncryption": "IMAP-salaus",
"imapHost": "IMAP-isäntä", "imapHost": "IMAP-isäntä",
@@ -185,7 +185,6 @@
"login_name": "Kirjautumisnimi", "login_name": "Kirjautumisnimi",
"minutes": "minuuttia", "minutes": "minuuttia",
"months": "Kuukautta", "months": "Kuukautta",
"moreAccountTypes": "Lisää tilityyppejä",
"mustBeAtLeast1": "Täytyy olla vähintään 1", "mustBeAtLeast1": "Täytyy olla vähintään 1",
"name": "Nimi", "name": "Nimi",
"nameDescription": "IMAP-käyttäjätunnus. Oletuksena sähköposti, tai aseta oma tunnus.", "nameDescription": "IMAP-käyttäjätunnus. Oletuksena sähköposti, tai aseta oma tunnus.",
@@ -193,6 +192,8 @@
"noAccountConfigurations": "Ei tilimäärityksiä", "noAccountConfigurations": "Ei tilimäärityksiä",
"noAccountConfigurationsDesc": "Et ole vielä lisännyt tilimäärityksiä. Lisää yksi aloittaaksesi tilitoimintojen käytön.", "noAccountConfigurationsDesc": "Et ole vielä lisännyt tilimäärityksiä. Lisää yksi aloittaaksesi tilitoimintojen käytön.",
"noOAuth2Tokens": "Ei OAuth2-tunnuksia", "noOAuth2Tokens": "Ei OAuth2-tunnuksia",
"noSyncAccount": "Paikallinen tili",
"noSyncAccountDescription": "Paikallinen tili vain tuodulle ditalle.",
"none": "Ei mitään", "none": "Ei mitään",
"notAvailable": "ei saatavilla", "notAvailable": "ei saatavilla",
"oauth2Tokens": "OAuth2-tunnukset", "oauth2Tokens": "OAuth2-tunnukset",
@@ -235,11 +236,11 @@
"active_session": "Aktiivinen istunto", "active_session": "Aktiivinen istunto",
"errors": "Virheet", "errors": "Virheet",
"folders": "Postilaatikot", "folders": "Postilaatikot",
"global_errors": "Yleiset virheet",
"history": "Historia" "history": "Historia"
} }
}, },
"saveChanges": "Tallenna muutokset", "saveChanges": "Tallenna muutokset",
"selectAccountType": "Valitse tilityyppi",
"selectAtLeastOneFolder": "Valitse vähintään yksi kansio", "selectAtLeastOneFolder": "Valitse vähintään yksi kansio",
"selectAuthMethod": "Valitse todennusmenetelmä", "selectAuthMethod": "Valitse todennusmenetelmä",
"selectDate": "Valitse päivämäärä", "selectDate": "Valitse päivämäärä",
@@ -1033,6 +1034,7 @@
"empty": "Ei viestejä tässä keskusteluketjussa", "empty": "Ei viestejä tässä keskusteluketjussa",
"error": "Keskusteluketjun lataus epäonnistui", "error": "Keskusteluketjun lataus epäonnistui",
"invalidDate": "Virheellinen päivämäärä", "invalidDate": "Virheellinen päivämäärä",
"latest": "Uusin",
"loadMore": "Lataa lisää", "loadMore": "Lataa lisää",
"loadingMore": "Ladataan...", "loadingMore": "Ladataan...",
"noSubject": "(Ei aihetta)", "noSubject": "(Ei aihetta)",
+7 -5
View File
@@ -92,11 +92,9 @@
"accountUpdated": "Compte Mis à Jour", "accountUpdated": "Compte Mis à Jour",
"accountUpdatedDesc": "Votre compte a été mis à jour avec succès.", "accountUpdatedDesc": "Votre compte a été mis à jour avec succès.",
"actions": "Actions", "actions": "Actions",
"add": "Ajouter un compte",
"addAccount": "Ajouter un Compte", "addAccount": "Ajouter un Compte",
"addConfiguration": "Ajouter Configuration",
"addImap": "Ajouter IMAP",
"addNewEmailAccountHere": "Ajoutez un nouveau compte e-mail ici. ", "addNewEmailAccountHere": "Ajoutez un nouveau compte e-mail ici. ",
"addNoSync": "Ajouter NoSync",
"allMailFolderSelected": "Attention : Dossier 'Tous les messages' sélectionné", "allMailFolderSelected": "Attention : Dossier 'Tous les messages' sélectionné",
"allMailFolderSelectedDesc": "La sélection de dossiers avec l'attribut 'Tous les messages' entraînera probablement la duplication des messages déjà synchronisés à partir de dossiers tels que Boîte de réception et Éléments envoyés. Cela peut consommer beaucoup plus d'espace de stockage.", "allMailFolderSelectedDesc": "La sélection de dossiers avec l'attribut 'Tous les messages' entraînera probablement la duplication des messages déjà synchronisés à partir de dossiers tels que Boîte de réception et Éléments envoyés. Cela peut consommer beaucoup plus d'espace de stockage.",
"allMailSkipped": "Dossiers par défaut sélectionnés. 'Tous les messages' a été ignoré pour éviter les doublons.", "allMailSkipped": "Dossiers par défaut sélectionnés. 'Tous les messages' a été ignoré pour éviter les doublons.",
@@ -170,6 +168,8 @@
"host": "hôte", "host": "hôte",
"id": "ID", "id": "ID",
"imap": "IMAP", "imap": "IMAP",
"imapAccount": "Compte IMAP",
"imapAccountDescription": "Télécharger et archiver les e-mails via IMAP.",
"imapAuthMethod": "Méthode d'Authentification IMAP", "imapAuthMethod": "Méthode d'Authentification IMAP",
"imapEncryption": "Chiffrement IMAP", "imapEncryption": "Chiffrement IMAP",
"imapHost": "Hôte IMAP", "imapHost": "Hôte IMAP",
@@ -185,7 +185,6 @@
"login_name": "Nom de connexion", "login_name": "Nom de connexion",
"minutes": "minutes", "minutes": "minutes",
"months": "Mois", "months": "Mois",
"moreAccountTypes": "Plus de types de compte",
"mustBeAtLeast1": "Doit être au moins 1", "mustBeAtLeast1": "Doit être au moins 1",
"name": "Nom", "name": "Nom",
"nameDescription": "Nom d'utilisateur IMAP. E-mail par défaut ou nom personnalisé.", "nameDescription": "Nom d'utilisateur IMAP. E-mail par défaut ou nom personnalisé.",
@@ -193,6 +192,8 @@
"noAccountConfigurations": "Aucune Configuration de Compte", "noAccountConfigurations": "Aucune Configuration de Compte",
"noAccountConfigurationsDesc": "Vous n'avez pas encore ajouté de Configuration de Compte. Veuillez en ajouter une pour commencer à utiliser les fonctionnalités du Compte.", "noAccountConfigurationsDesc": "Vous n'avez pas encore ajouté de Configuration de Compte. Veuillez en ajouter une pour commencer à utiliser les fonctionnalités du Compte.",
"noOAuth2Tokens": "Aucun Jeton OAuth2", "noOAuth2Tokens": "Aucun Jeton OAuth2",
"noSyncAccount": "Compte local",
"noSyncAccountDescription": "Compte local pour données importées uniquement.",
"none": "Aucune", "none": "Aucune",
"notAvailable": "n.d.", "notAvailable": "n.d.",
"oauth2Tokens": "Jetons OAuth2", "oauth2Tokens": "Jetons OAuth2",
@@ -235,11 +236,11 @@
"active_session": "Session active", "active_session": "Session active",
"errors": "Erreurs", "errors": "Erreurs",
"folders": "Boîtes mail", "folders": "Boîtes mail",
"global_errors": "Erreurs globales",
"history": "Historique" "history": "Historique"
} }
}, },
"saveChanges": "Enregistrer les Modifications", "saveChanges": "Enregistrer les Modifications",
"selectAccountType": "Sélectionner le type de compte",
"selectAtLeastOneFolder": "Veuillez sélectionner au moins un dossier", "selectAtLeastOneFolder": "Veuillez sélectionner au moins un dossier",
"selectAuthMethod": "Sélectionner une méthode d'authentification", "selectAuthMethod": "Sélectionner une méthode d'authentification",
"selectDate": "Sélectionner une date", "selectDate": "Sélectionner une date",
@@ -1033,6 +1034,7 @@
"empty": "Aucun message dans ce fil de discussion", "empty": "Aucun message dans ce fil de discussion",
"error": "Échec du chargement du fil de discussion", "error": "Échec du chargement du fil de discussion",
"invalidDate": "Date invalide", "invalidDate": "Date invalide",
"latest": "Dernier",
"loadMore": "Charger plus", "loadMore": "Charger plus",
"loadingMore": "Chargement en cours...", "loadingMore": "Chargement en cours...",
"noSubject": "(Aucun objet)", "noSubject": "(Aucun objet)",
+7 -5
View File
@@ -92,11 +92,9 @@
"accountUpdated": "Account Aggiornato", "accountUpdated": "Account Aggiornato",
"accountUpdatedDesc": "Il tuo account è stato aggiornato con successo.", "accountUpdatedDesc": "Il tuo account è stato aggiornato con successo.",
"actions": "Azioni", "actions": "Azioni",
"add": "Aggiungi account",
"addAccount": "Aggiungi Account", "addAccount": "Aggiungi Account",
"addConfiguration": "Aggiungi Configurazione",
"addImap": "Aggiungi IMAP",
"addNewEmailAccountHere": "Aggiungi un nuovo account email qui. ", "addNewEmailAccountHere": "Aggiungi un nuovo account email qui. ",
"addNoSync": "Aggiungi NoSync",
"allMailFolderSelected": "Attenzione: Cartella 'Tutta la Posta' Selezionata", "allMailFolderSelected": "Attenzione: Cartella 'Tutta la Posta' Selezionata",
"allMailFolderSelectedDesc": "La selezione di cartelle con l'attributo 'Tutta la Posta' probabilmente causerà la duplicazione dei messaggi già sincronizzati da cartelle come Posta in arrivo e Posta inviata. Questo può consumare significativamente più spazio di archiviazione.", "allMailFolderSelectedDesc": "La selezione di cartelle con l'attributo 'Tutta la Posta' probabilmente causerà la duplicazione dei messaggi già sincronizzati da cartelle come Posta in arrivo e Posta inviata. Questo può consumare significativamente più spazio di archiviazione.",
"allMailSkipped": "Cartelle predefinite selezionate. 'Tutta la Posta' è stata saltata per evitare duplicati.", "allMailSkipped": "Cartelle predefinite selezionate. 'Tutta la Posta' è stata saltata per evitare duplicati.",
@@ -170,6 +168,8 @@
"host": "host", "host": "host",
"id": "ID", "id": "ID",
"imap": "IMAP", "imap": "IMAP",
"imapAccount": "Account IMAP",
"imapAccountDescription": "Scarica e archivia email via IMAP.",
"imapAuthMethod": "Metodo di Autenticazione IMAP", "imapAuthMethod": "Metodo di Autenticazione IMAP",
"imapEncryption": "Crittografia IMAP", "imapEncryption": "Crittografia IMAP",
"imapHost": "Host IMAP", "imapHost": "Host IMAP",
@@ -185,7 +185,6 @@
"login_name": "Nome di accesso", "login_name": "Nome di accesso",
"minutes": "minuti", "minutes": "minuti",
"months": "Mesi", "months": "Mesi",
"moreAccountTypes": "Altri tipi di account",
"mustBeAtLeast1": "Deve essere almeno 1", "mustBeAtLeast1": "Deve essere almeno 1",
"name": "Nome", "name": "Nome",
"nameDescription": "Nome utente IMAP. Predefinito l'email, oppure personalizzalo.", "nameDescription": "Nome utente IMAP. Predefinito l'email, oppure personalizzalo.",
@@ -193,6 +192,8 @@
"noAccountConfigurations": "Nessuna Configurazione Account", "noAccountConfigurations": "Nessuna Configurazione Account",
"noAccountConfigurationsDesc": "Non hai ancora aggiunto alcuna Configurazione Account. Aggiungine una per iniziare a usare le funzionalità Account.", "noAccountConfigurationsDesc": "Non hai ancora aggiunto alcuna Configurazione Account. Aggiungine una per iniziare a usare le funzionalità Account.",
"noOAuth2Tokens": "Nessun Token OAuth2", "noOAuth2Tokens": "Nessun Token OAuth2",
"noSyncAccount": "Account locale",
"noSyncAccountDescription": "Account locale solo per dati importati.",
"none": "Nessuna", "none": "Nessuna",
"notAvailable": "n.d.", "notAvailable": "n.d.",
"oauth2Tokens": "Token OAuth2", "oauth2Tokens": "Token OAuth2",
@@ -235,11 +236,11 @@
"active_session": "Sessione attiva", "active_session": "Sessione attiva",
"errors": "Errori", "errors": "Errori",
"folders": "Caselle di posta", "folders": "Caselle di posta",
"global_errors": "Errori globali",
"history": "Cronologia" "history": "Cronologia"
} }
}, },
"saveChanges": "Salva Modifiche", "saveChanges": "Salva Modifiche",
"selectAccountType": "Seleziona tipo di account",
"selectAtLeastOneFolder": "Seleziona almeno una cartella", "selectAtLeastOneFolder": "Seleziona almeno una cartella",
"selectAuthMethod": "Seleziona un metodo di autenticazione", "selectAuthMethod": "Seleziona un metodo di autenticazione",
"selectDate": "Seleziona una data", "selectDate": "Seleziona una data",
@@ -1033,6 +1034,7 @@
"empty": "Nessun messaggio in questo thread", "empty": "Nessun messaggio in questo thread",
"error": "Caricamento thread fallito", "error": "Caricamento thread fallito",
"invalidDate": "Data non valida", "invalidDate": "Data non valida",
"latest": "Ultimo",
"loadMore": "Carica altro", "loadMore": "Carica altro",
"loadingMore": "Caricamento in corso...", "loadingMore": "Caricamento in corso...",
"noSubject": "(Nessun oggetto)", "noSubject": "(Nessun oggetto)",
+7 -5
View File
@@ -92,11 +92,9 @@
"accountUpdated": "アカウントが更新されました", "accountUpdated": "アカウントが更新されました",
"accountUpdatedDesc": "アカウントが正常に更新されました。", "accountUpdatedDesc": "アカウントが正常に更新されました。",
"actions": "アクション", "actions": "アクション",
"add": "アカウントを追加",
"addAccount": "アカウントを追加", "addAccount": "アカウントを追加",
"addConfiguration": "設定を追加",
"addImap": "IMAPアカウントを追加",
"addNewEmailAccountHere": "こちらで新しいメールアカウントを追加してください。", "addNewEmailAccountHere": "こちらで新しいメールアカウントを追加してください。",
"addNoSync": "非同期アカウントを追加",
"allMailFolderSelected": "ご注意: 「すべてのメール」フォルダーが選択されています", "allMailFolderSelected": "ご注意: 「すべてのメール」フォルダーが選択されています",
"allMailFolderSelectedDesc": "「すべてのメール」属性を持つフォルダーを選択すると、受信トレイや送信済みなどのフォルダーからすでに同期されているメッセージが重複する可能性があります。これにより、ストレージ容量が大幅に消費される可能性があります。", "allMailFolderSelectedDesc": "「すべてのメール」属性を持つフォルダーを選択すると、受信トレイや送信済みなどのフォルダーからすでに同期されているメッセージが重複する可能性があります。これにより、ストレージ容量が大幅に消費される可能性があります。",
"allMailSkipped": "標準フォルダーが選択されました。「すべてのメール」は重複を避けるためにスキップされました。", "allMailSkipped": "標準フォルダーが選択されました。「すべてのメール」は重複を避けるためにスキップされました。",
@@ -170,6 +168,8 @@
"host": "ホスト", "host": "ホスト",
"id": "ID", "id": "ID",
"imap": "IMAP", "imap": "IMAP",
"imapAccount": "IMAP アカウント",
"imapAccountDescription": "IMAPでメールをダウンロード・アーカイブ。",
"imapAuthMethod": "IMAP認証方式", "imapAuthMethod": "IMAP認証方式",
"imapEncryption": "IMAP暗号化", "imapEncryption": "IMAP暗号化",
"imapHost": "IMAPホスト", "imapHost": "IMAPホスト",
@@ -185,7 +185,6 @@
"login_name": "ログイン名", "login_name": "ログイン名",
"minutes": "分", "minutes": "分",
"months": "月", "months": "月",
"moreAccountTypes": "他のアカウントタイプ",
"mustBeAtLeast1": "1以上である必要があります", "mustBeAtLeast1": "1以上である必要があります",
"name": "名前", "name": "名前",
"nameDescription": "IMAPユーザー名。通常はメールアドレスですが、変更も可能です。", "nameDescription": "IMAPユーザー名。通常はメールアドレスですが、変更も可能です。",
@@ -193,6 +192,8 @@
"noAccountConfigurations": "アカウント設定がありません", "noAccountConfigurations": "アカウント設定がありません",
"noAccountConfigurationsDesc": "まだアカウント設定を追加していません。機能を利用するには設定を追加してください。", "noAccountConfigurationsDesc": "まだアカウント設定を追加していません。機能を利用するには設定を追加してください。",
"noOAuth2Tokens": "OAuth2トークンなし", "noOAuth2Tokens": "OAuth2トークンなし",
"noSyncAccount": "ローカルアカウント",
"noSyncAccountDescription": "インポートデータ専用のローカルアカウント。",
"none": "なし", "none": "なし",
"notAvailable": "N/A", "notAvailable": "N/A",
"oauth2Tokens": "OAuth2トークン", "oauth2Tokens": "OAuth2トークン",
@@ -235,11 +236,11 @@
"active_session": "実行中タスク", "active_session": "実行中タスク",
"errors": "エラー", "errors": "エラー",
"folders": "メールボックス", "folders": "メールボックス",
"global_errors": "全体エラー",
"history": "履歴" "history": "履歴"
} }
}, },
"saveChanges": "変更を保存", "saveChanges": "変更を保存",
"selectAccountType": "アカウントの種類を選択",
"selectAtLeastOneFolder": "少なくとも1つのフォルダーを選択してください", "selectAtLeastOneFolder": "少なくとも1つのフォルダーを選択してください",
"selectAuthMethod": "認証方式を選択", "selectAuthMethod": "認証方式を選択",
"selectDate": "日付を選択", "selectDate": "日付を選択",
@@ -1033,6 +1034,7 @@
"empty": "このスレッドにメッセージはありません", "empty": "このスレッドにメッセージはありません",
"error": "スレッドの読み込みに失敗しました", "error": "スレッドの読み込みに失敗しました",
"invalidDate": "無効な日付", "invalidDate": "無効な日付",
"latest": "最新",
"loadMore": "さらに読み込む", "loadMore": "さらに読み込む",
"loadingMore": "読み込み中...", "loadingMore": "読み込み中...",
"noSubject": "(件名なし)", "noSubject": "(件名なし)",
+7 -5
View File
@@ -92,11 +92,9 @@
"accountUpdated": "계정 업데이트됨", "accountUpdated": "계정 업데이트됨",
"accountUpdatedDesc": "계정이 성공적으로 업데이트되었습니다.", "accountUpdatedDesc": "계정이 성공적으로 업데이트되었습니다.",
"actions": "작업", "actions": "작업",
"add": "계정 추가",
"addAccount": "계정 추가", "addAccount": "계정 추가",
"addConfiguration": "구성 추가",
"addImap": "IMAP 계정 추가",
"addNewEmailAccountHere": "여기에서 새 이메일 계정을 추가하십시오.", "addNewEmailAccountHere": "여기에서 새 이메일 계정을 추가하십시오.",
"addNoSync": "동기화 안 함 계정 추가",
"allMailFolderSelected": "주의: '모든 메일' 폴더가 선택되었습니다", "allMailFolderSelected": "주의: '모든 메일' 폴더가 선택되었습니다",
"allMailFolderSelectedDesc": "'모든 메일' 속성을 가진 폴더를 선택하면 받은 편지함이나 보낸 항목과 같은 폴더에서 이미 동기화된 메시지가 중복될 수 있습니다. 이로 인해 저장 공간이 상당히 많이 사용될 수 있습니다.", "allMailFolderSelectedDesc": "'모든 메일' 속성을 가진 폴더를 선택하면 받은 편지함이나 보낸 항목과 같은 폴더에서 이미 동기화된 메시지가 중복될 수 있습니다. 이로 인해 저장 공간이 상당히 많이 사용될 수 있습니다.",
"allMailSkipped": "기본 폴더가 선택되었습니다. 중복을 방지하기 위해 '모든 메일'은 건너뛰었습니다.", "allMailSkipped": "기본 폴더가 선택되었습니다. 중복을 방지하기 위해 '모든 메일'은 건너뛰었습니다.",
@@ -170,6 +168,8 @@
"host": "호스트", "host": "호스트",
"id": "ID", "id": "ID",
"imap": "IMAP", "imap": "IMAP",
"imapAccount": "IMAP 계정",
"imapAccountDescription": "IMAP으로 메일 다운로드 및 보관.",
"imapAuthMethod": "IMAP 인증 방법", "imapAuthMethod": "IMAP 인증 방법",
"imapEncryption": "IMAP 암호화", "imapEncryption": "IMAP 암호화",
"imapHost": "IMAP 호스트", "imapHost": "IMAP 호스트",
@@ -185,7 +185,6 @@
"login_name": "로그인 이름", "login_name": "로그인 이름",
"minutes": "분", "minutes": "분",
"months": "개월", "months": "개월",
"moreAccountTypes": "더 많은 계정 유형",
"mustBeAtLeast1": "최소 1 이상이어야 합니다", "mustBeAtLeast1": "최소 1 이상이어야 합니다",
"name": "이름", "name": "이름",
"nameDescription": "IMAP 사용자 이름. 기본값은 이메일이며, 직접 입력도 가능합니다.", "nameDescription": "IMAP 사용자 이름. 기본값은 이메일이며, 직접 입력도 가능합니다.",
@@ -193,6 +192,8 @@
"noAccountConfigurations": "계정 구성 없음", "noAccountConfigurations": "계정 구성 없음",
"noAccountConfigurationsDesc": "아직 계정 구성을 추가하지 않았습니다. 기능을 사용하려면 추가하십시오.", "noAccountConfigurationsDesc": "아직 계정 구성을 추가하지 않았습니다. 기능을 사용하려면 추가하십시오.",
"noOAuth2Tokens": "OAuth2 토큰 없음", "noOAuth2Tokens": "OAuth2 토큰 없음",
"noSyncAccount": "로컬 계정",
"noSyncAccountDescription": "가져온 데이터 전용 로컬 계정.",
"none": "없음", "none": "없음",
"notAvailable": "해당 없음", "notAvailable": "해당 없음",
"oauth2Tokens": "OAuth2 토큰", "oauth2Tokens": "OAuth2 토큰",
@@ -235,11 +236,11 @@
"active_session": "현재 작업", "active_session": "현재 작업",
"errors": "오류", "errors": "오류",
"folders": "메일함", "folders": "메일함",
"global_errors": "전체 오류",
"history": "기록" "history": "기록"
} }
}, },
"saveChanges": "변경 사항 저장", "saveChanges": "변경 사항 저장",
"selectAccountType": "계정 유형 선택",
"selectAtLeastOneFolder": "하나 이상의 폴더를 선택하십시오", "selectAtLeastOneFolder": "하나 이상의 폴더를 선택하십시오",
"selectAuthMethod": "인증 방법 선택", "selectAuthMethod": "인증 방법 선택",
"selectDate": "날짜 선택", "selectDate": "날짜 선택",
@@ -1033,6 +1034,7 @@
"empty": "이 스레드에 메시지가 없습니다", "empty": "이 스레드에 메시지가 없습니다",
"error": "스레드 로드 실패", "error": "스레드 로드 실패",
"invalidDate": "유효하지 않은 날짜", "invalidDate": "유효하지 않은 날짜",
"latest": "최신",
"loadMore": "더 로드", "loadMore": "더 로드",
"loadingMore": "로드 중...", "loadingMore": "로드 중...",
"noSubject": "(제목 없음)", "noSubject": "(제목 없음)",
+7 -5
View File
@@ -92,11 +92,9 @@
"accountUpdated": "Account Bijgewerkt", "accountUpdated": "Account Bijgewerkt",
"accountUpdatedDesc": "Uw account is succesvol bijgewerkt.", "accountUpdatedDesc": "Uw account is succesvol bijgewerkt.",
"actions": "Acties", "actions": "Acties",
"add": "Account toevoegen",
"addAccount": "Account Toevoegen", "addAccount": "Account Toevoegen",
"addConfiguration": "Configuratie Toevoegen",
"addImap": "IMAP Toevoegen",
"addNewEmailAccountHere": "Voeg hier een nieuw e-mailaccount toe. ", "addNewEmailAccountHere": "Voeg hier een nieuw e-mailaccount toe. ",
"addNoSync": "NoSync Toevoegen",
"allMailFolderSelected": "Let Op: 'Alle Mail' Map Geselecteerd", "allMailFolderSelected": "Let Op: 'Alle Mail' Map Geselecteerd",
"allMailFolderSelectedDesc": "Het selecteren van mappen met het 'Alle Mail'-kenmerk zal waarschijnlijk leiden tot dubbele berichten die al zijn gesynchroniseerd vanuit mappen zoals Postvak In en Verzonden. Dit kan aanzienlijk meer opslagruimte in beslag nemen.", "allMailFolderSelectedDesc": "Het selecteren van mappen met het 'Alle Mail'-kenmerk zal waarschijnlijk leiden tot dubbele berichten die al zijn gesynchroniseerd vanuit mappen zoals Postvak In en Verzonden. Dit kan aanzienlijk meer opslagruimte in beslag nemen.",
"allMailSkipped": "Standaardmappen geselecteerd. 'Alle Mail' is overgeslagen om duplicaten te voorkomen.", "allMailSkipped": "Standaardmappen geselecteerd. 'Alle Mail' is overgeslagen om duplicaten te voorkomen.",
@@ -170,6 +168,8 @@
"host": "host", "host": "host",
"id": "ID", "id": "ID",
"imap": "IMAP", "imap": "IMAP",
"imapAccount": "IMAP-account",
"imapAccountDescription": "E-mails downloaden en archiveren via IMAP.",
"imapAuthMethod": "IMAP Autorisatiemethode", "imapAuthMethod": "IMAP Autorisatiemethode",
"imapEncryption": "IMAP Versleuteling", "imapEncryption": "IMAP Versleuteling",
"imapHost": "IMAP Host", "imapHost": "IMAP Host",
@@ -185,7 +185,6 @@
"login_name": "Inlognaam", "login_name": "Inlognaam",
"minutes": "minuten", "minutes": "minuten",
"months": "Maanden", "months": "Maanden",
"moreAccountTypes": "Meer accounttypes",
"mustBeAtLeast1": "Moet ten minste 1 zijn", "mustBeAtLeast1": "Moet ten minste 1 zijn",
"name": "Naam", "name": "Naam",
"nameDescription": "IMAP-gebruikersnaam. Standaard je e-mail, of kies een andere.", "nameDescription": "IMAP-gebruikersnaam. Standaard je e-mail, of kies een andere.",
@@ -193,6 +192,8 @@
"noAccountConfigurations": "Geen Accountconfiguraties", "noAccountConfigurations": "Geen Accountconfiguraties",
"noAccountConfigurationsDesc": "U heeft nog geen Accountconfiguraties toegevoegd. Voeg er een toe om de Accountfuncties te gebruiken.", "noAccountConfigurationsDesc": "U heeft nog geen Accountconfiguraties toegevoegd. Voeg er een toe om de Accountfuncties te gebruiken.",
"noOAuth2Tokens": "Geen OAuth2 Tokens", "noOAuth2Tokens": "Geen OAuth2 Tokens",
"noSyncAccount": "Lokaal account",
"noSyncAccountDescription": "Lokaal account alleen voor geïmporteerde gegevens.",
"none": "Geen", "none": "Geen",
"notAvailable": "n.v.t.", "notAvailable": "n.v.t.",
"oauth2Tokens": "OAuth2 Tokens", "oauth2Tokens": "OAuth2 Tokens",
@@ -235,11 +236,11 @@
"active_session": "Actieve sessie", "active_session": "Actieve sessie",
"errors": "Fouten", "errors": "Fouten",
"folders": "Mailboxen", "folders": "Mailboxen",
"global_errors": "Globale fouten",
"history": "Geschiedenis" "history": "Geschiedenis"
} }
}, },
"saveChanges": "Wijzigingen opslaan", "saveChanges": "Wijzigingen opslaan",
"selectAccountType": "Selecteer accounttype",
"selectAtLeastOneFolder": "Selecteer alstublieft ten minste één map", "selectAtLeastOneFolder": "Selecteer alstublieft ten minste één map",
"selectAuthMethod": "Selecteer een authenticatiemethode", "selectAuthMethod": "Selecteer een authenticatiemethode",
"selectDate": "Selecteer een datum", "selectDate": "Selecteer een datum",
@@ -1033,6 +1034,7 @@
"empty": "Geen berichten in deze draad", "empty": "Geen berichten in deze draad",
"error": "Laden van draad mislukt", "error": "Laden van draad mislukt",
"invalidDate": "Ongeldige datum", "invalidDate": "Ongeldige datum",
"latest": "Nieuwste",
"loadMore": "Meer laden", "loadMore": "Meer laden",
"loadingMore": "Laden...", "loadingMore": "Laden...",
"noSubject": "(Geen onderwerp)", "noSubject": "(Geen onderwerp)",
+7 -5
View File
@@ -92,11 +92,9 @@
"accountUpdated": "Konto oppdatert", "accountUpdated": "Konto oppdatert",
"accountUpdatedDesc": "Kontoen din har blitt oppdatert.", "accountUpdatedDesc": "Kontoen din har blitt oppdatert.",
"actions": "Handlinger", "actions": "Handlinger",
"add": "Legg til konto",
"addAccount": "Legg til konto", "addAccount": "Legg til konto",
"addConfiguration": "Legg til konfigurasjon",
"addImap": "Legg til IMAP",
"addNewEmailAccountHere": "Legg til ny e-postkonto her. ", "addNewEmailAccountHere": "Legg til ny e-postkonto her. ",
"addNoSync": "Legg til NoSync",
"allMailFolderSelected": "OBS: Mappen \"All e-post\" er valgt", "allMailFolderSelected": "OBS: Mappen \"All e-post\" er valgt",
"allMailFolderSelectedDesc": "Å velge mapper med attributtet \"All e-post\" (All Mail) vil sannsynligvis føre til duplisering av meldinger som allerede er synkronisert fra mapper som Innboks og Sendt. Dette kan forbruke betydelig mer lagringsplass.", "allMailFolderSelectedDesc": "Å velge mapper med attributtet \"All e-post\" (All Mail) vil sannsynligvis føre til duplisering av meldinger som allerede er synkronisert fra mapper som Innboks og Sendt. Dette kan forbruke betydelig mer lagringsplass.",
"allMailSkipped": "Valgte standardmapper. 'All e-post' ble hoppet over for å unngå duplikater.", "allMailSkipped": "Valgte standardmapper. 'All e-post' ble hoppet over for å unngå duplikater.",
@@ -170,6 +168,8 @@
"host": "vert", "host": "vert",
"id": "ID", "id": "ID",
"imap": "IMAP", "imap": "IMAP",
"imapAccount": "IMAP-konto",
"imapAccountDescription": "Last ned og arkiver e-post via IMAP.",
"imapAuthMethod": "IMAP-autentiseringsmetode", "imapAuthMethod": "IMAP-autentiseringsmetode",
"imapEncryption": "IMAP-kryptering", "imapEncryption": "IMAP-kryptering",
"imapHost": "IMAP-vert", "imapHost": "IMAP-vert",
@@ -185,7 +185,6 @@
"login_name": "Påloggingsnavn", "login_name": "Påloggingsnavn",
"minutes": "minutter", "minutes": "minutter",
"months": "Måneder", "months": "Måneder",
"moreAccountTypes": "Flere kontotyper",
"mustBeAtLeast1": "Må være minst 1", "mustBeAtLeast1": "Må være minst 1",
"name": "Navn", "name": "Navn",
"nameDescription": "IMAP-brukernavn. Bruker e-post som standard, eller velg et eget.", "nameDescription": "IMAP-brukernavn. Bruker e-post som standard, eller velg et eget.",
@@ -193,6 +192,8 @@
"noAccountConfigurations": "Ingen kontokonfigurasjoner", "noAccountConfigurations": "Ingen kontokonfigurasjoner",
"noAccountConfigurationsDesc": "Du har ikke lagt til noen kontokonfigurasjoner ennå. Legg til en for å begynne å bruke kontofunksjoner.", "noAccountConfigurationsDesc": "Du har ikke lagt til noen kontokonfigurasjoner ennå. Legg til en for å begynne å bruke kontofunksjoner.",
"noOAuth2Tokens": "Ingen OAuth2-tokener", "noOAuth2Tokens": "Ingen OAuth2-tokener",
"noSyncAccount": "Lokal konto",
"noSyncAccountDescription": "Lokal konto kun for importerte data.",
"none": "Ingen", "none": "Ingen",
"notAvailable": "i/t", "notAvailable": "i/t",
"oauth2Tokens": "OAuth2-tokener", "oauth2Tokens": "OAuth2-tokener",
@@ -235,11 +236,11 @@
"active_session": "Aktiv økt", "active_session": "Aktiv økt",
"errors": "Feil", "errors": "Feil",
"folders": "Postbokser", "folders": "Postbokser",
"global_errors": "Globale feil",
"history": "Historikk" "history": "Historikk"
} }
}, },
"saveChanges": "Lagre endringer", "saveChanges": "Lagre endringer",
"selectAccountType": "Velg kontotype",
"selectAtLeastOneFolder": "Vennligst velg minst én mappe", "selectAtLeastOneFolder": "Vennligst velg minst én mappe",
"selectAuthMethod": "Velg en autentiseringsmetode", "selectAuthMethod": "Velg en autentiseringsmetode",
"selectDate": "Velg en dato", "selectDate": "Velg en dato",
@@ -1033,6 +1034,7 @@
"empty": "Ingen meldinger i denne tråden", "empty": "Ingen meldinger i denne tråden",
"error": "Kunne ikke laste tråd", "error": "Kunne ikke laste tråd",
"invalidDate": "Ugyldig dato", "invalidDate": "Ugyldig dato",
"latest": "Siste",
"loadMore": "Last mer", "loadMore": "Last mer",
"loadingMore": "Laster...", "loadingMore": "Laster...",
"noSubject": "(Uten emne)", "noSubject": "(Uten emne)",
+7 -5
View File
@@ -92,11 +92,9 @@
"accountUpdated": "Konto zaktualizowano", "accountUpdated": "Konto zaktualizowano",
"accountUpdatedDesc": "Twoje konto zostało prawidłowo zaktualizowane.", "accountUpdatedDesc": "Twoje konto zostało prawidłowo zaktualizowane.",
"actions": "Działania", "actions": "Działania",
"add": "Dodaj konto",
"addAccount": "Dodaj konto. ", "addAccount": "Dodaj konto. ",
"addConfiguration": "Dodaj konfigurację",
"addImap": "Dodaj IMAP",
"addNewEmailAccountHere": "Dodaj nowe konto email tutaj. ", "addNewEmailAccountHere": "Dodaj nowe konto email tutaj. ",
"addNoSync": "Dodaj NoSync",
"allMailFolderSelected": "Uwaga: folder \"Wszystkie wiadomości\" izostał zaznaczony", "allMailFolderSelected": "Uwaga: folder \"Wszystkie wiadomości\" izostał zaznaczony",
"allMailFolderSelectedDesc": "Wybierając foldery z atrybutem \"Wszystkie wiadomości\" prawdopodobnie spowoduje to duplikowanie się wiadomości już zsynchronizowanych z folderów takich jak Skrzynka odbiorcza i Wysłane. Może to zająć znacznie więcej miejsca", "allMailFolderSelectedDesc": "Wybierając foldery z atrybutem \"Wszystkie wiadomości\" prawdopodobnie spowoduje to duplikowanie się wiadomości już zsynchronizowanych z folderów takich jak Skrzynka odbiorcza i Wysłane. Może to zająć znacznie więcej miejsca",
"allMailSkipped": "Wybrane foldery standardowe. Pominięto 'Wszystkie wiadomości', aby uniknąć duplikatów.", "allMailSkipped": "Wybrane foldery standardowe. Pominięto 'Wszystkie wiadomości', aby uniknąć duplikatów.",
@@ -170,6 +168,8 @@
"host": "host", "host": "host",
"id": "ID", "id": "ID",
"imap": "IMAP", "imap": "IMAP",
"imapAccount": "Konto IMAP",
"imapAccountDescription": "Pobieraj i archiwizuj e-maile przez IMAP.",
"imapAuthMethod": "Metoda uwierzytelniania IMAP", "imapAuthMethod": "Metoda uwierzytelniania IMAP",
"imapEncryption": "Szyfrowanie IMAP", "imapEncryption": "Szyfrowanie IMAP",
"imapHost": "Host IMAP", "imapHost": "Host IMAP",
@@ -185,7 +185,6 @@
"login_name": "Login", "login_name": "Login",
"minutes": "minut", "minutes": "minut",
"months": "Miesiące", "months": "Miesiące",
"moreAccountTypes": "Więcej typów kont",
"mustBeAtLeast1": "Nie mniej jak 1", "mustBeAtLeast1": "Nie mniej jak 1",
"name": "Nazwa", "name": "Nazwa",
"nameDescription": "Nazwa użytkownika IMAP. Domyślnie e-mail lub własna nazwa.", "nameDescription": "Nazwa użytkownika IMAP. Domyślnie e-mail lub własna nazwa.",
@@ -193,6 +192,8 @@
"noAccountConfigurations": "Brak konfiguracji konta", "noAccountConfigurations": "Brak konfiguracji konta",
"noAccountConfigurationsDesc": "Nie skonfigurowano jeszcze żadnego konta, aby zacząć korzystać z funkcji dodaj pierwsze konto.", "noAccountConfigurationsDesc": "Nie skonfigurowano jeszcze żadnego konta, aby zacząć korzystać z funkcji dodaj pierwsze konto.",
"noOAuth2Tokens": "Brak tokenów OAuth2", "noOAuth2Tokens": "Brak tokenów OAuth2",
"noSyncAccount": "Konto lokalne",
"noSyncAccountDescription": "Konto lokalne tylko dla zaimportowanych danych.",
"none": "Nigdy", "none": "Nigdy",
"notAvailable": "niedostępny", "notAvailable": "niedostępny",
"oauth2Tokens": "Tokeny OAuth2", "oauth2Tokens": "Tokeny OAuth2",
@@ -235,11 +236,11 @@
"active_session": "Aktywna sesja", "active_session": "Aktywna sesja",
"errors": "Błędy", "errors": "Błędy",
"folders": "Skrzynki", "folders": "Skrzynki",
"global_errors": "Błędy globalne",
"history": "Historia" "history": "Historia"
} }
}, },
"saveChanges": "Zapisz zmiany", "saveChanges": "Zapisz zmiany",
"selectAccountType": "Wybierz typ konta",
"selectAtLeastOneFolder": "Wybierz co najmniej jeden folder", "selectAtLeastOneFolder": "Wybierz co najmniej jeden folder",
"selectAuthMethod": "Zaznacz metodę uwierzytelniania IMAP", "selectAuthMethod": "Zaznacz metodę uwierzytelniania IMAP",
"selectDate": "Zaznacz datę", "selectDate": "Zaznacz datę",
@@ -1033,6 +1034,7 @@
"empty": "Brak wiadomości w tym wątku", "empty": "Brak wiadomości w tym wątku",
"error": "Nie udało się załadować wątku", "error": "Nie udało się załadować wątku",
"invalidDate": "Nieprawidłowa data", "invalidDate": "Nieprawidłowa data",
"latest": "Najnowsze",
"loadMore": "Załaduj więcej", "loadMore": "Załaduj więcej",
"loadingMore": "Ładowanie...", "loadingMore": "Ładowanie...",
"noSubject": "(brak tematu)", "noSubject": "(brak tematu)",
+7 -5
View File
@@ -92,11 +92,9 @@
"accountUpdated": "Conta Atualizada", "accountUpdated": "Conta Atualizada",
"accountUpdatedDesc": "A conta foi atualizada com sucesso.", "accountUpdatedDesc": "A conta foi atualizada com sucesso.",
"actions": "Ações", "actions": "Ações",
"add": "Adicionar conta",
"addAccount": "Adicionar Conta", "addAccount": "Adicionar Conta",
"addConfiguration": "Adicionar Configuração",
"addImap": "Adicionar Conta IMAP",
"addNewEmailAccountHere": "Adicione uma nova conta de email aqui.", "addNewEmailAccountHere": "Adicione uma nova conta de email aqui.",
"addNoSync": "Adicionar Conta Sem Sincronização",
"allMailFolderSelected": "Atenção: A pasta 'Todos os Emails' está selecionada", "allMailFolderSelected": "Atenção: A pasta 'Todos os Emails' está selecionada",
"allMailFolderSelectedDesc": "Selecionar uma pasta com o atributo 'Todos os Emails' pode duplicar mensagens já sincronizadas de pastas como Caixa de Entrada ou Itens Enviados. Isso pode consumir significativamente o seu armazenamento.", "allMailFolderSelectedDesc": "Selecionar uma pasta com o atributo 'Todos os Emails' pode duplicar mensagens já sincronizadas de pastas como Caixa de Entrada ou Itens Enviados. Isso pode consumir significativamente o seu armazenamento.",
"allMailSkipped": "Pastas padrão selecionadas. 'Todos os Emails' foi ignorado para evitar duplicação.", "allMailSkipped": "Pastas padrão selecionadas. 'Todos os Emails' foi ignorado para evitar duplicação.",
@@ -170,6 +168,8 @@
"host": "Host", "host": "Host",
"id": "ID", "id": "ID",
"imap": "IMAP", "imap": "IMAP",
"imapAccount": "Conta IMAP",
"imapAccountDescription": "Baixar e arquivar e-mails via IMAP.",
"imapAuthMethod": "Método de Autenticação IMAP", "imapAuthMethod": "Método de Autenticação IMAP",
"imapEncryption": "Criptografia IMAP", "imapEncryption": "Criptografia IMAP",
"imapHost": "Host IMAP", "imapHost": "Host IMAP",
@@ -185,7 +185,6 @@
"login_name": "Nome de login", "login_name": "Nome de login",
"minutes": "minutos", "minutes": "minutos",
"months": "Meses", "months": "Meses",
"moreAccountTypes": "Mais Tipos de Conta",
"mustBeAtLeast1": "Deve ser pelo menos 1", "mustBeAtLeast1": "Deve ser pelo menos 1",
"name": "Nome", "name": "Nome",
"nameDescription": "Usuário IMAP. Por padrão é seu e-mail, ou defina um personalizado.", "nameDescription": "Usuário IMAP. Por padrão é seu e-mail, ou defina um personalizado.",
@@ -193,6 +192,8 @@
"noAccountConfigurations": "Nenhuma Configuração de Conta", "noAccountConfigurations": "Nenhuma Configuração de Conta",
"noAccountConfigurationsDesc": "Você ainda não adicionou nenhuma configuração de conta. Adicione uma para utilizar a funcionalidade.", "noAccountConfigurationsDesc": "Você ainda não adicionou nenhuma configuração de conta. Adicione uma para utilizar a funcionalidade.",
"noOAuth2Tokens": "Sem Tokens OAuth2", "noOAuth2Tokens": "Sem Tokens OAuth2",
"noSyncAccount": "Conta local",
"noSyncAccountDescription": "Conta local apenas para dados importados.",
"none": "Nenhum", "none": "Nenhum",
"notAvailable": "N/D", "notAvailable": "N/D",
"oauth2Tokens": "Tokens OAuth2", "oauth2Tokens": "Tokens OAuth2",
@@ -235,11 +236,11 @@
"active_session": "Sessão ativa", "active_session": "Sessão ativa",
"errors": "Erros", "errors": "Erros",
"folders": "Caixas de correio", "folders": "Caixas de correio",
"global_errors": "Erros globais",
"history": "Histórico" "history": "Histórico"
} }
}, },
"saveChanges": "Salvar Alterações", "saveChanges": "Salvar Alterações",
"selectAccountType": "Selecionar tipo de conta",
"selectAtLeastOneFolder": "Por favor, selecione pelo menos uma pasta", "selectAtLeastOneFolder": "Por favor, selecione pelo menos uma pasta",
"selectAuthMethod": "Selecionar Método de Autenticação", "selectAuthMethod": "Selecionar Método de Autenticação",
"selectDate": "Selecionar Data", "selectDate": "Selecionar Data",
@@ -1033,6 +1034,7 @@
"empty": "Não há mensagens neste tópico", "empty": "Não há mensagens neste tópico",
"error": "Falha ao carregar o tópico", "error": "Falha ao carregar o tópico",
"invalidDate": "Data Inválida", "invalidDate": "Data Inválida",
"latest": "Mais recente",
"loadMore": "Carregar Mais", "loadMore": "Carregar Mais",
"loadingMore": "Carregando...", "loadingMore": "Carregando...",
"noSubject": "(Sem Assunto)", "noSubject": "(Sem Assunto)",
+7 -5
View File
@@ -92,11 +92,9 @@
"accountUpdated": "Аккаунт обновлен", "accountUpdated": "Аккаунт обновлен",
"accountUpdatedDesc": "Ваш аккаунт был успешно обновлен.", "accountUpdatedDesc": "Ваш аккаунт был успешно обновлен.",
"actions": "Действия", "actions": "Действия",
"add": "Добавить аккаунт",
"addAccount": "Добавить аккаунт", "addAccount": "Добавить аккаунт",
"addConfiguration": "Добавить конфигурацию",
"addImap": "Добавить IMAP",
"addNewEmailAccountHere": "Добавьте новый почтовый аккаунт здесь. ", "addNewEmailAccountHere": "Добавьте новый почтовый аккаунт здесь. ",
"addNoSync": "Добавить NoSync",
"allMailFolderSelected": "Внимание: Выбрана папка \"Вся почта\"", "allMailFolderSelected": "Внимание: Выбрана папка \"Вся почта\"",
"allMailFolderSelectedDesc": "Выбор папок с атрибутом \"Вся почта\" скорее всего приведет к дублированию сообщений, уже синхронизированных из папок \"Входящие\" и \"Отправленные\". Это может занять значительно больше места.", "allMailFolderSelectedDesc": "Выбор папок с атрибутом \"Вся почта\" скорее всего приведет к дублированию сообщений, уже синхронизированных из папок \"Входящие\" и \"Отправленные\". Это может занять значительно больше места.",
"allMailSkipped": "Выбраны стандартные папки. Папка 'Вся почта' пропущена во избежание дубликатов.", "allMailSkipped": "Выбраны стандартные папки. Папка 'Вся почта' пропущена во избежание дубликатов.",
@@ -170,6 +168,8 @@
"host": "хост", "host": "хост",
"id": "ID", "id": "ID",
"imap": "IMAP", "imap": "IMAP",
"imapAccount": "Аккаунт IMAP",
"imapAccountDescription": "Загрузка и архивация почты через IMAP.",
"imapAuthMethod": "Метод авторизации IMAP", "imapAuthMethod": "Метод авторизации IMAP",
"imapEncryption": "Шифрование IMAP", "imapEncryption": "Шифрование IMAP",
"imapHost": "IMAP Хост", "imapHost": "IMAP Хост",
@@ -185,7 +185,6 @@
"login_name": "Имя для входа", "login_name": "Имя для входа",
"minutes": "минут", "minutes": "минут",
"months": "Месяцы", "months": "Месяцы",
"moreAccountTypes": "Другие типы аккаунтов",
"mustBeAtLeast1": "Должно быть не менее 1", "mustBeAtLeast1": "Должно быть не менее 1",
"name": "Имя", "name": "Имя",
"nameDescription": "Имя пользователя IMAP. По умолчанию email или свой вариант.", "nameDescription": "Имя пользователя IMAP. По умолчанию email или свой вариант.",
@@ -193,6 +192,8 @@
"noAccountConfigurations": "Нет настроек учетных записей", "noAccountConfigurations": "Нет настроек учетных записей",
"noAccountConfigurationsDesc": "Вы еще не добавили ни одной конфигурации учетной записи. Добавьте одну, чтобы начать использовать функции аккаунта.", "noAccountConfigurationsDesc": "Вы еще не добавили ни одной конфигурации учетной записи. Добавьте одну, чтобы начать использовать функции аккаунта.",
"noOAuth2Tokens": "Нет токенов OAuth2", "noOAuth2Tokens": "Нет токенов OAuth2",
"noSyncAccount": "Локальный аккаунт",
"noSyncAccountDescription": "Локальный аккаунт только для импортных данных.",
"none": "Нет", "none": "Нет",
"notAvailable": "н/д", "notAvailable": "н/д",
"oauth2Tokens": "Токены OAuth2", "oauth2Tokens": "Токены OAuth2",
@@ -235,11 +236,11 @@
"active_session": "Активная сессия", "active_session": "Активная сессия",
"errors": "Ошибки", "errors": "Ошибки",
"folders": "Почтовые ящики", "folders": "Почтовые ящики",
"global_errors": "Глобальные ошибки",
"history": "История" "history": "История"
} }
}, },
"saveChanges": "Сохранить изменения", "saveChanges": "Сохранить изменения",
"selectAccountType": "Выберите тип аккаунта",
"selectAtLeastOneFolder": "Пожалуйста, выберите хотя бы одну папку", "selectAtLeastOneFolder": "Пожалуйста, выберите хотя бы одну папку",
"selectAuthMethod": "Выберите метод авторизации", "selectAuthMethod": "Выберите метод авторизации",
"selectDate": "Выберите дату", "selectDate": "Выберите дату",
@@ -1033,6 +1034,7 @@
"empty": "Нет сообщений в этой цепочке", "empty": "Нет сообщений в этой цепочке",
"error": "Не удалось загрузить цепочку", "error": "Не удалось загрузить цепочку",
"invalidDate": "Неверная дата", "invalidDate": "Неверная дата",
"latest": "Последнее",
"loadMore": "Загрузить ещё", "loadMore": "Загрузить ещё",
"loadingMore": "Загрузка...", "loadingMore": "Загрузка...",
"noSubject": "(Без темы)", "noSubject": "(Без темы)",
+7 -5
View File
@@ -92,11 +92,9 @@
"accountUpdated": "Konto uppdaterat", "accountUpdated": "Konto uppdaterat",
"accountUpdatedDesc": "Ditt konto har uppdaterats.", "accountUpdatedDesc": "Ditt konto har uppdaterats.",
"actions": "Åtgärder", "actions": "Åtgärder",
"add": "Lägg till konto",
"addAccount": "Lägg till konto", "addAccount": "Lägg till konto",
"addConfiguration": "Lägg till konfiguration",
"addImap": "Lägg till IMAP",
"addNewEmailAccountHere": "Lägg till nytt e-postkonto här. ", "addNewEmailAccountHere": "Lägg till nytt e-postkonto här. ",
"addNoSync": "Lägg till NoSync",
"allMailFolderSelected": "Observera: Mappen \"All e-post\" vald", "allMailFolderSelected": "Observera: Mappen \"All e-post\" vald",
"allMailFolderSelectedDesc": "Att välja mappar med attributet \"All e-post\" (All Mail) leder sannolikt till dubbletter av meddelanden som redan synkroniserats från mappar som Inkorg och Skickat. Detta kan ta upp betydligt mer lagringsutrymme.", "allMailFolderSelectedDesc": "Att välja mappar med attributet \"All e-post\" (All Mail) leder sannolikt till dubbletter av meddelanden som redan synkroniserats från mappar som Inkorg och Skickat. Detta kan ta upp betydligt mer lagringsutrymme.",
"allMailSkipped": "Valde standardmappar. \"All e-post\" hoppades över för att undvika dubbletter.", "allMailSkipped": "Valde standardmappar. \"All e-post\" hoppades över för att undvika dubbletter.",
@@ -170,6 +168,8 @@
"host": "värd", "host": "värd",
"id": "ID", "id": "ID",
"imap": "IMAP", "imap": "IMAP",
"imapAccount": "IMAP-konto",
"imapAccountDescription": "Ladda ner och arkivera e-post via IMAP.",
"imapAuthMethod": "IMAP-autentiseringsmetod", "imapAuthMethod": "IMAP-autentiseringsmetod",
"imapEncryption": "IMAP-kryptering", "imapEncryption": "IMAP-kryptering",
"imapHost": "IMAP-värd", "imapHost": "IMAP-värd",
@@ -185,7 +185,6 @@
"login_name": "Inloggningsnamn", "login_name": "Inloggningsnamn",
"minutes": "minuter", "minutes": "minuter",
"months": "Månader", "months": "Månader",
"moreAccountTypes": "Fler kontotyper",
"mustBeAtLeast1": "Måste vara minst 1", "mustBeAtLeast1": "Måste vara minst 1",
"name": "Namn", "name": "Namn",
"nameDescription": "IMAP-användarnamn. Förvalt är din e-post, eller ange ett valfritt.", "nameDescription": "IMAP-användarnamn. Förvalt är din e-post, eller ange ett valfritt.",
@@ -193,6 +192,8 @@
"noAccountConfigurations": "Inga kontokonfigurationer", "noAccountConfigurations": "Inga kontokonfigurationer",
"noAccountConfigurationsDesc": "Du har inte lagt till några kontokonfigurationer ännu. Lägg till en för att börja använda kontofunktioner.", "noAccountConfigurationsDesc": "Du har inte lagt till några kontokonfigurationer ännu. Lägg till en för att börja använda kontofunktioner.",
"noOAuth2Tokens": "Inga OAuth2-tokens", "noOAuth2Tokens": "Inga OAuth2-tokens",
"noSyncAccount": "Lokalt konto",
"noSyncAccountDescription": "Lokalt konto endast för importerad data.",
"none": "Ingen", "none": "Ingen",
"notAvailable": "ej tillg.", "notAvailable": "ej tillg.",
"oauth2Tokens": "OAuth2-tokens", "oauth2Tokens": "OAuth2-tokens",
@@ -235,11 +236,11 @@
"active_session": "Aktiv session", "active_session": "Aktiv session",
"errors": "Fel", "errors": "Fel",
"folders": "Postlådor", "folders": "Postlådor",
"global_errors": "Globala fel",
"history": "Historik" "history": "Historik"
} }
}, },
"saveChanges": "Spara ändringar", "saveChanges": "Spara ändringar",
"selectAccountType": "Välj kontotyp",
"selectAtLeastOneFolder": "Vänligen välj minst en mapp", "selectAtLeastOneFolder": "Vänligen välj minst en mapp",
"selectAuthMethod": "Välj en autentiseringsmetod", "selectAuthMethod": "Välj en autentiseringsmetod",
"selectDate": "Välj ett datum", "selectDate": "Välj ett datum",
@@ -1033,6 +1034,7 @@
"empty": "Inga meddelanden i denna tråd", "empty": "Inga meddelanden i denna tråd",
"error": "Kunde inte ladda tråd", "error": "Kunde inte ladda tråd",
"invalidDate": "Ogiltigt datum", "invalidDate": "Ogiltigt datum",
"latest": "Senaste",
"loadMore": "Ladda mer", "loadMore": "Ladda mer",
"loadingMore": "Laddar...", "loadingMore": "Laddar...",
"noSubject": "(Inget ämne)", "noSubject": "(Inget ämne)",
+7 -5
View File
@@ -92,11 +92,9 @@
"accountUpdated": "帳號已更新", "accountUpdated": "帳號已更新",
"accountUpdatedDesc": "帳號已成功更新。", "accountUpdatedDesc": "帳號已成功更新。",
"actions": "操作", "actions": "操作",
"add": "新增郵件帳戶",
"addAccount": "新增帳號", "addAccount": "新增帳號",
"addConfiguration": "新增設定",
"addImap": "新增 IMAP 帳號",
"addNewEmailAccountHere": "在此新增電子郵件帳號。", "addNewEmailAccountHere": "在此新增電子郵件帳號。",
"addNoSync": "新增非同步帳號",
"allMailFolderSelected": "注意:「所有郵件」資料夾已選擇", "allMailFolderSelected": "注意:「所有郵件」資料夾已選擇",
"allMailFolderSelectedDesc": "選擇具有「所有郵件」屬性的資料夾可能會導致已從收件匣或寄件備份等資料夾同步的郵件重複。這可能會大幅增加您的儲存用量。", "allMailFolderSelectedDesc": "選擇具有「所有郵件」屬性的資料夾可能會導致已從收件匣或寄件備份等資料夾同步的郵件重複。這可能會大幅增加您的儲存用量。",
"allMailSkipped": "標準資料夾已選擇,為避免重複已跳過「所有郵件」。", "allMailSkipped": "標準資料夾已選擇,為避免重複已跳過「所有郵件」。",
@@ -170,6 +168,8 @@
"host": "主機", "host": "主機",
"id": "ID", "id": "ID",
"imap": "IMAP", "imap": "IMAP",
"imapAccount": "IMAP 郵件帳戶",
"imapAccountDescription": "透過 IMAP 下載並歸檔郵件。",
"imapAuthMethod": "IMAP 驗證方法", "imapAuthMethod": "IMAP 驗證方法",
"imapEncryption": "IMAP 加密", "imapEncryption": "IMAP 加密",
"imapHost": "IMAP 主機", "imapHost": "IMAP 主機",
@@ -185,7 +185,6 @@
"login_name": "登入名稱", "login_name": "登入名稱",
"minutes": "分鐘", "minutes": "分鐘",
"months": "月", "months": "月",
"moreAccountTypes": "更多帳號類型",
"mustBeAtLeast1": "必須大於或等於 1", "mustBeAtLeast1": "必須大於或等於 1",
"name": "名稱", "name": "名稱",
"nameDescription": "IMAP 使用者名稱。預設為電子郵件,也可在此自訂。", "nameDescription": "IMAP 使用者名稱。預設為電子郵件,也可在此自訂。",
@@ -193,6 +192,8 @@
"noAccountConfigurations": "沒有帳號設定", "noAccountConfigurations": "沒有帳號設定",
"noAccountConfigurationsDesc": "您尚未新增任何帳號設定。請新增設定以使用功能。", "noAccountConfigurationsDesc": "您尚未新增任何帳號設定。請新增設定以使用功能。",
"noOAuth2Tokens": "無 OAuth2 權杖", "noOAuth2Tokens": "無 OAuth2 權杖",
"noSyncAccount": "本地帳戶",
"noSyncAccountDescription": "僅用於匯入資料的本地帳戶。",
"none": "無", "none": "無",
"notAvailable": "不適用", "notAvailable": "不適用",
"oauth2Tokens": "OAuth2 權杖", "oauth2Tokens": "OAuth2 權杖",
@@ -235,11 +236,11 @@
"active_session": "目前任務", "active_session": "目前任務",
"errors": "錯誤", "errors": "錯誤",
"folders": "郵件夾", "folders": "郵件夾",
"global_errors": "全域錯誤",
"history": "歷史記錄" "history": "歷史記錄"
} }
}, },
"saveChanges": "儲存變更", "saveChanges": "儲存變更",
"selectAccountType": "選擇郵件帳戶類型",
"selectAtLeastOneFolder": "請至少選擇一個資料夾", "selectAtLeastOneFolder": "請至少選擇一個資料夾",
"selectAuthMethod": "選擇驗證方法", "selectAuthMethod": "選擇驗證方法",
"selectDate": "選擇日期", "selectDate": "選擇日期",
@@ -1033,6 +1034,7 @@
"empty": "此串流中沒有訊息", "empty": "此串流中沒有訊息",
"error": "載入串流失敗", "error": "載入串流失敗",
"invalidDate": "無效日期", "invalidDate": "無效日期",
"latest": "最新",
"loadMore": "載入更多", "loadMore": "載入更多",
"loadingMore": "載入中...", "loadingMore": "載入中...",
"noSubject": "(無主旨)", "noSubject": "(無主旨)",
+7 -5
View File
@@ -92,11 +92,9 @@
"accountUpdated": "账户已更新", "accountUpdated": "账户已更新",
"accountUpdatedDesc": "您的账户已成功更新。", "accountUpdatedDesc": "您的账户已成功更新。",
"actions": "操作", "actions": "操作",
"add": "添加邮件账户",
"addAccount": "添加账户", "addAccount": "添加账户",
"addConfiguration": "添加配置",
"addImap": "添加 IMAP",
"addNewEmailAccountHere": "在此添加新邮件账户。", "addNewEmailAccountHere": "在此添加新邮件账户。",
"addNoSync": "添加 NoSync",
"allMailFolderSelected": "提示:已选择\"所有邮件\"文件夹", "allMailFolderSelected": "提示:已选择\"所有邮件\"文件夹",
"allMailFolderSelectedDesc": "选择具有\"所有邮件\"属性的文件夹可能会导致重复已从收件箱和已发送等文件夹同步的消息。这可能会消耗更多的存储空间。", "allMailFolderSelectedDesc": "选择具有\"所有邮件\"属性的文件夹可能会导致重复已从收件箱和已发送等文件夹同步的消息。这可能会消耗更多的存储空间。",
"allMailSkipped": "已选择标准文件夹。已跳过'所有邮件'以避免重复。", "allMailSkipped": "已选择标准文件夹。已跳过'所有邮件'以避免重复。",
@@ -170,6 +168,8 @@
"host": "主机", "host": "主机",
"id": "ID", "id": "ID",
"imap": "IMAP", "imap": "IMAP",
"imapAccount": "IMAP 邮件账户",
"imapAccountDescription": "通过 IMAP 下载并归档邮件。",
"imapAuthMethod": "IMAP 认证方法", "imapAuthMethod": "IMAP 认证方法",
"imapEncryption": "IMAP 加密", "imapEncryption": "IMAP 加密",
"imapHost": "IMAP 主机", "imapHost": "IMAP 主机",
@@ -185,7 +185,6 @@
"login_name": "登录名", "login_name": "登录名",
"minutes": "分钟", "minutes": "分钟",
"months": "月", "months": "月",
"moreAccountTypes": "更多账户类型",
"mustBeAtLeast1": "必须至少为 1", "mustBeAtLeast1": "必须至少为 1",
"name": "名称", "name": "名称",
"nameDescription": "IMAP 用户名。默认使用邮箱地址,也可在此自定义。", "nameDescription": "IMAP 用户名。默认使用邮箱地址,也可在此自定义。",
@@ -193,6 +192,8 @@
"noAccountConfigurations": "无账户配置", "noAccountConfigurations": "无账户配置",
"noAccountConfigurationsDesc": "您尚未添加任何账户配置。添加一个以开始使用账户功能。", "noAccountConfigurationsDesc": "您尚未添加任何账户配置。添加一个以开始使用账户功能。",
"noOAuth2Tokens": "无 OAuth2 令牌", "noOAuth2Tokens": "无 OAuth2 令牌",
"noSyncAccount": "本地账户",
"noSyncAccountDescription": "仅用于导入数据的本地账户。",
"none": "无", "none": "无",
"notAvailable": "暂无", "notAvailable": "暂无",
"oauth2Tokens": "OAuth2 令牌", "oauth2Tokens": "OAuth2 令牌",
@@ -235,11 +236,11 @@
"active_session": "当前任务", "active_session": "当前任务",
"errors": "错误", "errors": "错误",
"folders": "邮件夹", "folders": "邮件夹",
"global_errors": "全局错误",
"history": "历史记录" "history": "历史记录"
} }
}, },
"saveChanges": "保存更改", "saveChanges": "保存更改",
"selectAccountType": "选择邮件账户类型",
"selectAtLeastOneFolder": "请至少选择一个文件夹", "selectAtLeastOneFolder": "请至少选择一个文件夹",
"selectAuthMethod": "选择认证方法", "selectAuthMethod": "选择认证方法",
"selectDate": "选择日期", "selectDate": "选择日期",
@@ -1033,6 +1034,7 @@
"empty": "此会话没有邮件", "empty": "此会话没有邮件",
"error": "加载会话失败", "error": "加载会话失败",
"invalidDate": "无效日期", "invalidDate": "无效日期",
"latest": "最新",
"loadMore": "加载更多", "loadMore": "加载更多",
"loadingMore": "加载中...", "loadingMore": "加载中...",
"noSubject": "(无主题)", "noSubject": "(无主题)",