Хуйня не на tauri

This commit is contained in:
loki5512344 2026-07-06 01:06:43 +03:00
parent e895fe3237
commit 403d7086d4
104 changed files with 8941 additions and 4772 deletions

159
src/i18n/mod.rs Normal file
View file

@ -0,0 +1,159 @@
//! Локализация интерфейса. Иммедиэйт-мод UI перерисовывается целиком каждый
//! кадр на главном потоке, поэтому вместо протаскивания языка через сигнатуры
//! всех функций рендера — один глобальный атомик с текущим языком плюс
//! функция [`t`] для поиска перевода по ключу. Переводы лежат в `strings/*`,
//! по одному файлу на область интерфейса, и собираются в одну таблицу лениво.
mod strings;
use std::collections::HashMap;
use std::sync::OnceLock;
use std::sync::atomic::{AtomicU8, Ordering};
/// Порядок вариантов — он же порядок колонок в каждом `[&str; N]` из `strings/*`.
#[derive(Clone, Copy, PartialEq, Eq, Debug)]
pub enum Lang {
En,
Ru,
Es,
Fr,
De,
It,
Pt,
Pl,
Zh,
Ja,
Ko,
Tr,
}
pub const COUNT: usize = 12;
impl Lang {
pub const ALL: [Lang; COUNT] = [
Lang::En,
Lang::Ru,
Lang::Es,
Lang::Fr,
Lang::De,
Lang::It,
Lang::Pt,
Lang::Pl,
Lang::Zh,
Lang::Ja,
Lang::Ko,
Lang::Tr,
];
pub fn index(self) -> usize {
self as usize
}
fn from_index(i: u8) -> Lang {
Self::ALL.get(i as usize).copied().unwrap_or(Lang::En)
}
/// Код языка — используется для хранения выбора в БД (Settings) и для
/// определения стартового языка по локали ОС.
pub fn code(self) -> &'static str {
match self {
Lang::En => "en",
Lang::Ru => "ru",
Lang::Es => "es",
Lang::Fr => "fr",
Lang::De => "de",
Lang::It => "it",
Lang::Pt => "pt",
Lang::Pl => "pl",
Lang::Zh => "zh",
Lang::Ja => "ja",
Lang::Ko => "ko",
Lang::Tr => "tr",
}
}
pub fn from_code(code: &str) -> Option<Lang> {
Self::ALL.into_iter().find(|l| l.code() == code)
}
/// Название языка на нём самом — так его узнают в списке выбора, даже не
/// зная текущего языка интерфейса.
pub fn native_name(self) -> &'static str {
match self {
Lang::En => "English",
Lang::Ru => "Русский",
Lang::Es => "Español",
Lang::Fr => "Français",
Lang::De => "Deutsch",
Lang::It => "Italiano",
Lang::Pt => "Português",
Lang::Pl => "Polski",
Lang::Zh => "简体中文",
Lang::Ja => "日本語",
Lang::Ko => "한국어",
Lang::Tr => "Türkçe",
}
}
/// Есть ли у языка глифы вне Latin/Cyrillic, для которых системный SF Pro
/// не подходит — тогда `visuals::system_fonts` подмешивает CJK-шрифт.
pub fn needs_cjk_font(self) -> bool {
matches!(self, Lang::Zh | Lang::Ja | Lang::Ko)
}
}
static CURRENT: AtomicU8 = AtomicU8::new(0); // Lang::En
pub fn current() -> Lang {
Lang::from_index(CURRENT.load(Ordering::Relaxed))
}
pub fn set_lang(lang: Lang) {
CURRENT.store(lang.index() as u8, Ordering::Relaxed);
}
/// Язык ОС на старте (до первой загрузки из БД) — грубое сопоставление по
/// первым двум буквам `LANG`/локали; неизвестное всегда откатывается на English.
pub fn detect_system_lang() -> Lang {
let raw = std::env::var("LANG").unwrap_or_default();
let code = raw.split(['_', '.', '-']).next().unwrap_or("");
Lang::from_code(code).unwrap_or(Lang::En)
}
type Table = HashMap<&'static str, [&'static str; COUNT]>;
static TABLE: OnceLock<Table> = OnceLock::new();
fn table() -> &'static Table {
TABLE.get_or_init(|| {
let mut m = HashMap::with_capacity(1024);
for &(key, values) in strings::all_entries() {
if m.insert(key, values).is_some() {
debug_assert!(false, "duplicate i18n key: {key}");
}
}
m
})
}
/// Перевод по ключу на текущий язык. Отсутствующий ключ возвращает сам ключ —
/// это специально заметно в UI (и в debug-сборке паникует), чтобы пропущенный
/// перевод не потерялся молча.
pub fn t(key: &'static str) -> &'static str {
match table().get(key) {
Some(values) => values[current().index()],
None => {
debug_assert!(false, "missing i18n key: {key}");
key
}
}
}
/// [`t`] с подстановкой значений вместо плейсхолдеров вида `{name}` — для
/// строк с динамическим содержимым (имя файла, хост и т.п.), которое не может
/// быть частью статической таблицы переводов.
pub fn tf(key: &'static str, pairs: &[(&str, &str)]) -> String {
let mut s = t(key).to_string();
for (placeholder, value) in pairs {
s = s.replace(placeholder, value);
}
s
}

240
src/i18n/strings/common.rs Normal file
View file

@ -0,0 +1,240 @@
//! Общие термины, повторяющиеся в разных экранах (кнопки, поля форм) —
//! вынесены отдельно от контекста, чтобы не переводить одно и то же слово
//! по три раза с риском разойтись в формулировках.
use super::Entry;
pub const ENTRIES: &[Entry] = &[
(
"common.cancel",
[
"Cancel", "Отмена", "Cancelar", "Annuler", "Abbrechen", "Annulla", "Cancelar",
"Anuluj", "取消", "キャンセル", "취소", "İptal",
],
),
(
"common.ok",
[
"OK", "ОК", "Aceptar", "OK", "OK", "OK", "OK", "OK", "确定", "OK", "확인", "Tamam",
],
),
(
"common.delete",
[
"Delete", "Удалить", "Eliminar", "Supprimer", "Löschen", "Elimina", "Excluir",
"Usuń", "删除", "削除", "삭제", "Sil",
],
),
(
"common.rename",
[
"Rename",
"Переименовать",
"Renombrar",
"Renommer",
"Umbenennen",
"Rinomina",
"Renomear",
"Zmień nazwę",
"重命名",
"名前を変更",
"이름 바꾸기",
"Yeniden Adlandır",
],
),
(
"common.edit",
[
"Edit", "Изменить", "Editar", "Modifier", "Bearbeiten", "Modifica", "Editar",
"Edytuj", "编辑", "編集", "편집", "Düzenle",
],
),
(
"common.save",
[
"Save", "Сохранить", "Guardar", "Enregistrer", "Speichern", "Salva", "Salvar",
"Zapisz", "保存", "保存", "저장", "Kaydet",
],
),
(
"common.open",
[
"Open", "Открыть", "Abrir", "Ouvrir", "Öffnen", "Apri", "Abrir", "Otwórz", "打开",
"開く", "열기", "Aç",
],
),
(
"common.close",
[
"Close", "Закрыть", "Cerrar", "Fermer", "Schließen", "Chiudi", "Fechar", "Zamknij",
"关闭", "閉じる", "닫기", "Kapat",
],
),
(
"common.copy_path",
[
"Copy Path",
"Скопировать путь",
"Copiar ruta",
"Copier le chemin",
"Pfad kopieren",
"Copia percorso",
"Copiar caminho",
"Kopiuj ścieżkę",
"复制路径",
"パスをコピー",
"경로 복사",
"Yolu Kopyala",
],
),
(
"common.new_folder",
[
"New Folder",
"Новая папка",
"Nueva carpeta",
"Nouveau dossier",
"Neuer Ordner",
"Nuova cartella",
"Nova pasta",
"Nowy folder",
"新建文件夹",
"新規フォルダ",
"새 폴더",
"Yeni Klasör",
],
),
(
"common.connect",
[
"Connect", "Подключить", "Conectar", "Connecter", "Verbinden", "Connetti",
"Conectar", "Połącz", "连接", "接続", "연결", "Bağlan",
],
),
(
"common.connecting",
[
"Connecting…",
"Подключение…",
"Conectando…",
"Connexion…",
"Verbinde…",
"Connessione…",
"Conectando…",
"Łączenie…",
"正在连接…",
"接続中…",
"연결 중…",
"Bağlanıyor…",
],
),
(
"common.host",
[
"Host", "Хост", "Host", "Hôte", "Host", "Host", "Host", "Host", "主机", "ホスト",
"호스트", "Sunucu",
],
),
(
"common.username",
[
"Username",
"Имя пользователя",
"Usuario",
"Nom d'utilisateur",
"Benutzername",
"Nome utente",
"Usuário",
"Nazwa użytkownika",
"用户名",
"ユーザー名",
"사용자 이름",
"Kullanıcı Adı",
],
),
(
"common.password",
[
"Password", "Пароль", "Contraseña", "Mot de passe", "Passwort", "Password", "Senha",
"Hasło", "密码", "パスワード", "비밀번호", "Parola",
],
),
(
"common.port",
[
"Port", "Порт", "Puerto", "Port", "Port", "Porta", "Porta", "Port", "端口", "ポート",
"포트", "Port",
],
),
(
"common.label",
[
"Label", "Метка", "Etiqueta", "Étiquette", "Bezeichnung", "Etichetta", "Rótulo",
"Etykieta", "标签", "ラベル", "라벨", "Etiket",
],
),
(
"common.refresh",
[
"Refresh", "Обновить", "Actualizar", "Actualiser", "Aktualisieren", "Aggiorna",
"Atualizar", "Odśwież", "刷新", "更新", "새로고침", "Yenile",
],
),
(
"common.upload",
[
"Upload", "Загрузить", "Subir", "Envoyer", "Hochladen", "Carica", "Enviar",
"Prześlij", "上传", "アップロード", "업로드", "Yükle",
],
),
(
"common.download",
[
"Download", "Скачать", "Descargar", "Télécharger", "Herunterladen", "Scarica",
"Baixar", "Pobierz", "下载", "ダウンロード", "다운로드", "İndir",
],
),
(
"common.settings",
[
"Settings",
"Настройки",
"Configuración",
"Paramètres",
"Einstellungen",
"Impostazioni",
"Configurações",
"Ustawienia",
"设置",
"設定",
"설정",
"Ayarlar",
],
),
(
"common.history",
[
"History", "История", "Historial", "Historique", "Verlauf", "Cronologia",
"Histórico", "Historia", "历史记录", "履歴", "기록", "Geçmiş",
],
),
(
"common.search",
[
"Search", "Поиск", "Buscar", "Rechercher", "Suchen", "Cerca", "Pesquisar", "Szukaj",
"搜索", "検索", "검색", "Ara",
],
),
(
"common.yes",
[
"Yes", "Да", "Sí", "Oui", "Ja", "Sì", "Sim", "Tak", "是", "はい", "예", "Evet",
],
),
(
"common.no",
[
"No", "Нет", "No", "Non", "Nein", "No", "Não", "Nie", "否", "いいえ", "아니요",
"Hayır",
],
),
];

233
src/i18n/strings/dialogs.rs Normal file
View file

@ -0,0 +1,233 @@
//! Диалог New Connection, модалки New Folder/Delete/Rename, ошибки формы.
use super::Entry;
pub const ENTRIES: &[Entry] = &[
(
"dialogs.ssh_key_hint",
[
"Leave empty to sign in with an SSH key (agent or ~/.ssh).",
"Оставьте пустым для входа по SSH-ключу (агент или ~/.ssh).",
"Déjalo vacío para iniciar sesión con una clave SSH (agente o ~/.ssh).",
"Laissez vide pour vous connecter avec une clé SSH (agent ou ~/.ssh).",
"Leer lassen, um sich mit einem SSH-Schlüssel anzumelden (Agent oder ~/.ssh).",
"Lascia vuoto per accedere con una chiave SSH (agente o ~/.ssh).",
"Deixe em branco para entrar com uma chave SSH (agente ou ~/.ssh).",
"Pozostaw puste, aby zalogować się kluczem SSH (agent lub ~/.ssh).",
"留空以使用 SSH 密钥登录(代理或 ~/.ssh)。",
"SSH 鍵でサインインする場合は空欄のままにしてください(エージェントまたは ~/.ssh)。",
"SSH 키로 로그인하려면 비워 두세요(에이전트 또는 ~/.ssh).",
"SSH anahtarıyla oturum açmak için boş bırakın (aracı veya ~/.ssh).",
],
),
(
"dialogs.key_file_label",
[
"Key file (optional)",
"Файл ключа (необязательно)",
"Archivo de clave (opcional)",
"Fichier de clé (facultatif)",
"Schlüsseldatei (optional)",
"File chiave (opzionale)",
"Arquivo de chave (opcional)",
"Plik klucza (opcjonalnie)",
"密钥文件(可选)",
"鍵ファイル(任意)",
"키 파일(선택 사항)",
"Anahtar dosyası (isteğe bağlı)",
],
),
(
"dialogs.browse",
[
"Browse…", "Обзор…", "Examinar…", "Parcourir…", "Durchsuchen…", "Sfoglia…",
"Procurar…", "Przeglądaj…", "浏览…", "参照…", "찾아보기…", "Gözat…",
],
),
(
"dialogs.choose_ssh_key_title",
[
"Choose SSH key",
"Выбор SSH-ключа",
"Elegir clave SSH",
"Choisir la clé SSH",
"SSH-Schlüssel auswählen",
"Scegli chiave SSH",
"Escolher chave SSH",
"Wybierz klucz SSH",
"选择 SSH 密钥",
"SSH 鍵を選択",
"SSH 키 선택",
"SSH Anahtarı Seç",
],
),
(
"dialogs.label_optional",
[
"Label (optional)",
"Метка (необязательно)",
"Etiqueta (opcional)",
"Étiquette (facultatif)",
"Bezeichnung (optional)",
"Etichetta (opzionale)",
"Rótulo (opcional)",
"Etykieta (opcjonalnie)",
"标签(可选)",
"ラベル(任意)",
"라벨(선택 사항)",
"Etiket (isteğe bağlı)",
],
),
(
"dialogs.confirm_delete_title",
[
"Delete \"{name}\"?",
"Удалить «{name}»?",
"¿Eliminar \"{name}\"?",
"Supprimer « {name} » ?",
"„{name}\" löschen?",
"Eliminare \"{name}\"?",
"Excluir \"{name}\"?",
"Usunąć „{name}\"?",
"删除\u{201c}{name}\u{201d}?",
"「{name}」を削除しますか?",
"\"{name}\"을(를) 삭제하시겠습니까?",
"\"{name}\" silinsin mi?",
],
),
(
"dialogs.cannot_undo",
[
"This action cannot be undone.",
"Это действие необратимо.",
"Esta acción no se puede deshacer.",
"Cette action est irréversible.",
"Diese Aktion kann nicht rückgängig gemacht werden.",
"Questa azione non può essere annullata.",
"Esta ação não pode ser desfeita.",
"Tej operacji nie można cofnąć.",
"此操作无法撤销。",
"この操作は元に戻せません。",
"이 작업은 되돌릴 수 없습니다.",
"Bu işlem geri alınamaz.",
],
),
(
"errors.host_required",
[
"Host is required.",
"Укажите хост.",
"El host es obligatorio.",
"L'hôte est requis.",
"Host ist erforderlich.",
"L'host è obbligatorio.",
"O host é obrigatório.",
"Host jest wymagany.",
"请输入主机地址。",
"ホストを入力してください。",
"호스트를 입력해야 합니다.",
"Sunucu adresi gerekli.",
],
),
(
"errors.username_required",
[
"Username is required.",
"Укажите имя пользователя.",
"El usuario es obligatorio.",
"Le nom d'utilisateur est requis.",
"Benutzername ist erforderlich.",
"Il nome utente è obbligatorio.",
"O nome de usuário é obrigatório.",
"Nazwa użytkownika jest wymagana.",
"请输入用户名。",
"ユーザー名を入力してください。",
"사용자 이름을 입력해야 합니다.",
"Kullanıcı adı gerekli.",
],
),
(
"errors.port_invalid",
[
"Port must be a number between 1 and 65535.",
"Порт должен быть числом от 1 до 65535.",
"El puerto debe ser un número entre 1 y 65535.",
"Le port doit être un nombre compris entre 1 et 65535.",
"Der Port muss eine Zahl zwischen 1 und 65535 sein.",
"La porta deve essere un numero compreso tra 1 e 65535.",
"A porta deve ser um número entre 1 e 65535.",
"Port musi być liczbą od 1 do 65535.",
"端口必须是 1 到 65535 之间的数字。",
"ポートは 1〜65535 の数値で指定してください。",
"포트는 1에서 65535 사이의 숫자여야 합니다.",
"Port 1 ile 65535 arasında bir sayı olmalıdır.",
],
),
(
"errors.ftps_not_implemented",
[
"FTPS not yet implemented",
"FTPS пока не реализован",
"FTPS aún no está implementado",
"FTPS pas encore pris en charge",
"FTPS ist noch nicht implementiert",
"FTPS non ancora implementato",
"FTPS ainda não implementado",
"FTPS nie jest jeszcze obsługiwany",
"尚未实现 FTPS",
"FTPS はまだ実装されていません",
"FTPS는 아직 구현되지 않았습니다",
"FTPS henüz uygulanmadı",
],
),
(
"errors.ftp_password_required",
[
"Password is required for FTP connections.",
"Для подключения по FTP требуется пароль.",
"Se requiere una contraseña para las conexiones FTP.",
"Un mot de passe est requis pour les connexions FTP.",
"Für FTP-Verbindungen ist ein Passwort erforderlich.",
"È richiesta una password per le connessioni FTP.",
"É necessária uma senha para conexões FTP.",
"Połączenia FTP wymagają hasła.",
"FTP 连接需要密码。",
"FTP 接続にはパスワードが必要です。",
"FTP 연결에는 비밀번호가 필요합니다.",
"FTP bağlantıları için parola gereklidir.",
],
),
(
"welcome.tagline",
[
"FTP/SFTP client",
"FTP/SFTP-клиент",
"Cliente FTP/SFTP",
"Client FTP/SFTP",
"FTP/SFTP-Client",
"Client FTP/SFTP",
"Cliente FTP/SFTP",
"Klient FTP/SFTP",
"FTP/SFTP 客户端",
"FTP/SFTP クライアント",
"FTP/SFTP 클라이언트",
"FTP/SFTP İstemcisi",
],
),
(
"welcome.recent_connections",
[
"RECENT CONNECTIONS",
"НЕДАВНИЕ ПОДКЛЮЧЕНИЯ",
"CONEXIONES RECIENTES",
"CONNEXIONS RÉCENTES",
"LETZTE VERBINDUNGEN",
"CONNESSIONI RECENTI",
"CONEXÕES RECENTES",
"OSTATNIE POŁĄCZENIA",
"最近的连接",
"最近の接続",
"최근 연결",
"SON BAĞLANTILAR",
],
),
];

3
src/i18n/strings/menu.rs Normal file
View file

@ -0,0 +1,3 @@
use super::Entry;
pub const ENTRIES: &[Entry] = &[];

23
src/i18n/strings/mod.rs Normal file
View file

@ -0,0 +1,23 @@
//! Таблицы переводов, разбитые по областям интерфейса — так проще найти и
//! проверить перевод конкретного экрана, чем в одном файле на тысячу строк.
//! Порядок колонок в каждом `[&str; 12]`: en, ru, es, fr, de, it, pt, pl, zh, ja, ko, tr.
mod common;
mod dialogs;
mod menu;
mod panels;
mod settings;
mod toolbar;
mod welcome;
type Entry = (&'static str, [&'static str; super::COUNT]);
pub fn all_entries() -> impl Iterator<Item = &'static Entry> {
common::ENTRIES
.iter()
.chain(toolbar::ENTRIES.iter())
.chain(panels::ENTRIES.iter())
.chain(settings::ENTRIES.iter())
.chain(dialogs::ENTRIES.iter())
.chain(welcome::ENTRIES.iter())
.chain(menu::ENTRIES.iter())
}

538
src/i18n/strings/panels.rs Normal file
View file

@ -0,0 +1,538 @@
//! Сайдбар, локальная/удалённая панели, таблица файлов.
use super::Entry;
pub const ENTRIES: &[Entry] = &[
(
"panels.local_label",
[
"LOCAL", "ЛОКАЛЬНО", "LOCAL", "LOCAL", "LOKAL", "LOCALE", "LOCAL", "LOKALNE", "本地",
"ローカル", "로컬", "YEREL",
],
),
(
"panels.remote_label",
[
"REMOTE · {host}",
"УДАЛЁННО · {host}",
"REMOTO · {host}",
"DISTANT · {host}",
"REMOTE · {host}",
"REMOTO · {host}",
"REMOTO · {host}",
"ZDALNE · {host}",
"远程 · {host}",
"リモート · {host}",
"원격 · {host}",
"UZAK · {host}",
],
),
(
"panels.loading",
[
"Loading…",
"Загрузка…",
"Cargando…",
"Chargement…",
"Wird geladen…",
"Caricamento…",
"Carregando…",
"Ładowanie…",
"加载中…",
"読み込み中…",
"로딩 중…",
"Yükleniyor…",
],
),
(
"panels.count_items",
[
"{n} items",
"{n} объектов",
"{n} elementos",
"{n} éléments",
"{n} Elemente",
"{n} elementi",
"{n} itens",
"{n} elementów",
"{n} 项",
"{n} 件",
"{n}개 항목",
"{n} öğe",
],
),
(
"panels.col_name",
[
"Name", "Имя", "Nombre", "Nom", "Name", "Nome", "Nome", "Nazwa", "名称", "名前",
"이름", "Ad",
],
),
(
"panels.col_modified",
[
"Modified",
"Изменён",
"Modificado",
"Modifié",
"Geändert",
"Modificato",
"Modificado",
"Zmodyfikowano",
"修改时间",
"更新日時",
"수정됨",
"Değiştirilme",
],
),
(
"panels.col_type",
[
"Type", "Тип", "Tipo", "Type", "Typ", "Tipo", "Tipo", "Typ", "类型", "種類", "유형",
"Tür",
],
),
(
"panels.col_size",
[
"Size", "Размер", "Tamaño", "Taille", "Größe", "Dimensione", "Tamanho", "Rozmiar",
"大小", "サイズ", "크기", "Boyut",
],
),
(
"panels.type_dir",
[
"Dir", "Папка", "Carpeta", "Dossier", "Ordner", "Cartella", "Pasta", "Folder",
"文件夹", "フォルダ", "폴더", "Klasör",
],
),
(
"panels.type_file",
[
"File", "Файл", "Archivo", "Fichier", "Datei", "File", "Arquivo", "Plik", "文件",
"ファイル", "파일", "Dosya",
],
),
(
"panels.type_link",
[
"Link", "Ссылка", "Enlace", "Lien", "Link", "Collegamento", "Link", "Link", "链接",
"リンク", "링크", "Bağlantı",
],
),
(
"panels.path_copied",
[
"Path copied",
"Путь скопирован",
"Ruta copiada",
"Chemin copié",
"Pfad kopiert",
"Percorso copiato",
"Caminho copiado",
"Skopiowano ścieżkę",
"路径已复制",
"パスをコピーしました",
"경로가 복사되었습니다",
"Yol kopyalandı",
],
),
(
"panels.sidebar.drives",
[
"DRIVES", "ДИСКИ", "UNIDADES", "DISQUES", "LAUFWERKE", "UNITÀ", "UNIDADES", "DYSKI",
"磁盘", "ドライブ", "드라이브", "SÜRÜCÜLER",
],
),
(
"panels.sidebar.root_label",
[
"/ (root)",
"/ (корень)",
"/ (raíz)",
"/ (racine)",
"/ (Wurzel)",
"/ (radice)",
"/ (raiz)",
"/ (główny)",
"/ (根目录)",
"/ (ルート)",
"/ (루트)",
"/ (kök)",
],
),
(
"panels.sidebar.bookmarks",
[
"BOOKMARKS",
"ЗАКЛАДКИ",
"MARCADORES",
"FAVORIS",
"LESEZEICHEN",
"PREFERITI",
"FAVORITOS",
"ZAKŁADKI",
"书签",
"ブックマーク",
"북마크",
"YER İMLERİ",
],
),
(
"panels.sidebar.remove_bookmark",
[
"Remove bookmark",
"Удалить закладку",
"Quitar marcador",
"Supprimer le favori",
"Lesezeichen entfernen",
"Rimuovi preferito",
"Remover favorito",
"Usuń zakładkę",
"移除书签",
"ブックマークを削除",
"북마크 제거",
"Yer imini kaldır",
],
),
(
"panels.sidebar.qa_home",
[
"Home", "Домой", "Inicio", "Accueil", "Start", "Home", "Início", "Dom", "主目录",
"ホーム", "홈", "Ana Sayfa",
],
),
(
"panels.sidebar.qa_desktop",
[
"Desktop",
"Рабочий стол",
"Escritorio",
"Bureau",
"Schreibtisch",
"Scrivania",
"Área de Trabalho",
"Pulpit",
"桌面",
"デスクトップ",
"바탕화면",
"Masaüstü",
],
),
(
"panels.sidebar.qa_documents",
[
"Documents", "Документы", "Documentos", "Documents", "Dokumente", "Documenti",
"Documentos", "Dokumenty", "文稿", "書類", "문서", "Belgeler",
],
),
(
"panels.sidebar.qa_downloads",
[
"Downloads",
"Загрузки",
"Descargas",
"Téléchargements",
"Downloads",
"Download",
"Downloads",
"Pobrane",
"下载",
"ダウンロード",
"다운로드",
"İndirilenler",
],
),
(
"panels.sidebar.qa_pictures",
[
"Pictures", "Изображения", "Imágenes", "Images", "Bilder", "Immagini", "Imagens",
"Obrazy", "图片", "ピクチャ", "사진", "Resimler",
],
),
(
"panels.sidebar.qa_music",
[
"Music", "Музыка", "Música", "Musique", "Musik", "Musica", "Música", "Muzyka",
"音乐", "ミュージック", "음악", "Müzik",
],
),
(
"panels.sidebar.qa_videos",
[
"Videos", "Видео", "Vídeos", "Vidéos", "Videos", "Video", "Vídeos", "Filmy", "影片",
"ムービー", "동영상", "Videolar",
],
),
(
"panels.sidebar.bookmark_this_folder",
[
"Bookmark this folder",
"Добавить папку в закладки",
"Marcar esta carpeta",
"Ajouter ce dossier aux favoris",
"Diesen Ordner als Lesezeichen speichern",
"Aggiungi cartella ai preferiti",
"Adicionar pasta aos favoritos",
"Dodaj folder do zakładek",
"将此文件夹加入书签",
"このフォルダをブックマーク",
"이 폴더 북마크",
"Bu klasörü yer imlerine ekle",
],
),
(
"panels.local.error",
[
"Local error: {err}",
"Локальная ошибка: {err}",
"Error local: {err}",
"Erreur locale : {err}",
"Lokaler Fehler: {err}",
"Errore locale: {err}",
"Erro local: {err}",
"Błąd lokalny: {err}",
"本地错误:{err}",
"ローカルエラー: {err}",
"로컬 오류: {err}",
"Yerel hata: {err}",
],
),
(
"panels.local.add_to_bookmarks",
[
"Add to Bookmarks",
"Добавить в закладки",
"Añadir a marcadores",
"Ajouter aux favoris",
"Zu Lesezeichen hinzufügen",
"Aggiungi ai preferiti",
"Adicionar aos favoritos",
"Dodaj do zakładek",
"添加到书签",
"ブックマークに追加",
"북마크에 추가",
"Yer İmlerine Ekle",
],
),
(
"panels.local.upload_to_server",
[
"Upload to Server",
"Загрузить на сервер",
"Subir al servidor",
"Envoyer vers le serveur",
"Auf Server hochladen",
"Carica sul server",
"Enviar para o servidor",
"Wyślij na serwer",
"上传到服务器",
"サーバーへアップロード",
"서버에 업로드",
"Sunucuya Yükle",
],
),
(
"panels.local.conn_inactive",
[
"Connection no longer active",
"Подключение больше не активно",
"La conexión ya no está activa",
"La connexion n'est plus active",
"Verbindung ist nicht mehr aktiv",
"La connessione non è più attiva",
"A conexão não está mais ativa",
"Połączenie już nieaktywne",
"连接已失效",
"接続は無効になりました",
"연결이 더 이상 활성 상태가 아닙니다",
"Bağlantı artık etkin değil",
],
),
(
"panels.local.moved",
[
"Moved {name}",
"Перемещено: {name}",
"Movido: {name}",
"Déplacé : {name}",
"Verschoben: {name}",
"Spostato: {name}",
"Movido: {name}",
"Przeniesiono: {name}",
"已移动:{name}",
"移動しました: {name}",
"이동됨: {name}",
"Taşındı: {name}",
],
),
(
"panels.local.move_failed",
[
"Move failed: {err}",
"Не удалось переместить: {err}",
"Error al mover: {err}",
"Échec du déplacement : {err}",
"Verschieben fehlgeschlagen: {err}",
"Spostamento non riuscito: {err}",
"Falha ao mover: {err}",
"Nie udało się przenieść: {err}",
"移动失败:{err}",
"移動に失敗しました: {err}",
"이동 실패: {err}",
"Taşıma başarısız: {err}",
],
),
(
"panels.local.opening",
[
"Opening {name}",
"Открывается {name}",
"Abriendo {name}",
"Ouverture de {name}",
"{name} wird geöffnet",
"Apertura di {name}",
"Abrindo {name}",
"Otwieranie {name}",
"正在打开 {name}",
"{name} を開いています",
"{name} 여는 중",
"{name} açılıyor",
],
),
(
"panels.local.open_failed",
[
"Open failed: {err}",
"Не удалось открыть: {err}",
"Error al abrir: {err}",
"Échec de l'ouverture : {err}",
"Öffnen fehlgeschlagen: {err}",
"Apertura non riuscita: {err}",
"Falha ao abrir: {err}",
"Nie udało się otworzyć: {err}",
"打开失败:{err}",
"開くのに失敗しました: {err}",
"열기 실패: {err}",
"Açma başarısız: {err}",
],
),
(
"panels.local.already_bookmarked",
[
"Already bookmarked",
"Уже в закладках",
"Ya está en marcadores",
"Déjà dans les favoris",
"Bereits als Lesezeichen gespeichert",
"Già nei preferiti",
"Já está nos favoritos",
"Już w zakładkach",
"已在书签中",
"既にブックマーク済みです",
"이미 북마크됨",
"Zaten yer imlerinde",
],
),
(
"panels.local.bookmark_added",
[
"Bookmark added",
"Закладка добавлена",
"Marcador añadido",
"Favori ajouté",
"Lesezeichen hinzugefügt",
"Preferito aggiunto",
"Favorito adicionado",
"Dodano zakładkę",
"已添加书签",
"ブックマークを追加しました",
"북마크 추가됨",
"Yer imi eklendi",
],
),
(
"panels.local.bookmark_failed",
[
"Bookmark failed: {err}",
"Не удалось добавить закладку: {err}",
"Error al añadir marcador: {err}",
"Échec de l'ajout du favori : {err}",
"Lesezeichen fehlgeschlagen: {err}",
"Aggiunta ai preferiti non riuscita: {err}",
"Falha ao adicionar favorito: {err}",
"Nie udało się dodać zakładki: {err}",
"添加书签失败:{err}",
"ブックマークの追加に失敗しました: {err}",
"북마크 추가 실패: {err}",
"Yer imi eklenemedi: {err}",
],
),
(
"panels.remote.no_active_connection",
[
"No active connection",
"Нет активного подключения",
"Sin conexión activa",
"Aucune connexion active",
"Keine aktive Verbindung",
"Nessuna connessione attiva",
"Nenhuma conexão ativa",
"Brak aktywnego połączenia",
"没有活动连接",
"アクティブな接続がありません",
"활성 연결이 없습니다",
"Etkin bağlantı yok",
],
),
(
"panels.remote.cannot_move_cross_connection",
[
"Cannot move between different connections",
"Нельзя перемещать между разными подключениями",
"No se puede mover entre conexiones diferentes",
"Impossible de déplacer entre différentes connexions",
"Verschieben zwischen unterschiedlichen Verbindungen nicht möglich",
"Impossibile spostare tra connessioni diverse",
"Não é possível mover entre conexões diferentes",
"Nie można przenosić między różnymi połączeniami",
"无法在不同连接之间移动",
"異なる接続間では移動できません",
"서로 다른 연결 간에는 이동할 수 없습니다",
"Farklı bağlantılar arasında taşınamaz",
],
),
(
"panels.remote.moving",
[
"Moving {name}…",
"Перемещение {name}…",
"Moviendo {name}…",
"Déplacement de {name}…",
"{name} wird verschoben…",
"Spostamento di {name}…",
"Movendo {name}…",
"Przenoszenie {name}…",
"正在移动 {name}…",
"{name} を移動中…",
"{name} 이동 중…",
"{name} taşınıyor…",
],
),
(
"panels.remote.download_to_local",
[
"Download to Local",
"Скачать локально",
"Descargar a local",
"Télécharger en local",
"Lokal herunterladen",
"Scarica in locale",
"Baixar para local",
"Pobierz lokalnie",
"下载到本地",
"ローカルへダウンロード",
"로컬로 다운로드",
"Yerele İndir",
],
),
];

View file

@ -0,0 +1,831 @@
//! Диалог Settings: навигация и разделы (General/Appearance/Connections/
//! History/Security/Transfers/About).
use super::Entry;
pub const ENTRIES: &[Entry] = &[
// ── Заголовок диалога и навигация ───────────────────────────────────
(
"settings.title",
[
"Settings",
"Настройки",
"Configuración",
"Paramètres",
"Einstellungen",
"Impostazioni",
"Configurações",
"Ustawienia",
"设置",
"設定",
"설정",
"Ayarlar",
],
),
(
"settings.nav.group_general",
[
"GENERAL", "ОБЩЕЕ", "GENERAL", "GÉNÉRAL", "ALLGEMEIN", "GENERALE", "GERAL", "OGÓLNE",
"通用", "一般", "일반", "GENEL",
],
),
(
"settings.nav.group_connections",
[
"CONNECTIONS",
"ПОДКЛЮЧЕНИЯ",
"CONEXIONES",
"CONNEXIONS",
"VERBINDUNGEN",
"CONNESSIONI",
"CONEXÕES",
"POŁĄCZENIA",
"连接",
"接続",
"연결",
"BAĞLANTILAR",
],
),
(
"settings.nav.group_transfers",
[
"TRANSFERS",
"ПЕРЕДАЧИ",
"TRANSFERENCIAS",
"TRANSFERTS",
"ÜBERTRAGUNGEN",
"TRASFERIMENTI",
"TRANSFERÊNCIAS",
"TRANSFERY",
"传输",
"転送",
"전송",
"AKTARIMLAR",
],
),
(
"settings.nav.group_about",
[
"ABOUT", "О ПРОГРАММЕ", "ACERCA DE", "À PROPOS", "ÜBER", "INFORMAZIONI", "SOBRE",
"O PROGRAMIE", "关于", "情報", "정보", "HAKKINDA",
],
),
(
"settings.nav.general",
[
"General", "Общие", "General", "Général", "Allgemein", "Generale", "Geral", "Ogólne",
"通用", "一般", "일반", "Genel",
],
),
(
"settings.nav.appearance",
[
"Appearance",
"Внешний вид",
"Apariencia",
"Apparence",
"Erscheinungsbild",
"Aspetto",
"Aparência",
"Wygląd",
"外观",
"外観",
"외관",
"Görünüm",
],
),
(
"settings.nav.connections",
[
"Sites & Bookmarks",
"Сайты и закладки",
"Sitios y marcadores",
"Sites et favoris",
"Seiten & Lesezeichen",
"Siti e preferiti",
"Sites e favoritos",
"Serwery i zakładki",
"站点与书签",
"サイトとブックマーク",
"사이트 및 북마크",
"Siteler ve Yer İmleri",
],
),
(
"settings.nav.history",
[
"History", "История", "Historial", "Historique", "Verlauf", "Cronologia",
"Histórico", "Historia", "历史记录", "履歴", "기록", "Geçmiş",
],
),
(
"settings.nav.security",
[
"Security",
"Безопасность",
"Seguridad",
"Sécurité",
"Sicherheit",
"Sicurezza",
"Segurança",
"Bezpieczeństwo",
"安全",
"セキュリティ",
"보안",
"Güvenlik",
],
),
(
"settings.nav.transfers",
[
"Transfers",
"Передачи",
"Transferencias",
"Transferts",
"Übertragungen",
"Trasferimenti",
"Transferências",
"Transfery",
"传输",
"転送",
"전송",
"Aktarımlar",
],
),
(
"settings.nav.about",
[
"About", "О программе", "Acerca de", "À propos", "Über", "Informazioni", "Sobre",
"O programie", "关于", "情報", "정보", "Hakkında",
],
),
// ── General ──────────────────────────────────────────────────────────
(
"settings.general.confirm_delete",
[
"Confirm before deleting files",
"Подтверждать перед удалением файлов",
"Confirmar antes de eliminar archivos",
"Confirmer avant de supprimer des fichiers",
"Vor dem Löschen von Dateien bestätigen",
"Conferma prima di eliminare i file",
"Confirmar antes de excluir arquivos",
"Potwierdzaj przed usunięciem plików",
"删除文件前进行确认",
"ファイル削除前に確認する",
"파일 삭제 전 확인",
"Dosyaları silmeden önce onayla",
],
),
(
"settings.general.confirm_delete_hint",
[
"Show a confirmation dialog before deleting local or remote files.",
"Показывать диалог подтверждения перед удалением локальных или удалённых файлов.",
"Muestra un cuadro de confirmación antes de eliminar archivos locales o remotos.",
"Afficher une boîte de dialogue de confirmation avant de supprimer des fichiers locaux ou distants.",
"Zeigt vor dem Löschen lokaler oder entfernter Dateien einen Bestätigungsdialog an.",
"Mostra una finestra di conferma prima di eliminare file locali o remoti.",
"Mostra uma caixa de confirmação antes de excluir arquivos locais ou remotos.",
"Wyświetla okno potwierdzenia przed usunięciem plików lokalnych lub zdalnych.",
"删除本地或远程文件前显示确认对话框。",
"ローカルまたはリモートのファイルを削除する前に確認ダイアログを表示します。",
"로컬 또는 원격 파일을 삭제하기 전에 확인 대화 상자를 표시합니다.",
"Yerel veya uzak dosyaları silmeden önce bir onay penceresi gösterir.",
],
),
(
"settings.general.startup_folder",
[
"Startup folder",
"Стартовая папка",
"Carpeta de inicio",
"Dossier de démarrage",
"Startordner",
"Cartella di avvio",
"Pasta inicial",
"Folder startowy",
"启动文件夹",
"起動時のフォルダ",
"시작 폴더",
"Başlangıç klasörü",
],
),
(
"settings.general.startup_folder_hint",
[
"Local pane opens here when LoFlum starts.",
"Локальная панель будет открываться здесь при запуске LoFlum.",
"El panel local se abrirá aquí al iniciar LoFlum.",
"Le panneau local s'ouvrira ici au démarrage de LoFlum.",
"Der lokale Bereich wird hier geöffnet, wenn LoFlum startet.",
"Il pannello locale si aprirà qui all'avvio di LoFlum.",
"O painel local abrirá aqui quando o LoFlum iniciar.",
"Panel lokalny otworzy się tutaj po uruchomieniu LoFlum.",
"LoFlum 启动时,本地面板将在此处打开。",
"LoFlum 起動時にローカルパネルがここで開きます。",
"LoFlum을 시작하면 로컬 패널이 여기에서 열립니다.",
"LoFlum başlatıldığında yerel panel burada açılır.",
],
),
(
"settings.general.home_directory",
[
"Home directory",
"Домашняя папка",
"Directorio personal",
"Dossier personnel",
"Home-Verzeichnis",
"Cartella Home",
"Diretório inicial",
"Katalog domowy",
"主目录",
"ホームディレクトリ",
"홈 디렉터리",
"Ana dizin",
],
),
(
"settings.general.use_current_folder",
[
"Use Current Folder",
"Использовать текущую папку",
"Usar carpeta actual",
"Utiliser le dossier actuel",
"Aktuellen Ordner verwenden",
"Usa cartella corrente",
"Usar pasta atual",
"Użyj bieżącego folderu",
"使用当前文件夹",
"現在のフォルダを使用",
"현재 폴더 사용",
"Geçerli Klasörü Kullan",
],
),
(
"settings.general.reset_to_home",
[
"Reset to Home",
"Сбросить на домашнюю",
"Restablecer a inicio",
"Réinitialiser au dossier personnel",
"Auf Home zurücksetzen",
"Ripristina su Home",
"Redefinir para inicial",
"Przywróć domyślny",
"重置为主目录",
"ホームにリセット",
"홈으로 재설정",
"Ana Dizine Sıfırla",
],
),
(
"settings.general.language",
[
"Language", "Язык", "Idioma", "Langue", "Sprache", "Lingua", "Idioma", "Język", "语言",
"言語", "언어", "Dil",
],
),
(
"settings.general.language_hint",
[
"Interface language.",
"Язык интерфейса.",
"Idioma de la interfaz.",
"Langue de l'interface.",
"Sprache der Benutzeroberfläche.",
"Lingua dell'interfaccia.",
"Idioma da interface.",
"Język interfejsu.",
"界面语言。",
"インターフェースの言語。",
"인터페이스 언어.",
"Arayüz dili.",
],
),
// ── Appearance ───────────────────────────────────────────────────────
(
"settings.appearance.hint",
[
"Choose which panels are visible in the main window.",
"Выберите, какие панели отображать в главном окне.",
"Elige qué paneles son visibles en la ventana principal.",
"Choisissez les panneaux visibles dans la fenêtre principale.",
"Wählen Sie, welche Bereiche im Hauptfenster sichtbar sind.",
"Scegli quali pannelli sono visibili nella finestra principale.",
"Escolha quais painéis ficam visíveis na janela principal.",
"Wybierz, które panele są widoczne w oknie głównym.",
"选择主窗口中显示哪些面板。",
"メインウィンドウに表示するパネルを選択します。",
"메인 창에 표시할 패널을 선택하세요.",
"Ana penceredeki hangi panellerin görüneceğini seçin.",
],
),
(
"settings.appearance.toolbar",
[
"Toolbar",
"Панель инструментов",
"Barra de herramientas",
"Barre d'outils",
"Symbolleiste",
"Barra degli strumenti",
"Barra de ferramentas",
"Pasek narzędzi",
"工具栏",
"ツールバー",
"도구 모음",
"Araç Çubuğu",
],
),
(
"settings.appearance.sidebar",
[
"Sidebar", "Боковая панель", "Barra lateral", "Barre latérale", "Seitenleiste",
"Barra laterale", "Barra lateral", "Pasek boczny", "侧边栏", "サイドバー", "사이드바",
"Kenar Çubuğu",
],
),
(
"settings.appearance.status_bar",
[
"Status bar",
"Строка состояния",
"Barra de estado",
"Barre d'état",
"Statusleiste",
"Barra di stato",
"Barra de status",
"Pasek stanu",
"状态栏",
"ステータスバー",
"상태 표시줄",
"Durum Çubuğu",
],
),
(
"settings.appearance.transfer_queue",
[
"Transfer queue",
"Очередь передач",
"Cola de transferencias",
"File d'attente des transferts",
"Übertragungswarteschlange",
"Coda dei trasferimenti",
"Fila de transferências",
"Kolejka transferów",
"传输队列",
"転送キュー",
"전송 대기열",
"Aktarım Kuyruğu",
],
),
// ── Connections (Sites & Bookmarks) ─────────────────────────────────
(
"settings.connections.sites",
[
"Sites", "Сайты", "Sitios", "Sites", "Seiten", "Siti", "Sites", "Serwery", "站点",
"サイト", "사이트", "Siteler",
],
),
(
"settings.connections.no_sites",
[
"No saved sites yet. Save one from the connection history.",
"Пока нет сохранённых сайтов. Сохраните один из истории подключений.",
"Aún no hay sitios guardados. Guarda uno desde el historial de conexiones.",
"Aucun site enregistré pour l'instant. Enregistrez-en un depuis l'historique des connexions.",
"Noch keine gespeicherten Seiten. Speichern Sie eine aus dem Verbindungsverlauf.",
"Nessun sito salvato. Salvane uno dalla cronologia delle connessioni.",
"Ainda não há sites salvos. Salve um a partir do histórico de conexões.",
"Brak zapisanych serwerów. Zapisz jeden z historii połączeń.",
"尚无已保存的站点。可从连接历史记录中保存一个。",
"保存済みのサイトはまだありません。接続履歴から保存してください。",
"저장된 사이트가 아직 없습니다. 연결 기록에서 저장해 보세요.",
"Henüz kayıtlı site yok. Bağlantı geçmişinden bir tane kaydedin.",
],
),
(
"settings.connections.delete_site_hover",
[
"Delete site",
"Удалить сайт",
"Eliminar sitio",
"Supprimer le site",
"Seite löschen",
"Elimina sito",
"Excluir site",
"Usuń serwer",
"删除站点",
"サイトを削除",
"사이트 삭제",
"Siteyi sil",
],
),
(
"settings.connections.removed_site",
[
"Removed site \"{name}\"",
"Сайт «{name}» удалён",
"Sitio \"{name}\" eliminado",
"Site « {name} » supprimé",
"Seite „{name}\" entfernt",
"Sito \"{name}\" rimosso",
"Site \"{name}\" removido",
"Usunięto serwer „{name}\"",
"已删除站点\u{201c}{name}\u{201d}",
"サイト「{name}」を削除しました",
"사이트 \"{name}\" 삭제됨",
"\"{name}\" sitesi kaldırıldı",
],
),
(
"settings.connections.bookmarks_title",
[
"Bookmarks", "Закладки", "Marcadores", "Favoris", "Lesezeichen", "Preferiti",
"Favoritos", "Zakładki", "书签", "ブックマーク", "북마크", "Yer İmleri",
],
),
(
"settings.connections.no_bookmarks",
[
"No bookmarks yet. Star a folder in the local pane.",
"Пока нет закладок. Отметьте папку звёздочкой в локальной панели.",
"Aún no hay marcadores. Marca una carpeta con una estrella en el panel local.",
"Aucun favori pour l'instant. Ajoutez une étoile à un dossier dans le panneau local.",
"Noch keine Lesezeichen. Markieren Sie einen Ordner im lokalen Bereich mit einem Stern.",
"Nessun preferito. Contrassegna una cartella con una stella nel pannello locale.",
"Ainda não há favoritos. Marque uma pasta com estrela no painel local.",
"Brak zakładek. Oznacz folder gwiazdką w panelu lokalnym.",
"尚无书签。在本地面板中为文件夹加星标即可。",
"ブックマークはまだありません。ローカルパネルでフォルダにスターを付けてください。",
"북마크가 아직 없습니다. 로컬 패널에서 폴더에 별표를 지정하세요.",
"Henüz yer imi yok. Yerel paneldeki bir klasörü yıldızlayın.",
],
),
(
"settings.connections.bookmark_removed",
[
"Bookmark removed",
"Закладка удалена",
"Marcador eliminado",
"Favori supprimé",
"Lesezeichen entfernt",
"Preferito rimosso",
"Favorito removido",
"Usunięto zakładkę",
"已移除书签",
"ブックマークを削除しました",
"북마크 제거됨",
"Yer imi kaldırıldı",
],
),
// ── History ──────────────────────────────────────────────────────────
(
"settings.history.title",
[
"Connection History",
"История подключений",
"Historial de conexiones",
"Historique des connexions",
"Verbindungsverlauf",
"Cronologia connessioni",
"Histórico de conexões",
"Historia połączeń",
"连接历史记录",
"接続履歴",
"연결 기록",
"Bağlantı Geçmişi",
],
),
(
"settings.history.empty",
[
"No history yet.",
"Пока нет истории.",
"Aún no hay historial.",
"Aucun historique pour l'instant.",
"Noch kein Verlauf.",
"Nessuna cronologia.",
"Ainda não há histórico.",
"Brak historii.",
"暂无历史记录。",
"履歴はまだありません。",
"아직 기록이 없습니다.",
"Henüz geçmiş yok.",
],
),
(
"settings.history.confirm_clear",
[
"Delete all connection history? This cannot be undone.",
"Удалить всю историю подключений? Это действие необратимо.",
"¿Eliminar todo el historial de conexiones? Esta acción no se puede deshacer.",
"Supprimer tout l'historique des connexions ? Cette action est irréversible.",
"Gesamten Verbindungsverlauf löschen? Dies kann nicht rückgängig gemacht werden.",
"Eliminare tutta la cronologia delle connessioni? Questa azione non può essere annullata.",
"Excluir todo o histórico de conexões? Esta ação não pode ser desfeita.",
"Usunąć całą historię połączeń? Tej operacji nie można cofnąć.",
"删除全部连接历史记录?此操作无法撤销。",
"接続履歴をすべて削除しますか?この操作は元に戻せません。",
"모든 연결 기록을 삭제하시겠습니까? 이 작업은 되돌릴 수 없습니다.",
"Tüm bağlantı geçmişi silinsin mi? Bu işlem geri alınamaz.",
],
),
(
"settings.history.delete_all",
[
"Delete All", "Удалить всё", "Eliminar todo", "Tout supprimer", "Alles löschen",
"Elimina tutto", "Excluir tudo", "Usuń wszystko", "全部删除", "すべて削除",
"모두 삭제", "Tümünü Sil",
],
),
(
"settings.history.clear_all",
[
"Clear All History",
"Очистить всю историю",
"Borrar todo el historial",
"Effacer tout l'historique",
"Gesamten Verlauf löschen",
"Cancella tutta la cronologia",
"Limpar todo o histórico",
"Wyczyść całą historię",
"清除全部历史记录",
"すべての履歴を消去",
"전체 기록 지우기",
"Tüm Geçmişi Temizle",
],
),
(
"settings.history.cleared",
[
"History cleared",
"История очищена",
"Historial borrado",
"Historique effacé",
"Verlauf gelöscht",
"Cronologia cancellata",
"Histórico apagado",
"Wyczyszczono historię",
"历史记录已清除",
"履歴を消去しました",
"기록이 지워졌습니다",
"Geçmiş temizlendi",
],
),
// ── Security ─────────────────────────────────────────────────────────
(
"settings.security.hint",
[
"Passwords for saved connections are stored in your system keychain.",
"Пароли для сохранённых подключений хранятся в системной связке ключей.",
"Las contraseñas de las conexiones guardadas se almacenan en el llavero del sistema.",
"Les mots de passe des connexions enregistrées sont stockés dans le trousseau système.",
"Passwörter für gespeicherte Verbindungen werden im System-Schlüsselbund gespeichert.",
"Le password delle connessioni salvate sono conservate nel portachiavi di sistema.",
"As senhas das conexões salvas são armazenadas no chaveiro do sistema.",
"Hasła zapisanych połączeń są przechowywane w systemowym pęku kluczy.",
"已保存连接的密码存储在系统钥匙串中。",
"保存済み接続のパスワードはシステムのキーチェーンに保存されます。",
"저장된 연결의 비밀번호는 시스템 키체인에 저장됩니다.",
"Kayıtlı bağlantıların parolaları sistem anahtarlığında saklanır.",
],
),
(
"settings.security.no_connections",
[
"No saved connections.",
"Нет сохранённых подключений.",
"No hay conexiones guardadas.",
"Aucune connexion enregistrée.",
"Keine gespeicherten Verbindungen.",
"Nessuna connessione salvata.",
"Nenhuma conexão salva.",
"Brak zapisanych połączeń.",
"没有已保存的连接。",
"保存済みの接続はありません。",
"저장된 연결이 없습니다.",
"Kayıtlı bağlantı yok.",
],
),
(
"settings.security.forget_password_hover",
[
"Forget saved password",
"Забыть сохранённый пароль",
"Olvidar contraseña guardada",
"Oublier le mot de passe enregistré",
"Gespeichertes Passwort vergessen",
"Dimentica password salvata",
"Esquecer senha salva",
"Zapomnij zapisane hasło",
"忘记已保存的密码",
"保存済みのパスワードを削除",
"저장된 비밀번호 삭제",
"Kayıtlı parolayı unut",
],
),
(
"settings.security.password_forgotten",
[
"Password forgotten",
"Пароль забыт",
"Contraseña olvidada",
"Mot de passe oublié",
"Passwort vergessen",
"Password dimenticata",
"Senha esquecida",
"Zapomniano hasło",
"已忘记密码",
"パスワードを削除しました",
"비밀번호가 삭제되었습니다",
"Parola unutuldu",
],
),
(
"settings.security.forget_all",
[
"Forget All Saved Passwords",
"Забыть все сохранённые пароли",
"Olvidar todas las contraseñas guardadas",
"Oublier tous les mots de passe enregistrés",
"Alle gespeicherten Passwörter vergessen",
"Dimentica tutte le password salvate",
"Esquecer todas as senhas salvas",
"Zapomnij wszystkie zapisane hasła",
"忘记所有已保存的密码",
"保存済みのパスワードをすべて削除",
"저장된 모든 비밀번호 삭제",
"Kayıtlı Tüm Parolaları Unut",
],
),
(
"settings.security.all_forgotten",
[
"All saved passwords forgotten",
"Все сохранённые пароли забыты",
"Se olvidaron todas las contraseñas guardadas",
"Tous les mots de passe enregistrés ont été oubliés",
"Alle gespeicherten Passwörter wurden vergessen",
"Tutte le password salvate sono state dimenticate",
"Todas as senhas salvas foram esquecidas",
"Zapomniano wszystkie zapisane hasła",
"已忘记所有保存的密码",
"保存済みのパスワードをすべて削除しました",
"저장된 모든 비밀번호가 삭제되었습니다",
"Kayıtlı tüm parolalar unutuldu",
],
),
// ── Transfers ────────────────────────────────────────────────────────
(
"settings.transfers.concurrent_title",
[
"Concurrent transfers",
"Одновременные передачи",
"Transferencias simultáneas",
"Transferts simultanés",
"Gleichzeitige Übertragungen",
"Trasferimenti simultanei",
"Transferências simultâneas",
"Równoczesne transfery",
"并发传输数",
"同時転送数",
"동시 전송",
"Eşzamanlı Aktarımlar",
],
),
(
"settings.transfers.concurrent_hint",
[
"How many uploads/downloads can run at the same time.",
"Сколько загрузок/скачиваний может выполняться одновременно.",
"Cuántas subidas/descargas pueden ejecutarse al mismo tiempo.",
"Combien d'envois/téléchargements peuvent s'exécuter simultanément.",
"Wie viele Uploads/Downloads gleichzeitig laufen können.",
"Quanti caricamenti/download possono essere eseguiti contemporaneamente.",
"Quantos envios/downloads podem ser executados ao mesmo tempo.",
"Ile wysyłek/pobrań może działać jednocześnie.",
"可同时运行的上传/下载数量。",
"同時に実行できるアップロード/ダウンロードの数。",
"동시에 실행할 수 있는 업로드/다운로드 수입니다.",
"Aynı anda kaç yükleme/indirme çalışabileceği.",
],
),
(
"settings.transfers.auto_remove_title",
[
"Auto-remove completed transfers",
"Автоудаление завершённых передач",
"Eliminar automáticamente transferencias completadas",
"Suppression automatique des transferts terminés",
"Abgeschlossene Übertragungen automatisch entfernen",
"Rimuovi automaticamente i trasferimenti completati",
"Remover automaticamente transferências concluídas",
"Automatyczne usuwanie ukończonych transferów",
"自动移除已完成的传输",
"完了した転送を自動的に削除",
"완료된 전송 자동 제거",
"Tamamlanan Aktarımları Otomatik Kaldır",
],
),
(
"settings.transfers.auto_remove_hint",
[
"Clear finished transfers from the queue automatically.",
"Автоматически очищать завершённые передачи из очереди.",
"Elimina automáticamente las transferencias finalizadas de la cola.",
"Efface automatiquement les transferts terminés de la file d'attente.",
"Entfernt abgeschlossene Übertragungen automatisch aus der Warteschlange.",
"Rimuove automaticamente i trasferimenti terminati dalla coda.",
"Remove automaticamente as transferências concluídas da fila.",
"Automatycznie usuwa zakończone transfery z kolejki.",
"自动从队列中清除已完成的传输。",
"完了した転送をキューから自動的に消去します。",
"완료된 전송을 대기열에서 자동으로 지웁니다.",
"Tamamlanan aktarımları kuyruktan otomatik olarak temizler.",
],
),
(
"settings.transfers.never",
[
"Never", "Никогда", "Nunca", "Jamais", "Nie", "Mai", "Nunca", "Nigdy", "从不", "しない",
"안 함", "Asla",
],
),
(
"settings.transfers.10s",
[
"10s", "10с", "10s", "10s", "10 s", "10s", "10s", "10s", "10秒", "10秒", "10초", "10sn",
],
),
(
"settings.transfers.30s",
[
"30s", "30с", "30s", "30s", "30 s", "30s", "30s", "30s", "30秒", "30秒", "30초", "30sn",
],
),
(
"settings.transfers.1min",
[
"1 min", "1 мин", "1 min", "1 min", "1 Min", "1 min", "1 min", "1 min", "1分钟", "1分",
"1분", "1 dk",
],
),
// ── About ────────────────────────────────────────────────────────────
(
"settings.about.title",
[
"About LoFlum",
"О LoFlum",
"Acerca de LoFlum",
"À propos de LoFlum",
"Über LoFlum",
"Informazioni su LoFlum",
"Sobre o LoFlum",
"O programie LoFlum",
"关于 LoFlum",
"LoFlum について",
"LoFlum 정보",
"LoFlum Hakkında",
],
),
(
"settings.about.version",
[
"Version", "Версия", "Versión", "Version", "Version", "Versione", "Versão", "Wersja",
"版本", "バージョン", "버전", "Sürüm",
],
),
(
"settings.about.license",
[
"License", "Лицензия", "Licencia", "Licence", "Lizenz", "Licenza", "Licença",
"Licencja", "许可证", "ライセンス", "라이선스", "Lisans",
],
),
(
"settings.about.database",
[
"Database", "База данных", "Base de datos", "Base de données", "Datenbank",
"Database", "Banco de dados", "Baza danych", "数据库", "データベース", "데이터베이스",
"Veritabanı",
],
),
(
"settings.about.reveal_in_finder",
[
"Reveal in Finder",
"Показать в Finder",
"Mostrar en Finder",
"Afficher dans le Finder",
"Im Finder anzeigen",
"Mostra nel Finder",
"Mostrar no Finder",
"Pokaż w Finderze",
"在访达中显示",
"Finder で表示",
"Finder에서 보기",
"Finder'da Göster",
],
),
];

251
src/i18n/strings/toolbar.rs Normal file
View file

@ -0,0 +1,251 @@
//! Тулбар, попап History, статус-бар, панель очереди передач.
use super::Entry;
pub const ENTRIES: &[Entry] = &[
(
"toolbar.new_connection",
[
"New Connection",
"Новое подключение",
"Nueva conexión",
"Nouvelle connexion",
"Neue Verbindung",
"Nuova connessione",
"Nova conexão",
"Nowe połączenie",
"新建连接",
"新規接続",
"새 연결",
"Yeni Bağlantı",
],
),
(
"toolbar.queue_label",
[
"Queue", "Очередь", "Cola", "File d'attente", "Warteschlange", "Coda", "Fila",
"Kolejka", "队列", "キュー", "대기열", "Kuyruk",
],
),
(
"toolbar.upload_queued",
[
"Upload queued: {name}",
"Загрузка добавлена в очередь: {name}",
"Subida en cola: {name}",
"Envoi mis en file d'attente : {name}",
"Upload eingereiht: {name}",
"Caricamento in coda: {name}",
"Envio na fila: {name}",
"Wysyłanie dodane do kolejki: {name}",
"已加入上传队列:{name}",
"アップロードをキューに追加しました: {name}",
"업로드 대기열에 추가됨: {name}",
"Yükleme kuyruğa eklendi: {name}",
],
),
(
"toolbar.download_queued",
[
"Download queued: {name}",
"Скачивание добавлено в очередь: {name}",
"Descarga en cola: {name}",
"Téléchargement mis en file d'attente : {name}",
"Download eingereiht: {name}",
"Download in coda: {name}",
"Download na fila: {name}",
"Pobieranie dodane do kolejki: {name}",
"已加入下载队列:{name}",
"ダウンロードをキューに追加しました: {name}",
"다운로드 대기열에 추가됨: {name}",
"İndirme kuyruğa eklendi: {name}",
],
),
(
"history.recent_connections",
[
"Recent connections",
"Недавние подключения",
"Conexiones recientes",
"Connexions récentes",
"Letzte Verbindungen",
"Connessioni recenti",
"Conexões recentes",
"Ostatnie połączenia",
"最近的连接",
"最近の接続",
"최근 연결",
"Son Bağlantılar",
],
),
(
"history.no_history",
[
"No history yet",
"Пока нет истории",
"Aún no hay historial",
"Aucun historique pour l'instant",
"Noch kein Verlauf",
"Nessuna cronologia",
"Ainda não há histórico",
"Brak historii",
"暂无历史记录",
"履歴はまだありません",
"아직 기록이 없습니다",
"Henüz geçmiş yok",
],
),
(
"status.not_connected",
[
"Not connected",
"Не подключено",
"Sin conexión",
"Non connecté",
"Nicht verbunden",
"Non connesso",
"Não conectado",
"Brak połączenia",
"未连接",
"未接続",
"연결 안 됨",
"Bağlı değil",
],
),
(
"queue.title",
[
"Transfer Queue ({n})",
"Очередь передач ({n})",
"Cola de transferencias ({n})",
"File de transferts ({n})",
"Übertragungswarteschlange ({n})",
"Coda trasferimenti ({n})",
"Fila de transferências ({n})",
"Kolejka transferów ({n})",
"传输队列 ({n})",
"転送キュー ({n})",
"전송 대기열 ({n})",
"Aktarım Kuyruğu ({n})",
],
),
(
"queue.done_suffix",
[
"{done}/{total} done",
"{done}/{total} готово",
"{done}/{total} completado",
"{done}/{total} terminé",
"{done}/{total} fertig",
"{done}/{total} completato",
"{done}/{total} concluído",
"{done}/{total} gotowe",
"{done}/{total} 已完成",
"{done}/{total} 完了",
"{done}/{total} 완료",
"{done}/{total} tamamlandı",
],
),
(
"queue.failed_suffix",
[
"{n} failed",
"Ошибок: {n}",
"{n} con errores",
"{n} échoué(s)",
"{n} fehlgeschlagen",
"{n} falliti",
"{n} falharam",
"Błędów: {n}",
"{n} 个失败",
"失敗 {n} 件",
"실패 {n}개",
"{n} başarısız",
],
),
(
"queue.state_queued",
[
"Queued", "В очереди", "En cola", "En attente", "Wartend", "In coda", "Na fila",
"W kolejce", "排队中", "待機中", "대기 중", "Sırada",
],
),
(
"queue.state_uploading",
[
"Uploading",
"Загрузка…",
"Subiendo…",
"Envoi…",
"Wird hochgeladen…",
"Caricamento…",
"Enviando…",
"Wysyłanie…",
"上传中…",
"アップロード中…",
"업로드 중…",
"Yükleniyor…",
],
),
(
"queue.state_downloading",
[
"Downloading",
"Скачивание…",
"Descargando…",
"Téléchargement…",
"Wird heruntergeladen…",
"Download in corso…",
"Baixando…",
"Pobieranie…",
"下载中…",
"ダウンロード中…",
"다운로드 중…",
"İndiriliyor…",
],
),
(
"queue.state_complete",
[
"Complete", "Готово", "Completado", "Terminé", "Fertig", "Completato", "Concluído",
"Gotowe", "已完成", "完了", "완료", "Tamamlandı",
],
),
(
"queue.state_failed",
[
"Failed", "Ошибка", "Fallido", "Échec", "Fehlgeschlagen", "Non riuscito", "Falhou",
"Niepowodzenie", "失败", "失敗", "실패", "Başarısız",
],
),
(
"queue.state_paused",
[
"Paused", "Приостановлено", "Pausado", "En pause", "Pausiert", "In pausa", "Pausado",
"Wstrzymane", "已暂停", "一時停止", "일시 중지", "Duraklatıldı",
],
),
(
"queue.state_cancelled",
[
"Cancelled", "Отменено", "Cancelado", "Annulé", "Abgebrochen", "Annullato",
"Cancelado", "Anulowane", "已取消", "キャンセル済み", "취소됨", "İptal edildi",
],
),
(
"queue.state_retrying",
[
"Retrying",
"Повтор…",
"Reintentando…",
"Nouvelle tentative…",
"Erneuter Versuch…",
"Nuovo tentativo…",
"Tentando novamente…",
"Ponawianie…",
"正在重试…",
"再試行中…",
"재시도 중…",
"Yeniden deneniyor…",
],
),
];

View file

@ -0,0 +1,3 @@
use super::Entry;
pub const ENTRIES: &[Entry] = &[];