From 39d8168de5dbd02463bd291877b04717cfae9358 Mon Sep 17 00:00:00 2001 From: rustmailer Date: Thu, 16 Apr 2026 14:50:27 +0800 Subject: [PATCH] fix: make email/login_name immutable and add ui sortable account_name #195 --- src/modules/account/migration.rs | 93 +++++++++++-------- src/modules/account/payload.rs | 42 ++++++--- src/modules/account/view.rs | 28 +++--- .../download_folders.rs} | 10 +- .../download_type.rs} | 2 +- .../cache/imap/{sync => download}/flow.rs | 8 +- .../cache/imap/{sync => download}/mod.rs | 10 +- .../cache/imap/{sync => download}/rebuild.rs | 2 +- src/modules/cache/imap/mod.rs | 2 +- src/modules/cache/imap/task.rs | 2 +- src/modules/imap/executor.rs | 4 +- src/modules/imap/manager.rs | 10 +- web/src/api/account/api.ts | 19 ++-- .../accounts/components/account-detail.tsx | 46 ++++----- .../accounts/components/action-dialog.tsx | 42 +++++---- .../features/accounts/components/columns.tsx | 14 ++- .../accounts/components/download-folders.tsx | 6 +- .../accounts/components/nosync-dialog.tsx | 18 ++-- .../features/accounts/components/step1.tsx | 18 +++- .../features/accounts/components/step2.tsx | 18 ++-- .../features/accounts/components/step3.tsx | 24 ++--- .../features/accounts/components/step4.tsx | 37 +++++--- web/src/features/accounts/index.tsx | 2 +- web/src/locales/ar.json | 36 +++---- web/src/locales/da.json | 36 +++---- web/src/locales/de.json | 34 +++---- web/src/locales/en.json | 34 +++---- web/src/locales/es.json | 34 +++---- web/src/locales/fi.json | 34 +++---- web/src/locales/fr.json | 34 +++---- web/src/locales/it.json | 34 +++---- web/src/locales/jp.json | 36 +++---- web/src/locales/ko.json | 34 +++---- web/src/locales/nl.json | 36 +++---- web/src/locales/no.json | 34 +++---- web/src/locales/pl.json | 38 ++++---- web/src/locales/pt.json | 34 +++---- web/src/locales/ru.json | 36 +++---- web/src/locales/sv.json | 36 +++---- web/src/locales/zh-tw.json | 40 ++++---- web/src/locales/zh.json | 44 ++++----- 41 files changed, 595 insertions(+), 506 deletions(-) rename src/modules/cache/imap/{sync/sync_folders.rs => download/download_folders.rs} (94%) rename src/modules/cache/imap/{sync/sync_type.rs => download/download_type.rs} (97%) rename src/modules/cache/imap/{sync => download}/flow.rs (98%) rename src/modules/cache/imap/{sync => download}/mod.rs (95%) rename src/modules/cache/imap/{sync => download}/rebuild.rs (98%) diff --git a/src/modules/account/migration.rs b/src/modules/account/migration.rs index b9e8ba7..279a8b6 100644 --- a/src/modules/account/migration.rs +++ b/src/modules/account/migration.rs @@ -29,8 +29,8 @@ use crate::{ modules::{ account::{ entity::ImapConfig, - state::DownloadState, since::{DateSince, RelativeDate}, + state::DownloadState, }, cache::imap::mailbox::MailBox, database::{list_all_impl, secondary_find_impl, with_transaction}, @@ -67,6 +67,15 @@ pub enum AccountType { NoSync, } +#[derive(Clone, Debug, Default, Eq, PartialEq, Deserialize, Serialize, Enum)] +pub enum QuotaWindow { + Hourly, + #[default] + Daily, + Weekly, + Monthly, +} + #[derive(Clone, Debug, Default, Eq, PartialEq, Deserialize, Serialize, Object)] #[native_model(id = 4, version = 1)] #[native_db(primary_key(pk -> String))] @@ -170,15 +179,16 @@ pub struct AccountV4 { pub enabled: bool, #[oai(validator(custom = "crate::modules::common::validator::EmailValidator"))] pub email: String, - pub name: Option, + pub account_name: Option, + pub login_name: Option, pub capabilities: Option>, pub date_since: Option, pub date_before: Option, pub folder_limit: Option, - pub sync_folders: Option>, + pub download_folders: Option>, pub account_type: AccountType, - pub sync_interval_min: Option, - pub sync_batch_size: Option, + pub download_interval_min: Option, + pub download_batch_size: Option, pub known_folders: Option>, pub created_at: i64, pub updated_at: i64, @@ -186,8 +196,9 @@ pub struct AccountV4 { pub use_proxy: Option, pub use_dangerous: bool, pub pgp_key: Option, - pub imap_daily_quota_bytes: Option, - pub auto_sync_new_mailboxes: Option, + pub imap_quota_bytes: Option, + pub imap_quota_window: Option, + pub auto_download_new_mailboxes: Option, } impl AccountV4 { @@ -199,15 +210,16 @@ impl AccountV4 { Ok(Self { id: id!(64), email: request.email, - name: request.name, + login_name: request.login_name, + account_name: request.account_name, imap: request.imap.map(|i| i.try_encrypt_password()).transpose()?, enabled: request.enabled, capabilities: None, date_since: request.date_since, - sync_folders: None, + download_folders: None, known_folders: None, account_type: request.account_type, - sync_interval_min: request.sync_interval_min, + download_interval_min: request.download_interval_min, created_at: utc_now!(), updated_at: utc_now!(), use_proxy: request.use_proxy, @@ -215,10 +227,11 @@ impl AccountV4 { use_dangerous: request.use_dangerous, pgp_key: request.pgp_key, created_by: user_id, - sync_batch_size: request.sync_batch_size, + download_batch_size: request.download_batch_size, date_before: request.date_before, - imap_daily_quota_bytes: request.imap_daily_quota_bytes, - auto_sync_new_mailboxes: request.auto_sync_new_mailboxes, + auto_download_new_mailboxes: request.auto_download_new_mailboxes, + imap_quota_bytes: request.imap_quota_bytes, + imap_quota_window: request.imap_quota_window, }) } @@ -374,7 +387,7 @@ impl AccountV4 { .ok_or_else(|| raise_error!(format!("When trying to update account download folders, the corresponding record was not found. account_id={}", account_id), ErrorCode::ResourceNotFound)) }, |current|{ let mut updated = current.clone(); - updated.sync_folders = Some(download_folders); + updated.download_folders = Some(download_folders); Ok(updated) }).await?; Ok(()) @@ -490,14 +503,6 @@ impl AccountV4 { } } - if let Some(name) = &request.name { - if name.trim().is_empty() { - new.name = None; - } else { - new.name = Some(name.clone()); - } - } - if matches!(old.account_type, AccountType::IMAP) { if let Some(imap) = &request.imap { if let Some(current_imap) = &mut new.imap { @@ -514,14 +519,14 @@ impl AccountV4 { } if let Some(folder_names) = request.sync_folders { - new.sync_folders = Some(folder_names); + new.download_folders = Some(folder_names); } - if let Some(sync_interval_min) = &request.sync_interval_min { - new.sync_interval_min = Some(*sync_interval_min); + if let Some(sync_interval_min) = &request.download_interval_min { + new.download_interval_min = Some(*sync_interval_min); } - if let Some(sync_batch_size) = &request.sync_batch_size { - new.sync_batch_size = Some(*sync_batch_size); + if let Some(download_batch_size) = &request.download_batch_size { + new.download_batch_size = Some(*download_batch_size); } if let Some(use_proxy) = request.use_proxy { @@ -547,12 +552,16 @@ impl AccountV4 { new.pgp_key = Some(pgp_key); } - if let Some(imap_daily_quota_bytes) = request.imap_daily_quota_bytes { - new.imap_daily_quota_bytes = Some(imap_daily_quota_bytes); + if let Some(imap_quota_bytes) = request.imap_quota_bytes { + new.imap_quota_bytes = Some(imap_quota_bytes); } - if let Some(auto_sync_new_mailboxes) = request.auto_sync_new_mailboxes { - new.auto_sync_new_mailboxes = Some(auto_sync_new_mailboxes); + if let Some(imap_quota_window) = request.imap_quota_window { + new.imap_quota_window = Some(imap_quota_window); + } + + if let Some(auto_download_new_mailboxes) = request.auto_download_new_mailboxes { + new.auto_download_new_mailboxes = Some(auto_download_new_mailboxes); } new.updated_at = utc_now!(); Ok(new) @@ -663,15 +672,15 @@ impl From for AccountV3 { imap: value.imap, enabled: value.enabled, email: value.email, - name: value.name, + name: value.login_name, capabilities: value.capabilities, date_since: value.date_since, date_before: value.date_before, folder_limit: value.folder_limit, - sync_folders: value.sync_folders, + sync_folders: value.download_folders, account_type: value.account_type, - sync_interval_min: value.sync_interval_min, - sync_batch_size: value.sync_batch_size, + sync_interval_min: value.download_interval_min, + sync_batch_size: value.download_batch_size, known_folders: value.known_folders, created_at: value.created_at, updated_at: value.updated_at, @@ -690,15 +699,16 @@ impl From for AccountV4 { imap: value.imap, enabled: value.enabled, email: value.email, - name: value.name, + account_name: None, + login_name: value.name, capabilities: value.capabilities, date_since: value.date_since, date_before: value.date_before, folder_limit: value.folder_limit, - sync_folders: value.sync_folders, + download_folders: value.sync_folders, account_type: value.account_type, - sync_interval_min: value.sync_interval_min, - sync_batch_size: value.sync_batch_size, + download_interval_min: value.sync_interval_min, + download_batch_size: value.sync_batch_size, known_folders: value.known_folders, created_at: value.created_at, updated_at: value.updated_at, @@ -706,8 +716,9 @@ impl From for AccountV4 { use_proxy: value.use_proxy, use_dangerous: value.use_dangerous, pgp_key: value.pgp_key, - imap_daily_quota_bytes: None, - auto_sync_new_mailboxes: None, + imap_quota_window: None, + imap_quota_bytes: None, + auto_download_new_mailboxes: None, } } } diff --git a/src/modules/account/payload.rs b/src/modules/account/payload.rs index c17d713..b4ad25c 100644 --- a/src/modules/account/payload.rs +++ b/src/modules/account/payload.rs @@ -17,7 +17,7 @@ // along with this program. If not, see . use crate::modules::account::entity::ImapConfig; -use crate::modules::account::migration::{AccountModel, AccountType}; +use crate::modules::account::migration::{AccountModel, AccountType, QuotaWindow}; use crate::modules::account::since::{DateSince, RelativeDate}; use crate::modules::error::code::ErrorCode; use crate::modules::error::BichonResult; @@ -29,7 +29,8 @@ use serde::{Deserialize, Serialize}; pub struct AccountCreateRequest { #[oai(validator(custom = "crate::modules::common::validator::EmailValidator"))] pub email: String, - pub name: Option, + pub login_name: Option, + pub account_name: Option, pub imap: Option, pub enabled: bool, pub date_since: Option, @@ -38,14 +39,15 @@ pub struct AccountCreateRequest { #[oai(validator(minimum(value = "100")))] pub folder_limit: Option, #[oai(validator(minimum(value = "10")))] - pub sync_interval_min: Option, + pub download_interval_min: Option, #[oai(validator(minimum(value = "10"), maximum(value = "200")))] - pub sync_batch_size: Option, + pub download_batch_size: Option, pub use_proxy: Option, pub use_dangerous: bool, pub pgp_key: Option, - pub imap_daily_quota_bytes: Option, - pub auto_sync_new_mailboxes: Option, + pub imap_quota_bytes: Option, + pub imap_quota_window: Option, + pub auto_download_new_mailboxes: Option, } impl AccountCreateRequest { @@ -58,6 +60,13 @@ impl AccountCreateRequest { )); } + if self.imap_quota_bytes.is_some() ^ self.imap_quota_window.is_some() { + return Err(raise_error!( + "Quota bytes and quota window must be provided together or omitted together".into(), + ErrorCode::InvalidParameter + )); + } + if let Some(date_since) = self.date_since.as_ref() { date_since.validate()?; } @@ -77,7 +86,7 @@ impl AccountCreateRequest { )) } } - if self.sync_interval_min.is_none() { + if self.download_interval_min.is_none() { return Err(raise_error!( "`sync_interval_min` is required for IMAP account type".into(), ErrorCode::InvalidParameter @@ -107,8 +116,7 @@ pub struct AccountUpdateRequest { /// and any attempts to access them should return an error indicating the account /// is inactive. pub enabled: Option, - /// Display name for the account (optional) - pub name: Option, + pub account_name: Option, /// IMAP server configuration pub imap: Option, /// Controls initial synchronization time range @@ -146,9 +154,9 @@ pub struct AccountUpdateRequest { pub sync_folders: Option>, /// Incremental sync interval (seconds) #[oai(validator(minimum(value = "10")))] - pub sync_interval_min: Option, + pub download_interval_min: Option, #[oai(validator(minimum(value = "10"), maximum(value = "200")))] - pub sync_batch_size: Option, + pub download_batch_size: Option, /// Optional proxy ID for establishing the connection to external APIs (e.g., Gmail, Outlook). /// - If `None` or not provided, the client will connect directly to the API server. /// - If `Some(proxy_id)`, the client will use the pre-configured proxy with the given ID for API requests. @@ -157,8 +165,9 @@ pub struct AccountUpdateRequest { pub use_dangerous: Option, pub pgp_key: Option, - pub imap_daily_quota_bytes: Option, - pub auto_sync_new_mailboxes: Option, + pub imap_quota_bytes: Option, + pub imap_quota_window: Option, + pub auto_download_new_mailboxes: Option, } impl AccountUpdateRequest { @@ -171,6 +180,13 @@ impl AccountUpdateRequest { )); } + if self.imap_quota_bytes.is_some() ^ self.imap_quota_window.is_some() { + return Err(raise_error!( + "Quota bytes and quota window must be provided together or omitted together".into(), + ErrorCode::InvalidParameter + )); + } + if self.clear_folder_limit == Some(true) && self.folder_limit.is_some() { return Err(raise_error!( "clear_folder_limit cannot be combined with folder_limit".into(), diff --git a/src/modules/account/view.rs b/src/modules/account/view.rs index 443a647..6cbae1c 100644 --- a/src/modules/account/view.rs +++ b/src/modules/account/view.rs @@ -24,7 +24,7 @@ use serde::{Deserialize, Serialize}; use crate::modules::{ account::{ entity::ImapConfig, - migration::{AccountModel, AccountType}, + migration::{AccountModel, AccountType, QuotaWindow}, since::{DateSince, RelativeDate}, }, users::UserModel, @@ -36,15 +36,16 @@ pub struct AccountResp { pub imap: Option, pub enabled: bool, pub email: String, - pub name: Option, + pub account_name: Option, + pub login_name: Option, pub capabilities: Option>, pub date_since: Option, pub date_before: Option, pub folder_limit: Option, - pub sync_folders: Option>, + pub download_folders: Option>, pub account_type: AccountType, - pub sync_interval_min: Option, - pub sync_batch_size: Option, + pub download_interval_min: Option, + pub download_batch_size: Option, pub known_folders: Option>, pub created_at: i64, pub updated_at: i64, @@ -54,7 +55,9 @@ pub struct AccountResp { pub use_proxy: Option, pub use_dangerous: bool, pub pgp_key: Option, - pub imap_daily_quota_bytes: Option, + pub imap_quota_bytes: Option, + pub imap_quota_window: Option, + pub auto_download_new_mailboxes: Option, } impl AccountResp { @@ -65,15 +68,16 @@ impl AccountResp { imap: account.imap, enabled: account.enabled, email: account.email, - name: account.name, + account_name: account.account_name, + login_name: account.login_name, capabilities: account.capabilities, date_since: account.date_since, date_before: account.date_before, folder_limit: account.folder_limit, - sync_folders: account.sync_folders, + download_folders: account.download_folders, account_type: account.account_type, - sync_interval_min: account.sync_interval_min, - sync_batch_size: account.sync_batch_size, + download_interval_min: account.download_interval_min, + download_batch_size: account.download_batch_size, known_folders: account.known_folders, created_at: account.created_at, updated_at: account.updated_at, @@ -87,7 +91,9 @@ impl AccountResp { use_proxy: account.use_proxy, use_dangerous: account.use_dangerous, pgp_key: account.pgp_key, - imap_daily_quota_bytes: account.imap_daily_quota_bytes, + imap_quota_bytes: account.imap_quota_bytes, + imap_quota_window: account.imap_quota_window, + auto_download_new_mailboxes: account.auto_download_new_mailboxes, } } } diff --git a/src/modules/cache/imap/sync/sync_folders.rs b/src/modules/cache/imap/download/download_folders.rs similarity index 94% rename from src/modules/cache/imap/sync/sync_folders.rs rename to src/modules/cache/imap/download/download_folders.rs index b8b34da..b41f7f4 100644 --- a/src/modules/cache/imap/sync/sync_folders.rs +++ b/src/modules/cache/imap/download/download_folders.rs @@ -63,7 +63,7 @@ pub async fn get_download_folders( ) .await?; let account = AccountModel::async_get(account.id).await?; - let subscribed = &account.sync_folders.unwrap_or_default(); + let subscribed = &account.download_folders.unwrap_or_default(); let is_noselect = |mailbox: &MailBox| { mailbox .attributes @@ -140,19 +140,19 @@ pub async fn detect_mailbox_changes( let deleted_folders: Vec = known_folders.difference(&all_names).cloned().collect(); let has_changes = !new_folders.is_empty() || !deleted_folders.is_empty(); - let sync_folders = account.sync_folders.as_deref().unwrap_or_default(); + let download_folders = account.download_folders.as_deref().unwrap_or_default(); // Handle deleted folders in sync_folders if !deleted_folders.is_empty() { // Check if any deleted folders are in sync_folders - let remaining_sync_folders: Vec = sync_folders + let remaining_sync_folders: Vec = download_folders .iter() .filter(|folder| !deleted_folders.contains(folder)) .cloned() .collect(); // If sync_folders changed, update them - if remaining_sync_folders.len() != sync_folders.len() { - let removed_count = sync_folders.len() - remaining_sync_folders.len(); + if remaining_sync_folders.len() != download_folders.len() { + let removed_count = download_folders.len() - remaining_sync_folders.len(); info!( "Account {}: Removed {} deleted folders from sync_folders", account.id, removed_count diff --git a/src/modules/cache/imap/sync/sync_type.rs b/src/modules/cache/imap/download/download_type.rs similarity index 97% rename from src/modules/cache/imap/sync/sync_type.rs rename to src/modules/cache/imap/download/download_type.rs index de60438..83200c2 100644 --- a/src/modules/cache/imap/sync/sync_type.rs +++ b/src/modules/cache/imap/download/download_type.rs @@ -40,7 +40,7 @@ pub async fn decide_next_download_task(account: &AccountModel) -> BichonResult = LazyLock::new(|| { diff --git a/src/modules/cache/imap/task.rs b/src/modules/cache/imap/task.rs index e483ac5..6b79912 100644 --- a/src/modules/cache/imap/task.rs +++ b/src/modules/cache/imap/task.rs @@ -18,7 +18,7 @@ use crate::modules::account::entity::AuthType; use crate::modules::account::state::DownloadState; -use crate::modules::cache::imap::sync::process_imap_download; +use crate::modules::cache::imap::download::process_imap_download; use crate::modules::common::periodic::{PeriodicTask, TaskHandle}; use crate::modules::oauth2::token::OAuth2AccessToken; use crate::modules::{account::migration::AccountModel, error::BichonResult}; diff --git a/src/modules/imap/executor.rs b/src/modules/imap/executor.rs index aca6121..c7dcf11 100644 --- a/src/modules/imap/executor.rs +++ b/src/modules/imap/executor.rs @@ -19,7 +19,7 @@ use crate::modules::account::migration::AccountModel; use crate::modules::account::state::{DownloadState, FolderStatus}; use crate::modules::cache::imap::mailbox::MailBox; -use crate::modules::cache::imap::sync::flow::{generate_uid_sequence_hashset, DEFAULT_BATCH_SIZE}; +use crate::modules::cache::imap::download::flow::{generate_uid_sequence_hashset, DEFAULT_BATCH_SIZE}; use crate::modules::envelope::extractor::extract_envelope_and_store_it; use crate::modules::error::code::ErrorCode; use crate::modules::imap::session::SessionStream; @@ -139,7 +139,7 @@ impl ImapExecutor { uid_vec.sort(); let uid_batches = generate_uid_sequence_hashset( uid_vec, - account.sync_batch_size.unwrap_or(DEFAULT_BATCH_SIZE) as usize, + account.download_batch_size.unwrap_or(DEFAULT_BATCH_SIZE) as usize, false, ); let mut current_processed = 0u64; diff --git a/src/modules/imap/manager.rs b/src/modules/imap/manager.rs index d87a01c..d45b929 100644 --- a/src/modules/imap/manager.rs +++ b/src/modules/imap/manager.rs @@ -53,7 +53,7 @@ impl ImapConnectionManager { ) -> BichonResult>> { assert_eq!(account.account_type, AccountType::IMAP); let imap = account.imap.as_ref().unwrap(); - let username = account.name.clone().unwrap_or(account.email.clone()); + let login_name = account.login_name.clone().unwrap_or(account.email.clone()); match &imap.auth.auth_type { AuthType::Password => { let password = &imap.auth.password.clone().ok_or_else(|| { @@ -64,10 +64,10 @@ impl ImapConnectionManager { })?; let password = decrypt!(&password)?; - client.login(&username, &password).await.map_err(|e| { + client.login(&login_name, &password).await.map_err(|e| { error!( "IMAP password auth failed for username '{}': {}", - username, e + login_name, e ); e }) @@ -82,10 +82,10 @@ impl ImapConnectionManager { ) })?; client - .authenticate(OAuth2::new(username.clone(), access_token)) + .authenticate(OAuth2::new(login_name.clone(), access_token)) .await .map_err(|e| { - error!("IMAP OAuth2 auth failed for username '{}': {}", username, e); + error!("IMAP OAuth2 auth failed for username '{}': {}", login_name, e); e }) } diff --git a/web/src/api/account/api.ts b/web/src/api/account/api.ts index be3d778..d8dbb63 100644 --- a/web/src/api/account/api.ts +++ b/web/src/api/account/api.ts @@ -116,27 +116,34 @@ interface DateSelection { relative?: RelativeDate; } + +export type QuotaWindow = 'hourly' | 'daily' | 'weekly' | 'monthly' export interface AccountModel { id: number; account_type: AccountType; imap?: ImapConfig; enabled: boolean; - name?: string, + login_name?: string, + account_name?: string, email: string; capabilities?: string[]; date_since?: DateSelection; date_before?: RelativeDate; folder_limit?: number, - sync_folders: string[]; - sync_interval_min?: number; - sync_batch_size?: number; + download_folders: string[]; + download_interval_min?: number; + download_batch_size?: number; created_by: number; created_user_name: string; created_user_email: string; created_at: number; updated_at: number; - use_proxy?: number - use_dangerous: boolean + use_proxy?: number; + use_dangerous: boolean; + pgp_key?: string; + imap_quota_window?: QuotaWindow; + imap_quota_bytes?: number; + auto_download_new_mailboxes?: boolean; } export const account_state = async (account_id: number) => { diff --git a/web/src/features/accounts/components/account-detail.tsx b/web/src/features/accounts/components/account-detail.tsx index 95ff984..11e54a5 100644 --- a/web/src/features/accounts/components/account-detail.tsx +++ b/web/src/features/accounts/components/account-detail.tsx @@ -22,9 +22,10 @@ import { Badge } from '@/components/ui/badge' import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card' import { Checkbox } from '@/components/ui/checkbox' import { Dialog, DialogContent, DialogDescription, DialogHeader, DialogTitle } from '@/components/ui/dialog' -import { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs' +import { Tabs, TabsContent } from '@/components/ui/tabs' import { useTranslation } from 'react-i18next' import { AccountModel } from '@/api/account/api' +import useProxyList from '@/hooks/use-proxy' interface Props { open: boolean @@ -34,9 +35,7 @@ interface Props { export function AccountDetailDrawer({ open, onOpenChange, currentRow }: Props) { const { t } = useTranslation() - - - + const { getUrlById } = useProxyList(); const sinceText = (() => { if (currentRow.date_since?.fixed) { @@ -56,8 +55,6 @@ export function AccountDetailDrawer({ open, onOpenChange, currentRow }: Props) { const hasSince = !!currentRow.date_since; const hasBefore = !!currentRow.date_before?.value; - - return ( - - {t('accounts.accountDetails')} - -
- {/* Account Details Card */}
@@ -91,19 +83,19 @@ export function AccountDetailDrawer({ open, onOpenChange, currentRow }: Props) {
{t('accounts.name')}: - {currentRow.name ?? t('accounts.notAvailable')} + {currentRow.login_name ?? t('accounts.notAvailable')}
{t('accounts.enabled')}:
- {t('accounts.incrementalSyncInterval')}: - {t('accounts.everyMinutes', { minutes: currentRow.sync_interval_min })} + {t('accounts.downloadInterval')}: + {t('accounts.everyMinutes', { minutes: currentRow.download_interval_min })}
- {t('accounts.syncBatchSize')}: - {currentRow.sync_batch_size} + {t('accounts.downloadBatchSize')}: + {currentRow.download_batch_size}
{t('accounts.capabilities')}: @@ -112,7 +104,7 @@ export function AccountDetailDrawer({ open, onOpenChange, currentRow }: Props) {
- {t('accounts.syncScope')}: + {t('accounts.downloadScope')}: {hasSince && (
@@ -135,8 +127,8 @@ export function AccountDetailDrawer({ open, onOpenChange, currentRow }: Props) {
)} {!hasSince && !hasBefore && ( - - {t('accounts.syncAll')} + + {t('accounts.downloadAll')} )}
@@ -183,7 +175,15 @@ export function AccountDetailDrawer({ open, onOpenChange, currentRow }: Props) {
{t('accounts.useProxyField')}: - {currentRow.imap?.use_proxy ? "true" : "false"} + + {(() => { + if (!currentRow.imap?.use_proxy) { + return t('accounts.useNoProxy'); + } + const proxyUrl = getUrlById(currentRow.imap?.use_proxy); + return proxyUrl || `${t('common.yes')} (${currentRow.imap?.use_proxy})`; + })()} +
@@ -193,14 +193,14 @@ export function AccountDetailDrawer({ open, onOpenChange, currentRow }: Props) { {t('accounts.selectedMailboxes')} - {currentRow.sync_folders?.length ? ( + {currentRow.download_folders?.length ? (
- {t('accounts.foldersConfiguredForSync', { count: currentRow.sync_folders.length })} + {t('accounts.foldersConfiguredForSync', { count: currentRow.download_folders.length })}
- {currentRow.sync_folders.map((folder, index) => ( + {currentRow.download_folders.map((folder, index) => (
string) => z.union([ ]); export type Account = { - name?: string; + login_name?: string; + account_name?: string; email: string; imap: { host: string; @@ -111,13 +112,14 @@ export type Account = { value?: number; }; folder_limit?: number; - sync_interval_min: number; - sync_batch_size: number; + download_interval_min: number; + download_batch_size: number; }; const getAccountSchema = (isEdit: boolean, t: (key: string) => string) => z.object({ - name: z.string().optional(), + account_name: z.string().optional(), + login_name: z.string().optional(), email: z.string({ required_error: t('validation.emailRequired') }).email({ message: t('validation.invalidEmail') }), imap: getImapConfigSchema(isEdit, t), enabled: z.boolean(), @@ -130,8 +132,8 @@ const getAccountSchema = (isEdit: boolean, t: (key: string) => string) => .min(100, { message: t('validation.folderLimitMustBeAtLeast100') }) .nullable() .optional(), - sync_interval_min: z.number({ invalid_type_error: t('validation.incrementalSyncMustBeNumber') }).int().min(10, { message: t('validation.incrementalSyncMustBeAtLeast10') }), - sync_batch_size: z + download_interval_min: z.number({ invalid_type_error: t('validation.incrementalSyncMustBeNumber') }).int().min(10, { message: t('validation.incrementalSyncMustBeAtLeast10') }), + download_batch_size: z .number({ invalid_type_error: t('validation.singleRequestBatchSizeMustBeNumber') }) .int() .min(10, { message: t('validation.singleRequestBatchSizeTooSmall') }) @@ -147,9 +149,9 @@ type Step = { export type Steps = [...Step[]]; const getSteps = (t: (key: string) => string): Steps => [ - { id: "step-1", name: t('accounts.steps.emailAddress'), fields: ["email"] }, - { id: "step-2", name: t('accounts.steps.imap'), fields: ["imap", "use_dangerous", "name"] }, - { id: "step-3", name: t('accounts.steps.syncPreferences'), fields: ["enabled", "date_since", "date_before", "folder_limit", "sync_interval_min", "sync_batch_size"] }, + { id: "step-1", name: t('accounts.steps.emailAddress'), fields: ["email", "account_name"] }, + { id: "step-2", name: t('accounts.steps.imap'), fields: ["imap", "use_dangerous", "login_name"] }, + { id: "step-3", name: t('accounts.steps.syncPreferences'), fields: ["enabled", "date_since", "date_before", "folder_limit", "download_interval_min", "download_batch_size"] }, { id: "step-4", name: t('accounts.steps.summary'), fields: [] }, ]; @@ -162,7 +164,8 @@ interface Props { } const defaultValues: Account = { - name: undefined, + login_name: undefined, + account_name: undefined, email: '', imap: { host: "", @@ -179,8 +182,8 @@ const defaultValues: Account = { date_since: undefined, date_before: undefined, folder_limit: undefined, - sync_interval_min: 10, - sync_batch_size: 30, + download_interval_min: 10, + download_batch_size: 30, }; const emptyImap: ImapConfig = { @@ -199,7 +202,7 @@ const mapCurrentRowToFormValues = (currentRow: AccountModel): Account => { } return { - name: currentRow.name ?? undefined, + login_name: currentRow.login_name ?? undefined, email: currentRow.email, imap, enabled: currentRow.enabled, @@ -207,8 +210,8 @@ const mapCurrentRowToFormValues = (currentRow: AccountModel): Account => { date_since: currentRow.date_since ?? undefined, date_before: currentRow.date_before ?? undefined, folder_limit: currentRow.folder_limit ?? undefined, - sync_interval_min: currentRow.sync_interval_min ?? 10, - sync_batch_size: currentRow.sync_batch_size ?? 50, + download_interval_min: currentRow.download_interval_min ?? 10, + download_batch_size: currentRow.download_batch_size ?? 30, }; }; @@ -272,7 +275,8 @@ export function AccountActionDialog({ currentRow, open, onOpenChange }: Props) { (data: Account) => { const commonData = { email: data.email, - name: data.name, + account_name: data.account_name, + login_name: data.login_name, imap: { ...data.imap, auth: { @@ -287,8 +291,8 @@ export function AccountActionDialog({ currentRow, open, onOpenChange }: Props) { date_since: data.date_since, date_before: data.date_before, folder_limit: data.folder_limit, - sync_interval_min: data.sync_interval_min, - sync_batch_size: data.sync_batch_size, + download_interval_min: data.download_interval_min, + download_batch_size: data.download_batch_size, }; if (isEdit) { const isAllMode = !data.date_since && !data.date_before; @@ -328,7 +332,7 @@ export function AccountActionDialog({ currentRow, open, onOpenChange }: Props) { } setAutoConfigLoading(true); const email = form.getValues('email'); - + form.setValue('login_name', email); try { const result = await autoconfig(email); if (result) { diff --git a/web/src/features/accounts/components/columns.tsx b/web/src/features/accounts/components/columns.tsx index b960916..7d8664d 100644 --- a/web/src/features/accounts/components/columns.tsx +++ b/web/src/features/accounts/components/columns.tsx @@ -42,7 +42,17 @@ export function useColumns(): ColumnDef[] { }, enableSorting: false, enableHiding: false, - meta: { className: 'max-w-[120px]' }, + meta: { className: 'max-w-[100px]' }, + }, + { + accessorKey: "account_name", + header: ({ column }) => ( + + ), + cell: ({ row }) => { + return {row.original.account_name ?? "n/a"} + }, + meta: { className: 'max-w-[100px]' }, }, { accessorKey: "email", @@ -96,7 +106,7 @@ export function useColumns(): ColumnDef[] { if (account_type === "NoSync") { return n/a } - return {row.original.sync_interval_min} min + return {row.original.download_interval_min} min }, meta: { className: 'text-center max-w-[120px]' }, enableHiding: false, diff --git a/web/src/features/accounts/components/download-folders.tsx b/web/src/features/accounts/components/download-folders.tsx index 12c93f5..67879c4 100644 --- a/web/src/features/accounts/components/download-folders.tsx +++ b/web/src/features/accounts/components/download-folders.tsx @@ -182,10 +182,10 @@ export function DownloadFoldersDialog({ currentRow, open, onOpenChange }: Props) const itemsWithChildren = getParentIds(tree); setItemsWithChildren(itemsWithChildren); setExpandedItems(itemsWithChildren); - const sync_folders = data - .filter(mailbox => currentRow.sync_folders.includes(mailbox.name)) + const download_folders = data + .filter(mailbox => currentRow.download_folders.includes(mailbox.name)) .map(mailbox => mailbox.id.toString()); - setSelectedItems(sync_folders); + setSelectedItems(download_folders); setError(undefined); } } catch (err: any) { diff --git a/web/src/features/accounts/components/nosync-dialog.tsx b/web/src/features/accounts/components/nosync-dialog.tsx index d0d7022..ebe6d5c 100644 --- a/web/src/features/accounts/components/nosync-dialog.tsx +++ b/web/src/features/accounts/components/nosync-dialog.tsx @@ -38,14 +38,14 @@ import { useTranslation } from 'react-i18next'; const accountSchema = (t: (key: string) => string) => z.object({ - name: z.string().optional(), + account_name: z.string().optional(), email: z.string({ required_error: t('validation.emailRequired') }).email({ message: t('validation.invalidEmail') }), enabled: z.boolean() }); export type NoSyncAccount = { - name?: string; + account_name?: string; email: string; enabled: boolean; }; @@ -60,7 +60,7 @@ interface Props { const defaultValues: NoSyncAccount = { - name: '', + account_name: '', email: '', enabled: true }; @@ -68,7 +68,7 @@ const defaultValues: NoSyncAccount = { const mapCurrentRowToFormValues = (currentRow: AccountModel): NoSyncAccount => { let account = { - name: currentRow.name === null ? '' : currentRow.name, + account_name: currentRow.account_name === null ? '' : currentRow.account_name, email: currentRow.email, enabled: currentRow.enabled }; @@ -132,7 +132,7 @@ export function NoSyncAccountDialog({ currentRow, open, onOpenChange }: Props) { (data: NoSyncAccount) => { const commonData = { email: data.email, - name: data.name, + account_name: data.account_name, enabled: data.enabled, use_dangerous: false }; @@ -164,7 +164,7 @@ export function NoSyncAccountDialog({ currentRow, open, onOpenChange }: Props) { {t('accounts.clickSaveWhenDone')} - +
)} /> - {/* ( @@ -204,7 +204,7 @@ export function NoSyncAccountDialog({ currentRow, open, onOpenChange }: Props) { )} - /> */} + /> - + {isEdit && ( @@ -66,6 +66,22 @@ export default function Step1({ isEdit }: StepProps) { )} /> + ( + + + {t('accounts.name')}: + + + + + {t('accounts.optional')} + + + )} + />
); diff --git a/web/src/features/accounts/components/step2.tsx b/web/src/features/accounts/components/step2.tsx index 2af3003..edc9242 100644 --- a/web/src/features/accounts/components/step2.tsx +++ b/web/src/features/accounts/components/step2.tsx @@ -48,6 +48,7 @@ export default function Step2({ isEdit }: StepProps) { const { t } = useTranslation() const { control } = useFormContext(); const { proxyOptions } = useProxyList(); + const imapAuthMethod = useWatch({ control, name: "imap.auth.auth_type", @@ -130,14 +131,14 @@ export default function Step2({ isEdit }: StepProps) { /> ( - {t('accounts.name')}: + {t('accounts.login_name')}: - + {t('accounts.nameDescription')} @@ -198,7 +199,9 @@ export default function Step2({ isEdit }: StepProps) { {t('accounts.useProxy')} ({t('accounts.optional')}): diff --git a/web/src/features/accounts/components/step3.tsx b/web/src/features/accounts/components/step3.tsx index b89af10..7810a62 100644 --- a/web/src/features/accounts/components/step3.tsx +++ b/web/src/features/accounts/components/step3.tsx @@ -82,32 +82,32 @@ export default function Step3() {
( - {t('accounts.incrementalSync')} + {t('accounts.downloadInterval')} field.onChange(parseInt(e.target.value, 10))} /> - {t('accounts.incrementalSyncDescription')} + {t('accounts.downloadIntervalPlaceholder')} )} /> ( - {t('accounts.syncBatchSize')} + {t('accounts.downloadBatchSize')} field.onChange(parseInt(e.target.value, 10))} /> - {t('accounts.syncBatchSizeDescription')} + {t('accounts.downloadBatchSizeDescription')} )} @@ -133,19 +133,19 @@ export default function Step3() {
- {t('accounts.syncScope', 'Sync Strategy')} + {t('accounts.downloadScope')} - {t('accounts.syncScopeDescription', 'Choose which emails should be indexed and archived.')} + {t('accounts.downloadScopeDescription')} diff --git a/web/src/features/accounts/components/step4.tsx b/web/src/features/accounts/components/step4.tsx index e73a91e..5d7059c 100644 --- a/web/src/features/accounts/components/step4.tsx +++ b/web/src/features/accounts/components/step4.tsx @@ -21,10 +21,12 @@ import { useFormContext } from "react-hook-form"; import { Account } from "./action-dialog"; import { Accordion, AccordionItem, AccordionTrigger, AccordionContent } from "@/components/ui/accordion"; import { useTranslation } from "react-i18next"; +import useProxyList from "@/hooks/use-proxy"; export default function Step4() { const { t } = useTranslation(); const { getValues } = useFormContext(); + const { getUrlById } = useProxyList(); const summaryData = getValues(); @@ -48,15 +50,20 @@ export default function Step4() { return (
- + {t('accounts.email')}: {summaryData.email} - + {t('accounts.name')}: - {summaryData.name ?? t('accounts.notAvailable')} + {summaryData.account_name ?? t('accounts.notAvailable')} + + + + {t('accounts.login_name')}: + {summaryData.login_name ?? t('accounts.notAvailable')} @@ -93,7 +100,15 @@ export default function Step4() { )} {t('accounts.useProxyField')}: - {summaryData.imap.use_proxy ? t('common.yes') : t('common.no')} + + {(() => { + if (!summaryData.imap.use_proxy) { + return t('accounts.useNoProxy'); + } + const proxyUrl = getUrlById(summaryData.imap.use_proxy); + return proxyUrl || `${t('common.yes')} (${summaryData.imap.use_proxy})`; + })()} + @@ -103,7 +118,7 @@ export default function Step4() { - {t('accounts.syncScope')}: + {t('accounts.downloadScope')}: @@ -131,8 +146,8 @@ export default function Step4() { )} {!hasSince && !hasBefore && ( - - {t('accounts.syncAll')} + + {t('accounts.downloadAll')} )} @@ -145,13 +160,13 @@ export default function Step4() { - {t('accounts.incrementalSync')}: - {summaryData.sync_interval_min} {t('accounts.minutes')} + {t('accounts.downloadInterval')}: + {summaryData.download_interval_min} {t('accounts.minutes')} - {t('accounts.syncBatchSize')}: - {summaryData.sync_batch_size} + {t('accounts.downloadBatchSize')}: + {summaryData.download_batch_size}
diff --git a/web/src/features/accounts/index.tsx b/web/src/features/accounts/index.tsx index f5d9040..7a0609b 100644 --- a/web/src/features/accounts/index.tsx +++ b/web/src/features/accounts/index.tsx @@ -64,7 +64,7 @@ export default function Accounts() {
-
+

{t('accounts.title')}

diff --git a/web/src/locales/ar.json b/web/src/locales/ar.json index 4451a24..5b19c96 100644 --- a/web/src/locales/ar.json +++ b/web/src/locales/ar.json @@ -142,18 +142,17 @@ "systemVersion": "إصدار النظام" }, "accounts": { - "beforeRelativeValue": "مزامنة رسائل البريد الإلكتروني قبل {{value}} {{unit}} مضت", - "sinceRelativeValue": "مزامنة رسائل البريد الإلكتروني لآخر {{value}} {{unit}}", - "syncBatchSize": "حجم دفعة المزامنة", - "syncBatchSizeDescription": "عدد الرسائل التي يتم جلبها لكل طلب IMAP", - "incrementalSyncDescription": "عدد مرات إجراء مزامنة البريد الإلكتروني المتزايدة (بالدقائق)", - "syncScope": "استراتيجية المزامنة", - "syncScopeDescription": "اختر رسائل البريد الإلكتروني التي يجب فهرستها وأرشفتها.", - "selectMode": "حدد وضع التصفية", - "syncAll": "مزامنة جميع رسائل البريد الإلكتروني", + "beforeRelativeValue": "تنزيل رسائل البريد الإلكتروني قبل {{value}} {{unit}} مضت", + "sinceRelativeValue": "تنزيل رسائل البريد الإلكتروني من آخر", + "downloadBatchSize": "حجم دفعة التنزيل", + "downloadBatchSizeDescription": "عدد الرسائل التي يتم جلبها لكل طلب IMAP", + "downloadScopeDescription": "اختر رسائل البريد الإلكتروني التي يجب فهرستها وتنزيلها.", + "downloadScope": "استراتيجية التنزيل", + "selectMode": "اختر وضع التصفية", + "downloadAll": "تنزيل جميع رسائل البريد الإلكتروني", "sinceFixed": "منذ تاريخ محدد", - "sinceRelative": "مزامنة رسائل البريد الإلكتروني الحديثة فقط", - "beforeRelative": "أرشفة رسائل البريد الإلكتروني القديمة فقط", + "sinceRelative": "تنزيل رسائل البريد الإلكتروني الأخيرة فقط", + "beforeRelative": "تنزيل رسائل البريد الإلكتروني القديمة فقط", "duration": "المدة", "unit": "الوحدة", "accessControl": "التحكم في الوصول", @@ -190,7 +189,9 @@ "noAccountConfigurations": "لا توجد تكوينات للحساب", "noAccountConfigurationsDesc": "لم تقم بإضافة أي تكوينات للحساب بعد. أضف واحدة لبدء استخدام ميزات الحساب.", "addConfiguration": "إضافة تكوين", - "name": "اسم الدخول", + "useNoProxy": "بدون وكيل", + "login_name": "اسم الدخول", + "name": "اسم الحساب", "email": "البريد الإلكتروني", "status": "الحالة", "type": "النوع", @@ -210,12 +211,12 @@ "updatedAt": "تاريخ التحديث", "openMenu": "فتح القائمة", "emailAccountRegistration": "تسجيل حساب البريد الإلكتروني", - "emailAccountRegistrationDesc": "يرجى تقديم عنوان بريدك الإلكتروني. في الخطوات التالية، ستقوم بتكوين تفاصيل IMAP/SMTP. باستخدام هذا العنوان، سنحاول استرداد عناوين خادم SMTP/IMAP تلقائيًا.", + "emailAccountRegistrationDesc": "يرجى إدخال عنوان بريدك الإلكتروني. في الخطوات التالية، ستقوم بإعداد تفاصيل IMAP. سنستخدم هذا العنوان لمحاولة اكتشاف إعدادات خادم IMAP تلقائيًا.", "emailAddress": "عنوان البريد الإلكتروني", "emailPlaceholder": "مثال: john.doe@example.com", "namePlaceholder": "مثال: john.doe", "optional": "اختياري", - "nameDescription": "اسم مستخدم اتصال IMAP. اترك هذا الحقل فارغًا إذا كنت تستخدم عنوان بريدك الإلكتروني الكامل كاسم مستخدم للاتصال.", + "nameDescription": "اسم مستخدم IMAP. افتراضياً بريدك الإلكتروني، أو أدخل اسماً مخصصاً.", "emailCannotBeModified": "لا يمكن تعديل عنوان حساب البريد الإلكتروني أثناء التحرير.", "addAccount": "إضافة حساب", "updateAccount": "تحديث الحساب", @@ -239,7 +240,6 @@ "accountDetails": "تفاصيل الحساب", "capabilities": "الإمكانيات", "folderLimit": "حد المجلد", - "incrementalSyncInterval": "فاصل المزامنة التزايدية", "everyMinutes": "كل {{minutes}} دقيقة", "foldersConfiguredForSync": "{{count}} مجلد(ات) تم تكوينها للمزامنة", "foldersSelected": "{{count}} مجلد(ات) محددة", @@ -259,9 +259,9 @@ "leaveEmptyToKeepExisting": "اترك فارغًا للاحتفاظ بكلمة المرور الحالية، أو أدخل كلمة مرور جديدة لتحديثها.", "useProxy": "استخدام وكيل", "selectProxy": "اختر وكيلًا", - "incrementalSync": "المزامنة التزايدية (بالدقائق)", - "incrementalSyncPlaceholder": "مثال: 300", - "enabledDescription": "يحدد ما إذا كان هذا الحساب نشطًا. إذا تم تعطيله، فلن يتم تشغيل المزامنات ذات الصلة.", + "downloadInterval": "دورة التنزيل (بالدقائق)", + "downloadIntervalPlaceholder": "أدخل الدقائق", + "enabledDescription": "يحدد ما إذا كان هذا الحساب نشطًا. في حالة التعطيل، لن يتم تشغيل عمليات التنزيل ذات الصلة.", "dateSince": "التاريخ منذ", "none": "لا شيء", "fixed": "ثابت", diff --git a/web/src/locales/da.json b/web/src/locales/da.json index ddf3fea..4eb5566 100644 --- a/web/src/locales/da.json +++ b/web/src/locales/da.json @@ -142,18 +142,17 @@ "systemVersion": "Systemversion" }, "accounts": { - "beforeRelativeValue": "Synkroniser e-mails fra før {{value}} {{unit}} siden", - "sinceRelativeValue": "Synkroniser e-mails fra de seneste {{value}} {{unit}}", - "syncBatchSize": "Synkroniseringsbatchstørrelse", - "syncBatchSizeDescription": "Antal beskeder hentet per IMAP-forespørgsel", - "incrementalSyncDescription": "Hvor ofte inkrementel e-mail-synkronisering udføres (i minutter)", - "syncScope": "Synkroniseringsstrategi", - "syncScopeDescription": "Vælg hvilke e-mails der skal indekseres og arkiveres.", + "beforeRelativeValue": "Download e-mails før {{value}} {{unit}} siden", + "sinceRelativeValue": "Download e-mails fra de sidste", + "downloadBatchSize": "Download batchstørrelse", + "downloadBatchSizeDescription": "Antal beskeder hentet pr. IMAP-anmodning", + "downloadScopeDescription": "Vælg hvilke e-mails der skal indekseres og downloades.", + "downloadScope": "Downloadstrategi", "selectMode": "Vælg filtertilstand", - "syncAll": "Synkroniser alle e-mails", - "sinceFixed": "Siden en bestemt dato", - "sinceRelative": "Synkroniser kun nylige e-mails", - "beforeRelative": "Arkiver kun gamle e-mails", + "downloadAll": "Download alle e-mails", + "sinceFixed": "Siden specifik dato", + "sinceRelative": "Download kun seneste e-mails", + "beforeRelative": "Download kun gamle e-mails", "duration": "Varighed", "unit": "Enhed", "accessControl": "Adgangskontrol", @@ -190,7 +189,9 @@ "noAccountConfigurations": "Ingen kontokonfigurationer", "noAccountConfigurationsDesc": "Du har ikke tilføjet nogen kontokonfigurationer endnu. Tilføj en for at begynde at bruge kontofunktioner.", "addConfiguration": "Tilføj konfiguration", - "name": "Logindnavn", + "useNoProxy": "Ingen proxy", + "login_name": "Logindnavn", + "name": "Kontonavn", "email": "E-mail", "status": "Status", "type": "Type", @@ -210,12 +211,12 @@ "updatedAt": "Opdateret", "openMenu": "Åbn menu", "emailAccountRegistration": "Registrering af E-mailkonto", - "emailAccountRegistrationDesc": "Angiv din e-mailadresse. I næste trin konfigurerer du IMAP/SMTP-oplysninger. Vi forsøger at hente SMTP/IMAP-serveradresserne automatisk ved hjælp af denne e-mailadresse.", + "emailAccountRegistrationDesc": "Indtast venligst din e-mailadresse. I de næste trin konfigurerer du IMAP-detaljer. Vi bruger denne adresse til automatisk at finde IMAP-serverindstillinger.", "emailAddress": "E-mailadresse", "emailPlaceholder": "f.eks. hans.hansen@eksempel.dk", "namePlaceholder": "f.eks. Hans Hansen", "optional": "Valgfri", - "nameDescription": "IMAP-forbindelsesbrugernavn. Lad dette felt være tomt, hvis du bruger din fulde e-mailadresse som forbindelsesbrugernavn.", + "nameDescription": "IMAP-brugernavn. Standard er din e-mail, ellers angiv et eget.", "emailCannotBeModified": "Kontoens e-mailadresse kan ikke ændres under redigering.", "addAccount": "Tilføj konto", "updateAccount": "Opdater konto", @@ -239,7 +240,6 @@ "accountDetails": "Kontodetaljer", "capabilities": "Funktioner", "folderLimit": "Mappegrænse", - "incrementalSyncInterval": "Inkrementelt synkroniseringsinterval", "everyMinutes": "hvert {{minutes}} minut", "foldersConfiguredForSync": "{{count}} mappe(r) konfigureret til synkronisering", "foldersSelected": "{{count}} mappe(r) valgt", @@ -259,9 +259,9 @@ "leaveEmptyToKeepExisting": "Lad stå tomt for at beholde den eksisterende adgangskode, eller indtast en ny for at opdatere den.", "useProxy": "Brug Proxy", "selectProxy": "Vælg en proxy", - "incrementalSync": "Inkrementel Synk. (minutter)", - "incrementalSyncPlaceholder": "f.eks. 300", - "enabledDescription": "Bestemmer, om denne konto er aktiv. Hvis deaktiveret, vil relaterede synkroniseringer ikke køre.", + "downloadInterval": "Downloadinterval (minutter)", + "downloadIntervalPlaceholder": "Indtast minutter", + "enabledDescription": "Afgør om denne konto er aktiv. Hvis den deaktiveres, vil relaterede downloads ikke blive kørt.", "dateSince": "Dato fra", "none": "Ingen", "fixed": "Fast", diff --git a/web/src/locales/de.json b/web/src/locales/de.json index 23d17db..591dbcb 100644 --- a/web/src/locales/de.json +++ b/web/src/locales/de.json @@ -142,18 +142,17 @@ "systemVersion": "Systemversion" }, "accounts": { - "beforeRelativeValue": "E-Mails synchronisieren, die älter als {{value}} {{unit}} sind", - "sinceRelativeValue": "E-Mails der letzten {{value}} {{unit}} synchronisieren", - "syncBatchSize": "Synchronisations-Batch-Größe", - "syncBatchSizeDescription": "Anzahl der pro IMAP-Anfrage abgerufenen Nachrichten", - "incrementalSyncDescription": "Häufigkeit der inkrementellen E-Mail-Synchronisierung (in Minuten)", - "syncScope": "Synchronisationsstrategie", - "syncScopeDescription": "Wählen Sie aus, welche E-Mails indiziert und archiviert werden sollen.", + "beforeRelativeValue": "E-Mails von vor {{value}} {{unit}} herunterladen", + "sinceRelativeValue": "E-Mails der letzten Zeit herunterladen", + "downloadBatchSize": "Download-Batch-Größe", + "downloadBatchSizeDescription": "Anzahl der pro IMAP-Anfrage abgerufenen Nachrichten", + "downloadScopeDescription": "Wählen Sie aus, welche E-Mails indiziert und heruntergeladen werden sollen.", + "downloadScope": "Download-Strategie", "selectMode": "Filtermodus auswählen", - "syncAll": "Alle E-Mails synchronisieren", + "downloadAll": "Alle E-Mails herunterladen", "sinceFixed": "Seit einem bestimmten Datum", - "sinceRelative": "Nur aktuelle E-Mails synchronisieren", - "beforeRelative": "Nur alte E-Mails archivieren", + "sinceRelative": "Nur aktuelle E-Mails herunterladen", + "beforeRelative": "Nur alte E-Mails herunterladen", "duration": "Dauer", "unit": "Einheit", "accessControl": "Zugriffskontrolle", @@ -190,7 +189,9 @@ "noAccountConfigurations": "Keine Kontokonfigurationen", "noAccountConfigurationsDesc": "Sie haben noch keine Kontokonfigurationen hinzugefügt. Fügen Sie eine hinzu, um mit der Nutzung der Kontofunktionen zu beginnen.", "addConfiguration": "Konfiguration hinzufügen", - "name": "Anmeldename", + "useNoProxy": "Kein Proxy", + "login_name": "Anmeldename", + "name": "Kontoname", "email": "E-Mail", "status": "Status", "type": "Typ", @@ -210,12 +211,12 @@ "updatedAt": "Aktualisiert am", "openMenu": "Menü öffnen", "emailAccountRegistration": "E-Mail-Konto-Registrierung", - "emailAccountRegistrationDesc": "Geben Sie Ihre E-Mail-Adresse ein. Sie werden die IMAP/SMTP-Details in den nächsten Schritten konfigurieren. Wir werden versuchen, die SMTP/IMAP-Serveradressen basierend auf der angegebenen E-Mail-Adresse automatisch zu ermitteln.", + "emailAccountRegistrationDesc": "Bitte geben Sie Ihre E-Mail-Adresse ein. In den nächsten Schritten konfigurieren Sie die IMAP-Details. Wir verwenden diese Adresse, um die IMAP-Servereinstellungen automatisch zu ermitteln.", "emailAddress": "E-Mail-Adresse", "emailPlaceholder": "z.B. max.mustermann@beispiel.de", "namePlaceholder": "z.B. Max Mustermann", "optional": "Optional", - "nameDescription": "IMAP-Verbindungsbenutzername. Lassen Sie dieses Feld leer, wenn Sie Ihre vollständige E-Mail-Adresse als Verbindungsbenutzernamen verwenden.", + "nameDescription": "IMAP-Benutzername. Standardmäßig Ihre E-Mail, sonst hier anpassen.", "emailCannotBeModified": "Die E-Mail-Adresse des Kontos kann während der Bearbeitung nicht geändert werden.", "addAccount": "Konto hinzufügen", "updateAccount": "Konto aktualisieren", @@ -239,7 +240,6 @@ "accountDetails": "Kontodetails", "capabilities": "Funktionen", "folderLimit": "Ordnerlimit", - "incrementalSyncInterval": "Inkrementelles Synchronisierungsintervall", "everyMinutes": "alle {{minutes}} Minuten", "foldersConfiguredForSync": "{{count}} Ordner zur Synchronisierung konfiguriert", "foldersSelected": "{{count}} Ordner ausgewählt", @@ -259,9 +259,9 @@ "leaveEmptyToKeepExisting": "Leer lassen, um das bestehende Passwort beizubehalten, oder einen neuen Wert eingeben, um es zu aktualisieren.", "useProxy": "Proxy verwenden", "selectProxy": "Proxy auswählen", - "incrementalSync": "Inkrementelle Synchronisierung (Minuten)", - "incrementalSyncPlaceholder": "z.B. 300", - "enabledDescription": "Bestimmt, ob dieses Konto aktiv ist. Wenn es deaktiviert ist, werden keine zugehörigen Synchronisierungen durchgeführt.", + "downloadInterval": "Download-Intervall (Minuten)", + "downloadIntervalPlaceholder": "Minuten eingeben", + "enabledDescription": "Legt fest, ob dieses Konto aktiv ist. Wenn es deaktiviert ist, werden zugehörige Downloads nicht ausgeführt.", "dateSince": "Datum seit", "none": "Keine", "fixed": "Fest", diff --git a/web/src/locales/en.json b/web/src/locales/en.json index d32f524..0e3d582 100644 --- a/web/src/locales/en.json +++ b/web/src/locales/en.json @@ -142,18 +142,17 @@ "systemVersion": "System Version" }, "accounts": { - "beforeRelativeValue": "Sync emails before {{value}} {{unit}} ago", - "sinceRelativeValue": "Sync emails from the last", - "syncBatchSize": "Sync batch size", - "syncBatchSizeDescription": "Number of messages fetched per IMAP request", - "incrementalSyncDescription": "How often incremental email synchronization is performed (in minutes)", - "syncScopeDescription": "Choose which emails should be indexed and archived.", - "syncScope": "Sync Strategy", + "beforeRelativeValue": "Download emails before {{value}} {{unit}} ago", + "sinceRelativeValue": "Download emails from the last", + "downloadBatchSize": "Download batch size", + "downloadBatchSizeDescription": "Number of messages fetched per IMAP request", + "downloadScopeDescription": "Choose which emails should be indexed and downloaded.", + "downloadScope": "Download Strategy", "selectMode": "Select filter mode", - "syncAll": "Sync All Emails", + "downloadAll": "Download All Emails", "sinceFixed": "Since Specific Date", - "sinceRelative": "Sync Recent Emails Only", - "beforeRelative": "Archive Old Emails Only", + "sinceRelative": "Download Recent Emails Only", + "beforeRelative": "Download Old Emails Only", "duration": "Duration", "unit": "Unit", "accessControl": "Access Control", @@ -190,7 +189,9 @@ "noAccountConfigurations": "No Account Configurations", "noAccountConfigurationsDesc": "You haven't added any Account configurations yet. Add one to start using Account features.", "addConfiguration": "Add Configuration", - "name": "Login Name", + "useNoProxy": "No Proxy", + "login_name": "Login Name", + "name": "Account Name", "email": "Email", "status": "Status", "type": "Type", @@ -210,12 +211,12 @@ "updatedAt": "Updated At", "openMenu": "Open menu", "emailAccountRegistration": "Email Account Registration", - "emailAccountRegistrationDesc": "Please provide your email address. In the next steps, you will configure the IMAP/SMTP details. Using this email address, we will attempt to automatically retrieve the SMTP/IMAP server addresses.", + "emailAccountRegistrationDesc": "Please enter your email address. In the following steps, you will configure IMAP details. We will use this address to automatically discover IMAP server settings.", "emailAddress": "Email Address", "emailPlaceholder": "e.g john.doe@example.com", "namePlaceholder": "e.g john.doe", "optional": "Optional", - "nameDescription": "IMAP Connection Username. Leave this field blank if you use your full email address as the connection username.", + "nameDescription": "IMAP username. Defaults to your email; custom name supported.", "emailCannotBeModified": "The email account address cannot be modified when editing.", "addAccount": "Add Account", "updateAccount": "Update Account", @@ -239,7 +240,6 @@ "accountDetails": "Account Details", "capabilities": "Capabilities", "folderLimit": "Folder Limit", - "incrementalSyncInterval": "Incremental Sync Interval", "everyMinutes": "every {{minutes}} minutes", "foldersConfiguredForSync": "{{count}} folder(s) configured for sync", "foldersSelected": "{{count}} folder(s) selected", @@ -259,9 +259,9 @@ "leaveEmptyToKeepExisting": "Leave empty to keep the existing password, or enter a new password to update it.", "useProxy": "Use Proxy", "selectProxy": "Select a proxy", - "incrementalSync": "Incremental Sync(minutes)", - "incrementalSyncPlaceholder": "e.g 300", - "enabledDescription": "Determines whether this account is active. If disabled, related syncs will not run.", + "downloadInterval": "Download Interval (minutes)", + "downloadIntervalPlaceholder": "Enter minutes", + "enabledDescription": "Determines whether this account is active. If disabled, related downloads will not run.", "dateSince": "Date Since", "none": "None", "fixed": "Fixed", diff --git a/web/src/locales/es.json b/web/src/locales/es.json index f06851c..80bfa6f 100644 --- a/web/src/locales/es.json +++ b/web/src/locales/es.json @@ -142,18 +142,17 @@ "systemVersion": "Versión del sistema" }, "accounts": { - "beforeRelativeValue": "Sincronizar correos de hace más de {{value}} {{unit}}", - "sinceRelativeValue": "Sincronizar correos de los últimos {{value}} {{unit}}", - "syncBatchSize": "Tamaño del lote de sincronización", - "syncBatchSizeDescription": "Número de mensajes obtenidos por solicitud IMAP", - "incrementalSyncDescription": "Frecuencia de sincronización incremental (en minutos)", - "syncScope": "Estrategia de sincronización", - "syncScopeDescription": "Elija qué correos deben indexarse y archivarse.", + "beforeRelativeValue": "Descargar correos de hace {{value}} {{unit}}", + "sinceRelativeValue": "Descargar correos de los últimos", + "downloadBatchSize": "Tamaño del lote de descarga", + "downloadBatchSizeDescription": "Número de mensajes obtenidos por solicitud IMAP", + "downloadScopeDescription": "Elija qué correos electrónicos deben indexarse y descargarse.", + "downloadScope": "Estrategia de descarga", "selectMode": "Seleccionar modo de filtro", - "syncAll": "Sincronizar todos los correos", + "downloadAll": "Descargar todos los correos", "sinceFixed": "Desde una fecha específica", - "sinceRelative": "Sincronizar solo correos recientes", - "beforeRelative": "Archivar solo correos antiguos", + "sinceRelative": "Descargar solo correos recientes", + "beforeRelative": "Descargar solo correos antiguos", "duration": "Duración", "unit": "Unidad", "accessControl": "Control de acceso", @@ -190,7 +189,9 @@ "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.", "addConfiguration": "Añadir configuración", - "name": "Nombre de usuario", + "useNoProxy": "Sin proxy", + "login_name": "Nombre de usuario", + "name": "Nombre de la cuenta", "email": "Correo electrónico", "status": "Estado", "type": "Tipo", @@ -210,12 +211,12 @@ "updatedAt": "Actualizado el", "openMenu": "Abrir menú", "emailAccountRegistration": "Registro de cuenta de correo", - "emailAccountRegistrationDesc": "Introduce tu dirección de correo electrónico. Configurarás los detalles IMAP/SMTP en los próximos pasos. Intentaremos autodescubrir las direcciones del servidor SMTP/IMAP basándonos en el correo electrónico proporcionado.", + "emailAccountRegistrationDesc": "Introduzca su dirección de correo electrónico. En los siguientes pasos configurará los detalles de IMAP. Usaremos esta dirección para detectar automáticamente la configuración del servidor IMAP.", "emailAddress": "Dirección de correo electrónico", "emailPlaceholder": "ej. juan.perez@ejemplo.com", "namePlaceholder": "ej. Juan Pérez", "optional": "Opcional", - "nameDescription": "Nombre de usuario de conexión IMAP. Deje este campo en blanco si utiliza su dirección de correo electrónico completa como nombre de usuario de conexión.", + "nameDescription": "Usuario IMAP. Por defecto su email; cámbielo si es necesario.", "emailCannotBeModified": "La dirección de correo electrónico de la cuenta no se puede modificar durante la edición.", "addAccount": "Añadir cuenta", "updateAccount": "Actualizar cuenta", @@ -239,7 +240,6 @@ "accountDetails": "Detalles de la cuenta", "capabilities": "Capacidades", "folderLimit": "Límite de carpetas", - "incrementalSyncInterval": "Intervalo de sincronización incremental", "everyMinutes": "cada {{minutes}} minutos", "foldersConfiguredForSync": "{{count}} carpeta(s) configurada(s) para sincronización", "foldersSelected": "{{count}} carpeta(s) seleccionada(s)", @@ -259,9 +259,9 @@ "leaveEmptyToKeepExisting": "Deja vacío para mantener la contraseña existente, o introduce un nuevo valor para actualizarla.", "useProxy": "Usar Proxy", "selectProxy": "Seleccionar Proxy", - "incrementalSync": "Sincronización incremental (Minutos)", - "incrementalSyncPlaceholder": "ej. 300", - "enabledDescription": "Determina si esta cuenta está activa. Si está deshabilitada, no se realizarán sincronizaciones asociadas.", + "downloadInterval": "Intervalo de descarga (minutos)", + "downloadIntervalPlaceholder": "Ingresa los minutos", + "enabledDescription": "Determina si esta cuenta está activa. Si se desactiva, las descargas relacionadas no se ejecutarán.", "dateSince": "Fecha desde", "none": "Ninguno", "fixed": "Fija", diff --git a/web/src/locales/fi.json b/web/src/locales/fi.json index a804b6a..13b7939 100644 --- a/web/src/locales/fi.json +++ b/web/src/locales/fi.json @@ -142,18 +142,17 @@ "systemVersion": "Järjestelmäversio" }, "accounts": { - "beforeRelativeValue": "Synkronoi sähköpostit, jotka ovat vanhempia kuin {{value}} {{unit}}", - "sinceRelativeValue": "Synkronoi viimeisimmän {{value}} {{unit}} sähköpostit", - "syncBatchSize": "Synkronoinnin eräkoko", - "syncBatchSizeDescription": "Per IMAP-pyyntö noudettujen viestien määrä", - "incrementalSyncDescription": "Kuinka usein inkrementaalinen sähköpostin synkronointi suoritetaan (minuutteina)", - "syncScope": "Synkronointistrategia", - "syncScopeDescription": "Valitse mitkä sähköpostit indeksoidaan ja arkistoidaan.", + "beforeRelativeValue": "Lataa sähköpostit {{value}} {{unit}} sitten", + "sinceRelativeValue": "Lataa sähköpostit viimeisimmiltä", + "downloadBatchSize": "Latauserän koko", + "downloadBatchSizeDescription": "IMAP-pyyntöä kohden noudettujen viestien määrä", + "downloadScopeDescription": "Valitse, mitkä sähköpostit indeksoidaan ja ladataan.", + "downloadScope": "Latausstrategia", "selectMode": "Valitse suodatustila", - "syncAll": "Synkronoi kaikki sähköpostit", + "downloadAll": "Lataa kaikki sähköpostit", "sinceFixed": "Tietystä päivämäärästä lähtien", - "sinceRelative": "Synkronoi vain viimeisimmät sähköpostit", - "beforeRelative": "Arkistoi vain vanhat sähköpostit", + "sinceRelative": "Lataa vain viimeisimmät sähköpostit", + "beforeRelative": "Lataa vain vanhat sähköpostit", "duration": "Kesto", "unit": "Yksikkö", "accessControl": "Pääsynhallinta", @@ -190,7 +189,9 @@ "noAccountConfigurations": "Ei tilimäärityksiä", "noAccountConfigurationsDesc": "Et ole vielä lisännyt tilimäärityksiä. Lisää yksi aloittaaksesi tilitoimintojen käytön.", "addConfiguration": "Lisää määritys", - "name": "Kirjautumisnimi", + "useNoProxy": "Ei välityspalvelinta", + "login_name": "Kirjautumisnimi", + "name": "Tilin nimi", "email": "Sähköposti", "status": "Tila", "type": "Tyyppi", @@ -210,12 +211,12 @@ "updatedAt": "Päivitetty", "openMenu": "Avaa valikko", "emailAccountRegistration": "Sähköpostitilin rekisteröinti", - "emailAccountRegistrationDesc": "Anna sähköpostiosoitteesi. Määrität IMAP/SMTP-tiedot seuraavissa vaiheissa. Yritämme etsiä SMTP/IMAP-palvelinosoitteet automaattisesti antamasi sähköpostiosoitteen perusteella.", + "emailAccountRegistrationDesc": "Anna sähköpostiosoitteesi. Seuraavissa vaiheissa määrität IMAP-asetukset. Käytämme tätä osoitetta IMAP-palvelimen asetusten automaattiseen hakuun.", "emailAddress": "Sähköpostiosoite", "emailPlaceholder": "esim. matti.meikäläinen@esimerkki.fi", "namePlaceholder": "esim. matti.meikäläinen", "optional": "Valinnainen", - "nameDescription": "IMAP-yhteyden käyttäjänimi. Jätä tämä kenttä tyhjäksi, jos käytät koko sähköpostiosoitettasi yhteyden käyttäjänimenä.", + "nameDescription": "IMAP-käyttäjätunnus. Oletuksena sähköposti, tai aseta oma tunnus.", "emailCannotBeModified": "Tilin sähköpostiosoitetta ei voi muokata muokkauksen aikana.", "addAccount": "Lisää tili", "updateAccount": "Päivitä tili", @@ -239,7 +240,6 @@ "accountDetails": "Tilin tiedot", "capabilities": "Ominaisuudet", "folderLimit": "Kansioraja", - "incrementalSyncInterval": "Lisäävän synkronoinnin väli", "everyMinutes": "joka {{minutes}} minuutti", "foldersConfiguredForSync": "{{count}} kansio(ta) määritetty synkronointiin", "foldersSelected": "{{count}} kansio(ta) valittu", @@ -259,9 +259,9 @@ "leaveEmptyToKeepExisting": "Jätä tyhjäksi säilyttääksesi olemassa olevan salasanan, tai syötä uusi päivittääksesi sen.", "useProxy": "Käytä välityspalvelinta", "selectProxy": "Valitse välityspalvelin", - "incrementalSync": "Lisäävä synkronointi (minuuttia)", - "incrementalSyncPlaceholder": "esim. 300", - "enabledDescription": "Määrittää, onko tämä tili aktiivinen. Jos poistettu käytöstä, siihen liittyviä synkronointeja ei suoriteta.", + "downloadInterval": "Latausväli (minuuttia)", + "downloadIntervalPlaceholder": "Syötä minuutit", + "enabledDescription": "Määrittää, onko tämä tili aktiivinen. Jos se on poistettu käytöstä, tähän liittyviä latauksia ei suoriteta.", "dateSince": "Päivämäärä alkaen", "none": "Ei mitään", "fixed": "Kiinteä", diff --git a/web/src/locales/fr.json b/web/src/locales/fr.json index 5617347..7eaed83 100644 --- a/web/src/locales/fr.json +++ b/web/src/locales/fr.json @@ -142,18 +142,17 @@ "systemVersion": "Version du système" }, "accounts": { - "beforeRelativeValue": "Synchroniser les e-mails datant de plus de {{value}} {{unit}}", - "sinceRelativeValue": "Synchroniser les e-mails des derniers {{value}} {{unit}}", - "syncBatchSize": "Taille du lot de synchronisation", - "syncBatchSizeDescription": "Nombre de messages récupérés par requête IMAP", - "incrementalSyncDescription": "Fréquence de synchronisation incrémentielle (en minutes)", - "syncScope": "Stratégie de synchronisation", - "syncScopeDescription": "Choisissez les e-mails à indexer et à archiver.", + "beforeRelativeValue": "Télécharger les e-mails d'il y a {{value}} {{unit}}", + "sinceRelativeValue": "Télécharger les e-mails des derniers", + "downloadBatchSize": "Taille du lot de téléchargement", + "downloadBatchSizeDescription": "Nombre de messages récupérés par requête IMAP", + "downloadScopeDescription": "Choisissez les e-mails à indexer et à télécharger.", + "downloadScope": "Stratégie de téléchargement", "selectMode": "Sélectionner le mode de filtrage", - "syncAll": "Synchroniser tous les e-mails", + "downloadAll": "Télécharger tous les e-mails", "sinceFixed": "Depuis une date spécifique", - "sinceRelative": "Synchroniser uniquement les e-mails récents", - "beforeRelative": "Archiver uniquement les anciens e-mails", + "sinceRelative": "Télécharger uniquement les e-mails récents", + "beforeRelative": "Télécharger uniquement les anciens e-mails", "duration": "Durée", "unit": "Unité", "accessControl": "Contrôle d'accès", @@ -190,7 +189,9 @@ "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.", "addConfiguration": "Ajouter Configuration", - "name": "Nom de connexion", + "useNoProxy": "Sans proxy", + "login_name": "Nom de connexion", + "name": "Nom du compte", "email": "E-mail", "status": "Statut", "type": "Type", @@ -210,12 +211,12 @@ "updatedAt": "Mis à jour le", "openMenu": "Ouvrir le menu", "emailAccountRegistration": "Enregistrement de Compte E-mail", - "emailAccountRegistrationDesc": "Veuillez entrer votre adresse e-mail. Vous configurerez les détails IMAP/SMTP dans les étapes suivantes. Nous essaierons de trouver automatiquement les adresses des serveurs SMTP/IMAP en utilisant l'adresse e-mail fournie.", + "emailAccountRegistrationDesc": "Veuillez saisir votre adresse e-mail. Dans les étapes suivantes, vous configurerez les paramètres IMAP. Nous utiliserons cette adresse pour détecter automatiquement les paramètres du serveur IMAP.", "emailAddress": "Adresse E-mail", "emailPlaceholder": "ex. jean.dupont@exemple.com", "namePlaceholder": "ex. jean.dupont", "optional": "Facultatif", - "nameDescription": "Nom d'utilisateur de connexion IMAP. Laissez ce champ vide si vous utilisez votre adresse e-mail complète comme nom d'utilisateur de connexion.", + "nameDescription": "Nom d'utilisateur IMAP. E-mail par défaut ou nom personnalisé.", "emailCannotBeModified": "L'adresse e-mail du compte ne peut pas être modifiée lors de l'édition.", "addAccount": "Ajouter un Compte", "updateAccount": "Mettre à jour le Compte", @@ -239,7 +240,6 @@ "accountDetails": "Détails du Compte", "capabilities": "Capacités", "folderLimit": "Limite de Dossiers", - "incrementalSyncInterval": "Intervalle de Synchronisation Incrémentielle", "everyMinutes": "toutes les {{minutes}} minutes", "foldersConfiguredForSync": "{{count}} dossier(s) configuré(s) pour la synchronisation", "foldersSelected": "{{count}} dossier(s) sélectionné(s)", @@ -259,9 +259,9 @@ "leaveEmptyToKeepExisting": "Laissez vide pour conserver le mot de passe existant, ou entrez-en un nouveau pour le mettre à jour.", "useProxy": "Utiliser un Proxy", "selectProxy": "Sélectionner un proxy", - "incrementalSync": "Synchronisation Incrémentielle (minutes)", - "incrementalSyncPlaceholder": "ex. 300", - "enabledDescription": "Détermine si ce compte est actif. S'il est désactivé, les synchronisations associées ne seront pas exécutées.", + "downloadInterval": "Intervalle de téléchargement (minutes)", + "downloadIntervalPlaceholder": "Entrer les minutes", + "enabledDescription": "Détermine si ce compte est actif. S'il est désactivé, les téléchargements associés ne seront pas lancés.", "dateSince": "Date Depuis", "none": "Aucune", "fixed": "Fixe", diff --git a/web/src/locales/it.json b/web/src/locales/it.json index 05bef55..6c5e19f 100644 --- a/web/src/locales/it.json +++ b/web/src/locales/it.json @@ -142,18 +142,17 @@ "systemVersion": "Versione del sistema" }, "accounts": { - "beforeRelativeValue": "Sincronizza le email antecedenti a {{value}} {{unit}} fa", - "sinceRelativeValue": "Sincronizza le email degli ultimi {{value}} {{unit}}", - "syncBatchSize": "Dimensione batch di sincronizzazione", - "syncBatchSizeDescription": "Numero di messaggi recuperati per richiesta IMAP", - "incrementalSyncDescription": "Frequenza della sincronizzazione incrementale (in minuti)", - "syncScope": "Strategia di sincronizzazione", - "syncScopeDescription": "Scegli quali email indicizzare e archiviare.", + "beforeRelativeValue": "Scarica email da {{value}} {{unit}} fa", + "sinceRelativeValue": "Scarica email degli ultimi", + "downloadBatchSize": "Dimensione del lotto di download", + "downloadBatchSizeDescription": "Numero di messaggi recuperati per richiesta IMAP", + "downloadScopeDescription": "Scegli quali email indicizzare e scaricare.", + "downloadScope": "Strategia di download", "selectMode": "Seleziona modalità filtro", - "syncAll": "Sincronizza tutte le email", + "downloadAll": "Scarica tutte le email", "sinceFixed": "Da una data specifica", - "sinceRelative": "Sincronizza solo email recenti", - "beforeRelative": "Archivia solo email vecchie", + "sinceRelative": "Scarica solo le email recenti", + "beforeRelative": "Scarica solo le vecchie email", "duration": "Durata", "unit": "Unità", "accessControl": "Controllo accessi", @@ -190,7 +189,9 @@ "noAccountConfigurations": "Nessuna Configurazione Account", "noAccountConfigurationsDesc": "Non hai ancora aggiunto alcuna Configurazione Account. Aggiungine una per iniziare a usare le funzionalità Account.", "addConfiguration": "Aggiungi Configurazione", - "name": "Nome di accesso", + "useNoProxy": "Nessun proxy", + "login_name": "Nome di accesso", + "name": "Nome account", "email": "Email", "status": "Stato", "type": "Tipo", @@ -210,12 +211,12 @@ "updatedAt": "Aggiornato Il", "openMenu": "Apri Menu", "emailAccountRegistration": "Registrazione Account Email", - "emailAccountRegistrationDesc": "Inserisci il tuo indirizzo email. Nelle fasi successive configurerai i dettagli IMAP/SMTP. Cercheremo di recuperare automaticamente gli indirizzi dei server SMTP/IMAP utilizzando l'indirizzo email fornito.", + "emailAccountRegistrationDesc": "Inserisci il tuo indirizzo email. Nei passaggi successivi configurerai i dettagli IMAP. Useremo questo indirizzo per rilevare automaticamente le impostazioni del server IMAP.", "emailAddress": "Indirizzo Email", "emailPlaceholder": "es. john.doe@esempio.com", "namePlaceholder": "es. john.doe", "optional": "Opzionale", - "nameDescription": "Nome utente di connessione IMAP. Lasciare vuoto questo campo se si utilizza l'indirizzo email completo come nome utente di connessione.", + "nameDescription": "Nome utente IMAP. Predefinito l'email, oppure personalizzalo.", "emailCannotBeModified": "L'indirizzo email dell'account non può essere modificato durante la modifica.", "addAccount": "Aggiungi Account", "updateAccount": "Aggiorna Account", @@ -239,7 +240,6 @@ "accountDetails": "Dettagli Account", "capabilities": "Capacità", "folderLimit": "Limite Cartelle", - "incrementalSyncInterval": "Intervallo di Sincronizzazione Incrementale", "everyMinutes": "ogni {{minutes}} minuti", "foldersConfiguredForSync": "{{count}} cartella/e configurata/e per la sincronizzazione", "foldersSelected": "{{count}} cartella/e selezionata/e", @@ -259,9 +259,9 @@ "leaveEmptyToKeepExisting": "Lascia vuoto per mantenere la password esistente, o inseriscine una nuova per aggiornarla.", "useProxy": "Usa Proxy", "selectProxy": "Seleziona un proxy", - "incrementalSync": "Sincronizzazione Incrementale (minuti)", - "incrementalSyncPlaceholder": "es. 300", - "enabledDescription": "Determina se questo account è attivo. Se disabilitato, le sincronizzazioni correlate non verranno eseguite.", + "downloadInterval": "Intervallo di download (minuti)", + "downloadIntervalPlaceholder": "Inserisci i minuti", + "enabledDescription": "Determina se questo account è attivo. Se disabilitato, i download correlati non verranno eseguiti.", "dateSince": "Data Da", "none": "Nessuna", "fixed": "Fissa", diff --git a/web/src/locales/jp.json b/web/src/locales/jp.json index 1aabbed..2ccafe1 100644 --- a/web/src/locales/jp.json +++ b/web/src/locales/jp.json @@ -142,18 +142,17 @@ "systemVersion": "システムバージョン" }, "accounts": { - "beforeRelativeValue": "{{value}} {{unit}} 前より前のメールを同期", - "sinceRelativeValue": "過去 {{value}} {{unit}} 分のメールを同期", - "syncBatchSize": "同期バッチサイズ", - "syncBatchSizeDescription": "1回のIMAPリクエストで取得するメッセージ数", - "incrementalSyncDescription": "増分メール同期の実行頻度(分単位)", - "syncScope": "同期戦略", - "syncScopeDescription": "インデックスを作成し、アーカイブするメールを選択します。", - "selectMode": "フィルタモードを選択", - "syncAll": "すべてのメールを同期", + "beforeRelativeValue": "{{value}} {{unit}}前より古いメールをダウンロード", + "sinceRelativeValue": "直近の期間のメールをダウンロード", + "downloadBatchSize": "ダウンロードバッチサイズ", + "downloadBatchSizeDescription": "IMAPリクエストごとに取得されるメッセージ数", + "downloadScopeDescription": "インデックスとダウンロードの対象となるメールを選択してください。", + "downloadScope": "ダウンロード戦略", + "selectMode": "フィルターモードを選択", + "downloadAll": "すべてのメールをダウンロード", "sinceFixed": "指定した日付以降", - "sinceRelative": "最近のメールのみ同期", - "beforeRelative": "古いメールのみアーカイブ", + "sinceRelative": "最近のメールのみダウンロード", + "beforeRelative": "古いメールのみダウンロード", "duration": "期間", "unit": "単位", "accessControl": "アクセス制御", @@ -190,7 +189,9 @@ "noAccountConfigurations": "アカウント設定がありません", "noAccountConfigurationsDesc": "まだアカウント設定を追加していません。機能を利用するには設定を追加してください。", "addConfiguration": "設定を追加", - "name": "ログイン名", + "useNoProxy": "プロキシなし", + "login_name": "ログイン名", + "name": "アカウント名", "email": "メールアドレス", "status": "ステータス", "type": "タイプ", @@ -210,12 +211,12 @@ "updatedAt": "更新日時", "openMenu": "メニューを開く", "emailAccountRegistration": "メールアカウント登録", - "emailAccountRegistrationDesc": "メールアドレスを入力してください。次のステップで、IMAP/SMTPの詳細を設定します。入力されたメールアドレスを使用して、IMAP/SMTPサーバーアドレスの自動取得を試みます。", + "emailAccountRegistrationDesc": "メールアドレスを入力してください。次のステップで IMAP の詳細を設定します。このアドレスを使用して IMAP サーバー設定を自動検出します。", "emailAddress": "メールアドレス", "emailPlaceholder": "例: john.doe@example.com", "namePlaceholder": "例: john.doe", "optional": "オプション", - "nameDescription": "IMAP接続のユーザー名。接続ユーザー名として完全なメールアドレスを使用する場合は、このフィールドを空欄にしてください。", + "nameDescription": "IMAPユーザー名。通常はメールアドレスですが、変更も可能です。", "emailCannotBeModified": "編集時にはメールアカウントアドレスは変更できません。", "addAccount": "アカウントを追加", "updateAccount": "アカウントを更新", @@ -239,7 +240,6 @@ "accountDetails": "アカウント詳細", "capabilities": "機能", "folderLimit": "フォルダーの制限", - "incrementalSyncInterval": "増分同期間隔", "everyMinutes": "{{minutes}}分ごと", "foldersConfiguredForSync": "同期用に設定されたフォルダー: {{count}}件", "foldersSelected": "選択されたフォルダー: {{count}}件", @@ -259,9 +259,9 @@ "leaveEmptyToKeepExisting": "既存のパスワードを保持する場合は空欄にしてください。更新する場合は新しいパスワードを入力してください。", "useProxy": "プロキシを使用", "selectProxy": "プロキシを選択", - "incrementalSync": "増分同期(分)", - "incrementalSyncPlaceholder": "例: 300", - "enabledDescription": "このアカウントが有効かどうかを決定します。無効の場合、関連する同期は実行されません。", + "downloadInterval": "ダウンロード間隔 (分)", + "downloadIntervalPlaceholder": "分を入力してください", + "enabledDescription": "このアカウントが有効かどうかを決定します。無効にすると、関連するダウンロードは実行されません。", "dateSince": "同期開始日", "none": "なし", "fixed": "固定", diff --git a/web/src/locales/ko.json b/web/src/locales/ko.json index 179fb05..8051c0c 100644 --- a/web/src/locales/ko.json +++ b/web/src/locales/ko.json @@ -142,18 +142,17 @@ "systemVersion": "시스템 버전" }, "accounts": { - "beforeRelativeValue": "{{value}} {{unit}} 전 이전 이메일 동기화", - "sinceRelativeValue": "지난 {{value}} {{unit}} 동안의 이메일 동기화", - "syncBatchSize": "동기화 배치 크기", - "syncBatchSizeDescription": "IMAP 요청당 가져올 메시지 수", - "incrementalSyncDescription": "증분 이메일 동기화 수행 빈도 (분 단위)", - "syncScope": "동기화 전략", - "syncScopeDescription": "인덱싱 및 아카이빙할 이메일을 선택하십시오.", + "beforeRelativeValue": "{{value}} {{unit}} 전의 이메일 다운로드", + "sinceRelativeValue": "최근 기간의 이메일 다운로드", + "downloadBatchSize": "다운로드 일괄 처리 크기", + "downloadBatchSizeDescription": "IMAP 요청당 가져온 메시지 수", + "downloadScopeDescription": "색인화 및 다운로드할 이메일을 선택하십시오.", + "downloadScope": "다운로드 전략", "selectMode": "필터 모드 선택", - "syncAll": "모든 이메일 동기화", + "downloadAll": "모든 이메일 다운로드", "sinceFixed": "특정 날짜 이후", - "sinceRelative": "최신 이메일만 동기화", - "beforeRelative": "오래된 이메일만 아카이브", + "sinceRelative": "최근 이메일만 다운로드", + "beforeRelative": "이전 이메일만 다운로드", "duration": "기간", "unit": "단위", "accessControl": "액세스 제어", @@ -190,7 +189,9 @@ "noAccountConfigurations": "계정 구성 없음", "noAccountConfigurationsDesc": "아직 계정 구성을 추가하지 않았습니다. 기능을 사용하려면 추가하십시오.", "addConfiguration": "구성 추가", - "name": "로그인 이름", + "useNoProxy": "프록시 없음", + "login_name": "로그인 이름", + "name": "계정 이름", "email": "이메일", "status": "상태", "type": "유형", @@ -210,12 +211,12 @@ "updatedAt": "업데이트일", "openMenu": "메뉴 열기", "emailAccountRegistration": "이메일 계정 등록", - "emailAccountRegistrationDesc": "이메일 주소를 입력하십시오. 다음 단계에서 IMAP/SMTP 세부 정보를 구성합니다. 제공된 이메일 주소를 사용하여 IMAP/SMTP 서버 주소를 자동으로 찾으려고 시도합니다.", + "emailAccountRegistrationDesc": "이메일 주소를 입력하세요. 다음 단계에서 IMAP 설정을 구성합니다. 이 주소를 사용하여 IMAP 서버 설정을 자동으로 감지합니다。", "emailAddress": "이메일 주소", "emailPlaceholder": "예: john.doe@example.com", "namePlaceholder": "예: john.doe", "optional": "선택 사항", - "nameDescription": "IMAP 연결 사용자 이름. 전체 이메일 주소를 연결 사용자 이름으로 사용하는 경우, 이 필드를 비워 두십시오.", + "nameDescription": "IMAP 사용자 이름. 기본값은 이메일이며, 직접 입력도 가능합니다.", "emailCannotBeModified": "편집 시 계정 이메일 주소는 수정할 수 없습니다.", "addAccount": "계정 추가", "updateAccount": "계정 업데이트", @@ -239,7 +240,6 @@ "accountDetails": "계정 세부 정보", "capabilities": "기능", "folderLimit": "폴더 제한", - "incrementalSyncInterval": "증분 동기화 간격", "everyMinutes": "매 {{minutes}}분", "foldersConfiguredForSync": "동기화하도록 구성된 폴더: {{count}}개", "foldersSelected": "선택된 폴더: {{count}}개", @@ -259,9 +259,9 @@ "leaveEmptyToKeepExisting": "기존 비밀번호를 유지하려면 비워 두십시오. 업데이트할 경우에만 새 비밀번호를 입력하십시오.", "useProxy": "프록시 사용", "selectProxy": "프록시 선택", - "incrementalSync": "증분 동기화 (분)", - "incrementalSyncPlaceholder": "예: 300", - "enabledDescription": "이 계정이 활성화되었는지 여부를 결정합니다. 비활성화된 경우 관련 동기화가 실행되지 않습니다.", + "downloadInterval": "다운로드 주기 (분)", + "downloadIntervalPlaceholder": "분 단위 입력", + "enabledDescription": "이 계정의 활성화 여부를 결정합니다. 비활성화하면 관련 다운로드가 실행되지 않습니다.", "dateSince": "동기화 시작일", "none": "없음", "fixed": "고정", diff --git a/web/src/locales/nl.json b/web/src/locales/nl.json index a91c087..f2a656d 100644 --- a/web/src/locales/nl.json +++ b/web/src/locales/nl.json @@ -142,18 +142,17 @@ "systemVersion": "Systeemversie" }, "accounts": { - "beforeRelativeValue": "Synchroniseer e-mails van vóór {{value}} {{unit}} geleden", - "sinceRelativeValue": "Synchroniseer e-mails van de afgelopen {{value}} {{unit}}", - "syncBatchSize": "Batchgrootte synchronisatie", - "syncBatchSizeDescription": "Aantal berichten opgehaald per IMAP-verzoek", - "incrementalSyncDescription": "Frequentie van incrementele synchronisatie (in minuten)", - "syncScope": "Synchronisatiestrategie", - "syncScopeDescription": "Kies welke e-mails geïndexeerd en gearchiveerd moeten worden.", - "selectMode": "Filtermodus selecteren", - "syncAll": "Alle e-mails synchroniseren", + "beforeRelativeValue": "Download e-mails van {{value}} {{unit}} geleden", + "sinceRelativeValue": "Download e-mails van de laatste", + "downloadBatchSize": "Download batchgrootte", + "downloadBatchSizeDescription": "Aantal berichten opgehaald per IMAP-verzoek", + "downloadScopeDescription": "Kies welke e-mails moeten worden geïndexeerd en gedownload.", + "downloadScope": "Downloadstrategie", + "selectMode": "Selecteer filtermodus", + "downloadAll": "Download alle e-mails", "sinceFixed": "Sinds een specifieke datum", - "sinceRelative": "Alleen recente e-mails synchroniseren", - "beforeRelative": "Alleen oude e-mails archiveren", + "sinceRelative": "Download alleen recente e-mails", + "beforeRelative": "Download alleen oude e-mails", "duration": "Duur", "unit": "Eenheid", "accessControl": "Toegangsbeheer", @@ -190,7 +189,9 @@ "noAccountConfigurations": "Geen Accountconfiguraties", "noAccountConfigurationsDesc": "U heeft nog geen Accountconfiguraties toegevoegd. Voeg er een toe om de Accountfuncties te gebruiken.", "addConfiguration": "Configuratie Toevoegen", - "name": "Inlognaam", + "useNoProxy": "Geen proxy", + "login_name": "Inlognaam", + "name": "Accountnaam", "email": "E-mail", "status": "Status", "type": "Type", @@ -210,12 +211,12 @@ "updatedAt": "Bijgewerkt Op", "openMenu": "Menu openen", "emailAccountRegistration": "E-mailaccount Registratie", - "emailAccountRegistrationDesc": "Voer uw e-mailadres in. In de volgende stappen configureert u de IMAP/SMTP-details. Met dit e-mailadres proberen we de SMTP/IMAP-serveradressen automatisch op te halen.", + "emailAccountRegistrationDesc": "Voer uw e-mailadres in. In de volgende stappen configureert u de IMAP-gegevens. We gebruiken dit adres om automatisch de IMAP-serverinstellingen te detecteren.", "emailAddress": "E-mailadres", "emailPlaceholder": "bv. john.doe@voorbeeld.com", "namePlaceholder": "bv. john.doe", "optional": "Optioneel", - "nameDescription": "IMAP-verbindingsgebruikersnaam. Laat dit veld leeg als u uw volledige e-mailadres als verbindingsgebruikersnaam gebruikt.", + "nameDescription": "IMAP-gebruikersnaam. Standaard je e-mail, of kies een andere.", "emailCannotBeModified": "Het e-mailadres van het account kan niet worden gewijzigd tijdens het bewerken.", "addAccount": "Account Toevoegen", "updateAccount": "Account Bijwerken", @@ -239,7 +240,6 @@ "accountDetails": "Accountdetails", "capabilities": "Mogelijkheden", "folderLimit": "Mappenlimiet", - "incrementalSyncInterval": "Incrementaal Sync Interval", "everyMinutes": "elke {{minutes}} minuten", "foldersConfiguredForSync": "{{count}} map(pen) geconfigureerd voor sync", "foldersSelected": "{{count}} map(pen) geselecteerd", @@ -259,9 +259,9 @@ "leaveEmptyToKeepExisting": "Laat leeg om het bestaande wachtwoord te behouden, of voer een nieuw wachtwoord in om het bij te werken.", "useProxy": "Gebruik Proxy", "selectProxy": "Selecteer een proxy", - "incrementalSync": "Incrementale Sync (minuten)", - "incrementalSyncPlaceholder": "bv. 300", - "enabledDescription": "Bepaalt of dit account actief is. Indien uitgeschakeld, worden gerelateerde synchronisaties niet uitgevoerd.", + "downloadInterval": "Download-interval (minuten)", + "downloadIntervalPlaceholder": "Voer minuten in", + "enabledDescription": "Bepaalt of dit account actief is. Indien uitgeschakeld, zullen gerelateerde downloads niet worden uitgevoerd.", "dateSince": "Datum Sinds", "none": "Geen", "fixed": "Vast", diff --git a/web/src/locales/no.json b/web/src/locales/no.json index 23c3d19..16ea06e 100644 --- a/web/src/locales/no.json +++ b/web/src/locales/no.json @@ -142,18 +142,17 @@ "systemVersion": "Systemversjon" }, "accounts": { - "beforeRelativeValue": "Synkroniser e-poster fra før {{value}} {{unit}} siden", - "sinceRelativeValue": "Synkroniser e-poster fra de siste {{value}} {{unit}}", - "syncBatchSize": "Synkroniserings-batchstørrelse", - "syncBatchSizeDescription": "Antall meldinger hentet per IMAP-forespørsel", - "incrementalSyncDescription": "Hvor ofte inkrementell e-post-synkronisering utføres (i minutter)", - "syncScope": "Synkroniseringsstrategi", - "syncScopeDescription": "Velg hvilke e-poster som skal indekseres og arkiveres.", + "beforeRelativeValue": "Last ned e-poster fra {{value}} {{unit}} siden", + "sinceRelativeValue": "Last ned e-poster fra de siste", + "downloadBatchSize": "Nedlastingsbatchstørrelse", + "downloadBatchSizeDescription": "Antall meldinger hentet per IMAP-forespørsel", + "downloadScopeDescription": "Velg hvilke e-poster som skal indekseres og lastes ned.", + "downloadScope": "Nedlastingsstrategi", "selectMode": "Velg filtermodus", - "syncAll": "Synkroniser alle e-poster", + "downloadAll": "Last ned alle e-poster", "sinceFixed": "Siden spesifikk dato", - "sinceRelative": "Synkroniser kun nylige e-poster", - "beforeRelative": "Arkiver kun gamle e-poster", + "sinceRelative": "Last ned kun nylige e-poster", + "beforeRelative": "Last ned kun gamle e-poster", "duration": "Varighet", "unit": "Enhet", "accessControl": "Tilgangskontroll", @@ -190,7 +189,9 @@ "noAccountConfigurations": "Ingen kontokonfigurasjoner", "noAccountConfigurationsDesc": "Du har ikke lagt til noen kontokonfigurasjoner ennå. Legg til en for å begynne å bruke kontofunksjoner.", "addConfiguration": "Legg til konfigurasjon", - "name": "Påloggingsnavn", + "useNoProxy": "Ingen proxy", + "login_name": "Påloggingsnavn", + "name": "Kontonavn", "email": "E-post", "status": "Status", "type": "Type", @@ -210,12 +211,12 @@ "updatedAt": "Oppdatert", "openMenu": "Åpne meny", "emailAccountRegistration": "Registrering av e-postkonto", - "emailAccountRegistrationDesc": "Vennligst oppgi e-postadressen din. I de neste trinnene skal du konfigurere IMAP/SMTP-detaljene. Vi vil forsøke å hente SMTP/IMAP-serveradressene automatisk ved hjelp av denne e-postadressen.", + "emailAccountRegistrationDesc": "Skriv inn e-postadressen din. I de neste stegene konfigurerer du IMAP-detaljer. Vi bruker denne adressen til å automatisk finne IMAP-serverinnstillinger.", "emailAddress": "E-postadresse", "emailPlaceholder": "f.eks. ola.nordmann@eksempel.no", "namePlaceholder": "f.eks. ola.nordmann", "optional": "Valgfritt", - "nameDescription": "IMAP-tilkoblingsbrukernavn. La dette feltet stå tomt hvis du bruker hele e-postadressen din som tilkoblingsbrukernavn.", + "nameDescription": "IMAP-brukernavn. Bruker e-post som standard, eller velg et eget.", "emailCannotBeModified": "E-postadressen til kontoen kan ikke endres under redigering.", "addAccount": "Legg til konto", "updateAccount": "Oppdater konto", @@ -239,7 +240,6 @@ "accountDetails": "Kontodetaljer", "capabilities": "Funksjoner", "folderLimit": "Mappegrense", - "incrementalSyncInterval": "Intervall for inkrementell synkronisering", "everyMinutes": "hvert {{minutes}} minutt", "foldersConfiguredForSync": "{{count}} mappe(r) konfigurert for synkronisering", "foldersSelected": "{{count}} mappe(r) valgt", @@ -259,9 +259,9 @@ "leaveEmptyToKeepExisting": "La stå tomt for å beholde det eksisterende passordet, eller skriv inn et nytt passord for å oppdatere det.", "useProxy": "Bruk Proxy", "selectProxy": "Velg en proxy", - "incrementalSync": "Inkrementell synk (minutter)", - "incrementalSyncPlaceholder": "f.eks. 300", - "enabledDescription": "Bestemmer om denne kontoen er aktiv. Hvis deaktivert, vil relaterte synkroniseringer ikke kjøre.", + "downloadInterval": "Nedlastingsintervall (minutter)", + "downloadIntervalPlaceholder": "Skriv inn minutter", + "enabledDescription": "Avgjør om denne kontoen er aktiv. Hvis den er deaktivert, vil relaterte nedlastinger ikke kjøres.", "dateSince": "Dato siden", "none": "Ingen", "fixed": "Fast", diff --git a/web/src/locales/pl.json b/web/src/locales/pl.json index 7cd5be6..d6401a9 100644 --- a/web/src/locales/pl.json +++ b/web/src/locales/pl.json @@ -142,18 +142,17 @@ "systemVersion": "Wersja systemu" }, "accounts": { - "beforeRelativeValue": "Synchronizuj wiadomości sprzed {{value}} {{unit}}", - "sinceRelativeValue": "Synchronizuj wiadomości z ostatnich {{value}} {{unit}}", - "syncBatchSize": "Rozmiar partii synchronizacji", - "syncBatchSizeDescription": "Liczba wiadomości pobieranych w jednym żądaniu IMAP", - "incrementalSyncDescription": "Częstotliwość wykonywania przyrostowej synchronizacji e-mail (w minutach)", - "syncScope": "Strategia synchronizacji", - "syncScopeDescription": "Wybierz wiadomości e-mail, które mają być indeksowane i archiwizowane.", - "selectMode": "Wybierz tryb filtrowania", - "syncAll": "Synchronizuj wszystkie wiadomości", - "sinceFixed": "Od określonej daty", - "sinceRelative": "Synchronizuj tylko ostatnie wiadomości", - "beforeRelative": "Archiwizuj tylko stare wiadomości", + "beforeRelativeValue": "Pobierz e-maile sprzed {{value}} {{unit}}", + "sinceRelativeValue": "Pobierz e-maile z ostatnich", + "downloadBatchSize": "Rozmiar partii pobierania", + "downloadBatchSizeDescription": "Liczba wiadomości pobieranych na żądanie IMAP", + "downloadScopeDescription": "Wybierz, które wiadomości e-mail mają być indeksowane i pobierane.", + "downloadScope": "Strategia pobierania", + "selectMode": "Wybierz tryb filtra", + "downloadAll": "Pobierz wszystkie e-maile", + "sinceFixed": "Od konkretnej daty", + "sinceRelative": "Pobierz tylko ostatnie e-maile", + "beforeRelative": "Pobierz tylko stare e-maile", "duration": "Czas trwania", "unit": "Jednostka", "accessControl": "Kontrola dostępu", @@ -190,7 +189,9 @@ "noAccountConfigurations": "Brak konfiguracji konta", "noAccountConfigurationsDesc": "Nie skonfigurowano jeszcze żadnego konta, aby zacząć korzystać z funkcji dodaj pierwsze konto.", "addConfiguration": "Dodaj konfigurację", - "name": "Login", + "useNoProxy": "Brak serwera proxy", + "login_name": "Login", + "name": "Nazwa konta", "email": "Email", "status": "Status", "type": "Typ", @@ -210,12 +211,12 @@ "updatedAt": "Zaktualizowano", "openMenu": "Otwórz menu", "emailAccountRegistration": "Rejestracja konta email", - "emailAccountRegistrationDesc": "Podaj adres email. W kolejnych krokach skonfigurujesz dane IMAP/SMTP. Używając tego adresu email zostanie podjęta próba automatycznego pobrania adresów serwerów SMTP/IMAP.", + "emailAccountRegistrationDesc": "Wprowadź swój adres e-mail. W kolejnych krokach skonfigurujesz ustawienia IMAP. Użyjemy tego adresu do automatycznego wykrycia ustawień serwera IMAP.", "emailAddress": "Adres Email", "emailPlaceholder": "np. jan.kowalski@example.com", "namePlaceholder": "np. jan.kowalski", "optional": "Opcjonalnie", - "nameDescription": "Nazwa użytkownika IMAP. Pozostaw to pole puste, jeśli nazwą użytkownika będzie adres email.", + "nameDescription": "Nazwa użytkownika IMAP. Domyślnie e-mail lub własna nazwa.", "emailCannotBeModified": "Adresu konta email nie można modyfikować podczas edycji.", "addAccount": "Dodaj konto. ", "updateAccount": "Zaktualizuj konto", @@ -239,7 +240,6 @@ "accountDetails": "Szczegóły konta", "capabilities": "Możliwości", "folderLimit": "Limit folderu", - "incrementalSyncInterval": "Przyrostowy interwał synchronizacji", "everyMinutes": "co {{minutes}} minut", "foldersConfiguredForSync": "{{count}} folder(ów) zostało skonfigurowane do synchronizacji", "foldersSelected": "{{count}} folder(ów) zostało zaznaczonych", @@ -259,9 +259,9 @@ "leaveEmptyToKeepExisting": "Pozostaw to pole puste, jeśli chcesz zachować dotychczasowe hasło lub wpisz nowe, aby zaktualizować.", "useProxy": "Użyj Proxy", "selectProxy": "Wybierz proxy", - "incrementalSync": "Zmień czas synchronizacji(minuty)", - "incrementalSyncPlaceholder": "np. 300", - "enabledDescription": "Określ czy to konto jest aktywne. Jeśli wyłączone, powiązane synchronizacje nie będą działać", + "downloadInterval": "Cykl pobierania (minuty)", + "downloadIntervalPlaceholder": "Wprowadź minuty", + "enabledDescription": "Określa, czy to konto jest aktywne. Jeśli zostanie wyłączone, powiązane pobierania nie będą uruchamiane.", "dateSince": "Od kiedy", "none": "Nigdy", "fixed": "Dokładnie", diff --git a/web/src/locales/pt.json b/web/src/locales/pt.json index a6d9c13..f01c732 100644 --- a/web/src/locales/pt.json +++ b/web/src/locales/pt.json @@ -142,18 +142,17 @@ "systemVersion": "Versão do sistema" }, "accounts": { - "beforeRelativeValue": "Sincronizar e-mails de antes de {{value}} {{unit}} atrás", - "sinceRelativeValue": "Sincronizar e-mails dos últimos {{value}} {{unit}}", - "syncBatchSize": "Tamanho do lote de sincronização", - "syncBatchSizeDescription": "Número de mensagens obtidas por solicitação IMAP", - "incrementalSyncDescription": "Frequência da sincronização incremental (em minutos)", - "syncScope": "Estratégia de sincronização", - "syncScopeDescription": "Escolha quais e-mails devem ser indexados e arquivados.", + "beforeRelativeValue": "Baixar e-mails de {{value}} {{unit}} atrás", + "sinceRelativeValue": "Baixar e-mails dos últimos", + "downloadBatchSize": "Tamanho do lote de download", + "downloadBatchSizeDescription": "Número de mensagens recuperadas por solicitação IMAP", + "downloadScopeDescription": "Escolha quais e-mails devem ser indexados e baixados.", + "downloadScope": "Estratégia de download", "selectMode": "Selecionar modo de filtro", - "syncAll": "Sincronizar todos os e-mails", + "downloadAll": "Baixar todos os e-mails", "sinceFixed": "Desde uma data específica", - "sinceRelative": "Sincronizar apenas e-mails recentes", - "beforeRelative": "Arquivar apenas e-mails antigos", + "sinceRelative": "Baixar apenas e-mails recentes", + "beforeRelative": "Baixar apenas e-mails antigos", "duration": "Duração", "unit": "Unidade", "accessControl": "Controle de acesso", @@ -190,7 +189,9 @@ "noAccountConfigurations": "Nenhuma Configuração de Conta", "noAccountConfigurationsDesc": "Você ainda não adicionou nenhuma configuração de conta. Adicione uma para utilizar a funcionalidade.", "addConfiguration": "Adicionar Configuração", - "name": "Nome de login", + "useNoProxy": "Nenhum proxy", + "login_name": "Nome de login", + "name": "Nome da conta", "email": "Email", "status": "Status", "type": "Tipo", @@ -210,12 +211,12 @@ "updatedAt": "Atualizado Em", "openMenu": "Abrir Menu", "emailAccountRegistration": "Registro de Conta de Email", - "emailAccountRegistrationDesc": "Por favor, insira seu endereço de email. Na próxima etapa, você configurará os detalhes IMAP/SMTP. Tentaremos descobrir automaticamente os endereços de servidor IMAP/SMTP usando o endereço de email fornecido.", + "emailAccountRegistrationDesc": "Insira o seu endereço de e-mail. Nos próximos passos, irá configurar os detalhes de IMAP. Usaremos este endereço para detectar automaticamente as configurações do servidor IMAP.", "emailAddress": "Endereço de Email", "emailPlaceholder": "Ex: john.doe@example.com", "namePlaceholder": "Ex: john.doe", "optional": "Opcional", - "nameDescription": "Nome de usuário de conexão IMAP. Deixe este campo em branco se você usar seu endereço de e-mail completo como nome de usuário de conexão.", + "nameDescription": "Usuário IMAP. Por padrão é seu e-mail, ou defina um personalizado.", "emailCannotBeModified": "O endereço de email da conta não pode ser modificado ao editar.", "addAccount": "Adicionar Conta", "updateAccount": "Atualizar Conta", @@ -239,7 +240,6 @@ "accountDetails": "Detalhes da Conta", "capabilities": "Capacidades", "folderLimit": "Limite de Pasta", - "incrementalSyncInterval": "Intervalo de Sincronização Incremental", "everyMinutes": "A cada {{minutes}} minutos", "foldersConfiguredForSync": "Pastas Configuradas para Sincronização: {{count}}", "foldersSelected": "Pastas Selecionadas: {{count}}", @@ -259,9 +259,9 @@ "leaveEmptyToKeepExisting": "Deixe vazio para manter a senha existente. Insira a nova senha apenas se estiver atualizando.", "useProxy": "Usar Proxy", "selectProxy": "Selecionar Proxy", - "incrementalSync": "Sincronização Incremental (minutos)", - "incrementalSyncPlaceholder": "Ex: 300", - "enabledDescription": "Determina se esta conta está ativa. Se desativada, nenhuma sincronização relacionada será executada.", + "downloadInterval": "Intervalo de download (minutos)", + "downloadIntervalPlaceholder": "Insira os minutos", + "enabledDescription": "Determina se esta conta está ativa. Se desativada, os downloads relacionados não serão executados.", "dateSince": "Data de Início da Sincronização", "none": "Nenhum", "fixed": "Fixo", diff --git a/web/src/locales/ru.json b/web/src/locales/ru.json index 295469b..f57c045 100644 --- a/web/src/locales/ru.json +++ b/web/src/locales/ru.json @@ -142,18 +142,17 @@ "systemVersion": "Версия системы" }, "accounts": { - "beforeRelativeValue": "Синхронизировать письма старее, чем {{value}} {{unit}} назад", - "sinceRelativeValue": "Синхронизировать письма за последние {{value}} {{unit}}", - "syncBatchSize": "Размер пакета синхронизации", - "syncBatchSizeDescription": "Количество сообщений, получаемых за один запрос IMAP", - "incrementalSyncDescription": "Частота инкрементной синхронизации почты (в минутах)", - "syncScope": "Стратегия синхронизации", - "syncScopeDescription": "Выберите письма для индексации и архивации.", - "selectMode": "Выберите режим фильтрации", - "syncAll": "Синхронизировать все письма", + "beforeRelativeValue": "Скачать письма за {{value}} {{unit}} назад", + "sinceRelativeValue": "Скачать письма за последние", + "downloadBatchSize": "Размер пакета загрузки", + "downloadBatchSizeDescription": "Количество сообщений, получаемых за один IMAP-запрос", + "downloadScopeDescription": "Выберите, какие электронные письма должны быть проиндексированы и скачаны.", + "downloadScope": "Стратегия загрузки", + "selectMode": "Выберите режим фильтра", + "downloadAll": "Скачать все письма", "sinceFixed": "С определенной даты", - "sinceRelative": "Синхронизировать только новые письма", - "beforeRelative": "Архивировать только старые письма", + "sinceRelative": "Скачать только недавние письма", + "beforeRelative": "Скачать только старые письма", "duration": "Продолжительность", "unit": "Единица", "accessControl": "Контроль доступа", @@ -190,7 +189,9 @@ "noAccountConfigurations": "Нет настроек учетных записей", "noAccountConfigurationsDesc": "Вы еще не добавили ни одной конфигурации учетной записи. Добавьте одну, чтобы начать использовать функции аккаунта.", "addConfiguration": "Добавить конфигурацию", - "name": "Имя для входа", + "useNoProxy": "Без прокси", + "login_name": "Имя для входа", + "name": "Название аккаунта", "email": "Email", "status": "Статус", "type": "Тип", @@ -210,12 +211,12 @@ "updatedAt": "Обновлено", "openMenu": "Открыть меню", "emailAccountRegistration": "Регистрация почтового аккаунта", - "emailAccountRegistrationDesc": "Пожалуйста, укажите ваш email. На следующих шагах вы настроите параметры IMAP/SMTP. Используя этот адрес, мы попытаемся автоматически получить адреса серверов SMTP/IMAP.", + "emailAccountRegistrationDesc": "Введите ваш адрес электронной почты. На следующих шагах вы настроите параметры IMAP. Мы используем этот адрес для автоматического определения настроек сервера IMAP.", "emailAddress": "Email адрес", "emailPlaceholder": "например, john.doe@example.com", "namePlaceholder": "например, john.doe", "optional": "Необязательно", - "nameDescription": "Имя пользователя для IMAP-подключения. Оставьте это поле пустым, если вы используете свой полный адрес электронной почты в качестве имени пользователя для подключения.", + "nameDescription": "Имя пользователя IMAP. По умолчанию email или свой вариант.", "emailCannotBeModified": "Адрес электронной почты нельзя изменить при редактировании.", "addAccount": "Добавить аккаунт", "updateAccount": "Обновить аккаунт", @@ -239,7 +240,6 @@ "accountDetails": "Детали аккаунта", "capabilities": "Возможности", "folderLimit": "Лимит папки", - "incrementalSyncInterval": "Интервал инкрементальной синхронизации", "everyMinutes": "каждые {{minutes}} мин.", "foldersConfiguredForSync": "{{count}} папок настроено для синхронизации", "foldersSelected": "{{count}} папок выбрано", @@ -259,9 +259,9 @@ "leaveEmptyToKeepExisting": "Оставьте пустым, чтобы сохранить существующий пароль, или введите новый для обновления.", "useProxy": "Использовать прокси", "selectProxy": "Выберите прокси", - "incrementalSync": "Инкрементальная синхронизация (минуты)", - "incrementalSyncPlaceholder": "например, 300", - "enabledDescription": "Определяет, активен ли этот аккаунт. Если отключено, связанные синхронизации не будут выполняться.", + "downloadInterval": "Интервал загрузки (мин.)", + "downloadIntervalPlaceholder": "Введите минуты", + "enabledDescription": "Определяет, активна ли эта учетная запись. Если она отключена, связанные загрузки не будут запускаться.", "dateSince": "Дата с", "none": "Нет", "fixed": "Фиксированная", diff --git a/web/src/locales/sv.json b/web/src/locales/sv.json index 4db171e..e02112c 100644 --- a/web/src/locales/sv.json +++ b/web/src/locales/sv.json @@ -142,18 +142,17 @@ "systemVersion": "Systemversion" }, "accounts": { - "beforeRelativeValue": "Synkronisera mejl från före {{value}} {{unit}} sedan", - "sinceRelativeValue": "Synkronisera mejl från de senaste {{value}} {{unit}}", - "syncBatchSize": "Batchstorlek för synk", - "syncBatchSizeDescription": "Antal meddelanden som hämtas per IMAP-förfrågan", - "incrementalSyncDescription": "Hur ofta inkrementell e-post-synkronisering utförs (i minuter)", - "syncScope": "Synkstrategi", - "syncScopeDescription": "Välj vilka e-postmeddelanden som ska indexeras och arkiveras.", + "beforeRelativeValue": "Ladda ner e-post från {{value}} {{unit}} sedan", + "sinceRelativeValue": "Ladda ner e-post från de senaste", + "downloadBatchSize": "Batchstorlek för nedladdning", + "downloadBatchSizeDescription": "Antal meddelanden som hämtas per IMAP-begäran", + "downloadScopeDescription": "Välj vilka e-postmeddelanden som ska indexeras och laddas ner.", + "downloadScope": "Nedladdningsstrategi", "selectMode": "Välj filterläge", - "syncAll": "Synkronisera alla mejl", - "sinceFixed": "Sedan ett specifikt datum", - "sinceRelative": "Synka endast nyligen inkomna mejl", - "beforeRelative": "Arkivera endast gamla mejl", + "downloadAll": "Ladda ner alla e-postmeddelanden", + "sinceFixed": "Sedan specifikt datum", + "sinceRelative": "Ladda ner endast senaste e-postmeddelanden", + "beforeRelative": "Ladda ner endast gamla e-postmeddelanden", "duration": "Varaktighet", "unit": "Enhet", "accessControl": "Åtkomstkontroll", @@ -190,7 +189,9 @@ "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.", "addConfiguration": "Lägg till konfiguration", - "name": "Inloggningsnamn", + "useNoProxy": "Ingen proxy", + "login_name": "Inloggningsnamn", + "name": "Kontonamn", "email": "E-post", "status": "Status", "type": "Typ", @@ -210,12 +211,12 @@ "updatedAt": "Uppdaterad", "openMenu": "Öppna meny", "emailAccountRegistration": "Registrering av e-postkonto", - "emailAccountRegistrationDesc": "Ange din e-postadress. I nästa steg kommer du att konfigurera IMAP/SMTP-uppgifter. Vi försöker hämta SMTP/IMAP-serveradresserna automatiskt med hjälp av denna e-postadress.", + "emailAccountRegistrationDesc": "Ange din e-postadress. I nästa steg konfigurerar du IMAP-inställningar. Vi använder denna adress för att automatiskt upptäcka IMAP-serverinställningar.", "emailAddress": "E-postadress", "emailPlaceholder": "t.ex. sven.svensson@exempel.se", "namePlaceholder": "t.ex. sven.svensson", "optional": "Valfritt", - "nameDescription": "IMAP-anslutningsanvändarnamn. Lämna detta fält tomt om du använder din fullständiga e-postadress som anslutningsanvändarnamn.", + "nameDescription": "IMAP-användarnamn. Förvalt är din e-post, eller ange ett valfritt.", "emailCannotBeModified": "Kontots e-postadress kan inte ändras vid redigering.", "addAccount": "Lägg till konto", "updateAccount": "Uppdatera konto", @@ -239,7 +240,6 @@ "accountDetails": "Kontodetaljer", "capabilities": "Funktioner", "folderLimit": "Mappgräns", - "incrementalSyncInterval": "Intervall för inkrementell synkronisering", "everyMinutes": "varje {{minutes}} minut", "foldersConfiguredForSync": "{{count}} mapp(ar) konfigurerade för synk", "foldersSelected": "{{count}} mapp(ar) valda", @@ -259,9 +259,9 @@ "leaveEmptyToKeepExisting": "Lämna tomt för att behålla det befintliga lösenordet, eller ange ett nytt för att uppdatera det.", "useProxy": "Använd Proxy", "selectProxy": "Välj en proxy", - "incrementalSync": "Inkrementell synk (minuter)", - "incrementalSyncPlaceholder": "t.ex. 300", - "enabledDescription": "Avgör om detta konto är aktivt. Om inaktiverat kommer relaterade synkroniseringar inte att köras.", + "downloadInterval": "Nedladdningsintervall (minuter)", + "downloadIntervalPlaceholder": "Ange minuter", + "enabledDescription": "Avgör om det här kontot är aktivt. Om det är inaktiverat kommer relaterade nedladdningar inte att köras.", "dateSince": "Datum från", "none": "Ingen", "fixed": "Fast", diff --git a/web/src/locales/zh-tw.json b/web/src/locales/zh-tw.json index 49db406..c2eb175 100644 --- a/web/src/locales/zh-tw.json +++ b/web/src/locales/zh-tw.json @@ -142,18 +142,17 @@ "systemVersion": "系統版本" }, "accounts": { - "beforeRelativeValue": "同步 {{value}} {{unit}} 之前的郵件", - "sinceRelativeValue": "同步最近 {{value}} {{unit}} 內的郵件", - "syncBatchSize": "批次同步數量", - "syncBatchSizeDescription": "每次 IMAP 請求獲取的郵件數量", - "incrementalSyncDescription": "執行增量郵件同步的頻率(分鐘)", - "syncScope": "同步策略", - "syncScopeDescription": "選擇哪些郵件需要被索引和歸檔。", + "beforeRelativeValue": "下載 {{value}} {{unit}} 之前的郵件", + "sinceRelativeValue": "下載最近一段時期的郵件", + "downloadBatchSize": "下載批量大小", + "downloadBatchSizeDescription": "每個 IMAP 請求獲取的郵件數量", + "downloadScopeDescription": "選擇哪些郵件應被索引和下載。", + "downloadScope": "下載策略", "selectMode": "選擇過濾模式", - "syncAll": "同步所有郵件", - "sinceFixed": "從特定日期開始 (至今)", - "sinceRelative": "僅同步最近的郵件", - "beforeRelative": "僅封存舊郵件", + "downloadAll": "下載所有郵件", + "sinceFixed": "自特定日期起", + "sinceRelative": "僅下載最近郵件", + "beforeRelative": "僅下載舊郵件", "duration": "時長", "unit": "單位", "accessControl": "訪問控制", @@ -190,7 +189,9 @@ "noAccountConfigurations": "沒有帳號設定", "noAccountConfigurationsDesc": "您尚未新增任何帳號設定。請新增設定以使用功能。", "addConfiguration": "新增設定", - "name": "登入名稱", + "useNoProxy": "不使用代理", + "login_name": "登入名稱", + "name": "帳戶名稱", "email": "電子郵件", "status": "狀態", "type": "類型", @@ -210,12 +211,12 @@ "updatedAt": "更新時間", "openMenu": "開啟選單", "emailAccountRegistration": "電子郵件帳號註冊", - "emailAccountRegistrationDesc": "請輸入您的電子郵件地址。下一步您將設定 IMAP/SMTP 詳細資訊。我們將嘗試使用您輸入的電子郵件地址自動取得 IMAP/SMTP 伺服器位址。", + "emailAccountRegistrationDesc": "請輸入您的電子郵件地址。在接下來的步驟中,您將設定 IMAP 詳細資訊。我們將使用此地址自動偵測 IMAP 伺服器設定。", "emailAddress": "電子郵件地址", - "emailPlaceholder": "例如:john.doe@example.com", - "namePlaceholder": "例如:john.doe", + "emailPlaceholder": "例如:john.doe@example.com", + "namePlaceholder": "例如:john.doe", "optional": "選填", - "nameDescription": "IMAP 連線使用者名稱。如果您使用完整的電子郵件地址作為連線使用者名稱,請將此欄位留空。", + "nameDescription": "IMAP 使用者名稱。預設為電子郵件,也可在此自訂。", "emailCannotBeModified": "編輯時無法修改電子郵件帳號地址。", "addAccount": "新增帳號", "updateAccount": "更新帳號", @@ -239,7 +240,6 @@ "accountDetails": "帳號詳細資訊", "capabilities": "功能", "folderLimit": "資料夾限制", - "incrementalSyncInterval": "增量同步間隔", "everyMinutes": "每 {{minutes}} 分鐘", "foldersConfiguredForSync": "已設定同步的資料夾:{{count}} 個", "foldersSelected": "已選資料夾:{{count}} 個", @@ -259,9 +259,9 @@ "leaveEmptyToKeepExisting": "保留現有密碼請留空。若要更新,請輸入新密碼。", "useProxy": "使用代理", "selectProxy": "選擇代理", - "incrementalSync": "增量同步 (分鐘)", - "incrementalSyncPlaceholder": "例如:300", - "enabledDescription": "決定此帳號是否啟用。如果停用,將不會執行相關同步。", + "downloadInterval": "下載週期 (分鐘)", + "downloadIntervalPlaceholder": "請輸入分鐘數", + "enabledDescription": "確定此帳戶是否處於活動狀態。如果禁用,相關的下載任務將不會運行。", "dateSince": "同步起始日期", "none": "無", "fixed": "固定", diff --git a/web/src/locales/zh.json b/web/src/locales/zh.json index fb61062..df11254 100644 --- a/web/src/locales/zh.json +++ b/web/src/locales/zh.json @@ -142,18 +142,17 @@ "systemVersion": "系统版本" }, "accounts": { - "beforeRelativeValue": "同步 {{value}} {{unit}} 之前的邮件", - "sinceRelativeValue": "同步最近 {{value}} {{unit}} 内的邮件", - "syncBatchSize": "批次同步数量", - "syncBatchSizeDescription": "每次 IMAP 请求获取的邮件数量", - "incrementalSyncDescription": "执行增量邮件同步的频率(分钟)", - "syncScope": "同步策略", - "syncScopeDescription": "选择哪些邮件需要被索引和归档。", + "beforeRelativeValue": "下载 {{value}} {{unit}} 之前的邮件", + "sinceRelativeValue": "下载最近一段时期的邮件", + "downloadBatchSize": "下载批量大小", + "downloadBatchSizeDescription": "每个 IMAP 请求获取的邮件数量", + "downloadScopeDescription": "选择哪些邮件应被索引和下载。", + "downloadScope": "下载策略", "selectMode": "选择过滤模式", - "syncAll": "同步所有邮件", - "sinceFixed": "从特定日期开始 (至今)", - "sinceRelative": "仅同步最近的邮件 (相对时间)", - "beforeRelative": "仅同步旧邮件", + "downloadAll": "下载所有邮件", + "sinceFixed": "自特定日期起", + "sinceRelative": "仅下载最近邮件", + "beforeRelative": "仅下载旧邮件", "duration": "时长", "unit": "单位", "accessControl": "访问控制", @@ -190,7 +189,9 @@ "noAccountConfigurations": "无账户配置", "noAccountConfigurationsDesc": "您尚未添加任何账户配置。添加一个以开始使用账户功能。", "addConfiguration": "添加配置", - "name": "登录名", + "useNoProxy": "不使用代理", + "login_name": "登录名", + "name": "账户名称", "email": "邮箱", "status": "状态", "type": "类型", @@ -210,12 +211,12 @@ "updatedAt": "更新时间", "openMenu": "打开菜单", "emailAccountRegistration": "邮件账户注册", - "emailAccountRegistrationDesc": "请输入您的邮箱地址。在接下来的步骤中,您将配置 IMAP/SMTP 详细信息。我们将使用此邮箱地址尝试自动获取 SMTP/IMAP 服务器地址。", + "emailAccountRegistrationDesc": "请输入您的邮箱地址。在接下来的步骤中,您将配置 IMAP 相关信息。我们将使用该邮箱地址尝试自动获取 IMAP 服务器配置。", "emailAddress": "邮箱地址", - "emailPlaceholder": "例如:john.doe@example.com", - "namePlaceholder": "例如:john.doe", + "emailPlaceholder": "例如:john.doe@example.com", + "namePlaceholder": "例如:john.doe", "optional": "可选", - "nameDescription": "IMAP 连接用户名。如果您使用完整的电子邮件地址作为连接用户名,请将此字段留空。", + "nameDescription": "IMAP 用户名。默认使用邮箱地址,也可在此自定义。", "emailCannotBeModified": "编辑时无法修改邮箱账户地址。", "addAccount": "添加账户", "updateAccount": "更新账户", @@ -239,14 +240,13 @@ "accountDetails": "账户详情", "capabilities": "功能", "folderLimit": "文件夹限制", - "incrementalSyncInterval": "增量同步间隔", "everyMinutes": "每 {{minutes}} 分钟", "foldersConfiguredForSync": "已配置 {{count}} 个文件夹用于同步", "foldersSelected": "已选择 {{count}} 个文件夹", "imapHost": "IMAP 主机", - "imapHostPlaceholder": "例如:imap.example.com", + "imapHostPlaceholder": "例如:imap.example.com", "imapPort": "IMAP 端口", - "imapPortPlaceholder": "例如:993", + "imapPortPlaceholder": "例如:993", "imapEncryption": "IMAP 加密", "selectEncryptionMethod": "选择加密方法", "chooseEncryptionMethod": "选择 IMAP 的加密方法。", @@ -259,9 +259,9 @@ "leaveEmptyToKeepExisting": "留空以保持现有密码,或输入新密码进行更新。", "useProxy": "使用代理", "selectProxy": "选择代理", - "incrementalSync": "增量同步(分钟)", - "incrementalSyncPlaceholder": "例如:300", - "enabledDescription": "确定此账户是否处于活动状态。如果禁用,相关同步将不会运行。", + "downloadInterval": "下载周期 (分钟)", + "downloadIntervalPlaceholder": "请输入分钟数", + "enabledDescription": "确定此账户是否处于活动状态。如果禁用,相关的下载任务将不会运行。", "dateSince": "起始日期", "none": "无", "fixed": "固定",