diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 77912a93..a03132f0 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -86,11 +86,6 @@ jobs: creds: ${{ secrets.AZURE_CREDENTIALS }} allow-no-subscriptions: true - - name: Fetch latest YARA rules - run: node scripts/fetch-yara-rules.js - env: - KUDU_RULES_URL: ${{ secrets.KUDU_RULES_URL || 'https://cloud.usekudu.com/api/yara-rules' }} - - name: Build, package, and upload shell: bash env: diff --git a/electron-builder.yml b/electron-builder.yml index 43cc6fec..46ce540a 100644 --- a/electron-builder.yml +++ b/electron-builder.yml @@ -22,10 +22,6 @@ extraResources: to: icons filter: - "**/*" - - from: resources/yara-rules - to: yara-rules - filter: - - "**/*.yar" win: target: diff --git a/package.json b/package.json index d9e7dfb4..8eb7ac07 100644 --- a/package.json +++ b/package.json @@ -7,12 +7,11 @@ "dev": "electron-vite dev", "build": "electron-vite build", "preview": "electron-vite preview", - "prefetch:rules": "node scripts/fetch-yara-rules.js", - "package": "npm run prefetch:rules && electron-vite build && electron-builder", - "package:win": "npm run prefetch:rules && electron-vite build && electron-builder --win", - "package:mac": "npm run prefetch:rules && electron-vite build && electron-builder --mac", - "package:linux": "npm run prefetch:rules && electron-vite build && electron-builder --linux", - "package:all": "npm run prefetch:rules && electron-vite build && electron-builder --win --mac --linux", + "package": "electron-vite build && electron-builder", + "package:win": "electron-vite build && electron-builder --win", + "package:mac": "electron-vite build && electron-builder --mac", + "package:linux": "electron-vite build && electron-builder --linux", + "package:all": "electron-vite build && electron-builder --win --mac --linux", "test": "vitest run", "test:watch": "vitest", "validate:rules": "npx tsx src/main/rules/validate.ts", diff --git a/scripts/fetch-yara-rules.js b/scripts/fetch-yara-rules.js index 2b3e0558..65a41087 100644 --- a/scripts/fetch-yara-rules.js +++ b/scripts/fetch-yara-rules.js @@ -9,8 +9,8 @@ * KUDU_RULES_URL=https://... node scripts/fetch-yara-rules.js * * If the API is unreachable, the script exits with code 0 and a warning — - * the build will succeed without bundled rules (the app still works via - * the regex fallback and will fetch rules from the cloud at runtime). + * the build will succeed without bundled rules (the app fetches rules + * from the cloud at runtime). */ const { writeFileSync, mkdirSync, existsSync, readdirSync, unlinkSync } = require('fs') diff --git a/src/main/ipc/malware-scanner.ipc.ts b/src/main/ipc/malware-scanner.ipc.ts index 241d1585..ddcaa66d 100644 --- a/src/main/ipc/malware-scanner.ipc.ts +++ b/src/main/ipc/malware-scanner.ipc.ts @@ -3,7 +3,7 @@ import { execFile } from 'child_process' import { promisify } from 'util' import { readFile, readdir, writeFile, stat, mkdir, rename, rm } from 'fs/promises' import { join, basename, extname, resolve, normalize } from 'path' -import { createHash, randomUUID } from 'crypto' +import { randomUUID } from 'crypto' import { IPC } from '../../shared/channels' import type { MalwareThreat, @@ -20,7 +20,7 @@ import { psUtf8, execNativeUtf8 } from '../services/exec-utf8' import { getSettings } from '../services/settings-store' import { isExcluded } from '../services/file-utils' import { createYaraEngine, yaraMatchToThreatFields, type YaraEngine } from '../services/yara-engine' -import { getAllRulePaths, getBundledRulePaths, getCachedRulePaths, getRulesMetadata, startPeriodicRuleChecks, fetchAndCacheRules, RULES_ENDPOINT } from '../services/yara-rules-store' +import { getAllRulePaths, getCachedRulePaths, getRulesMetadata, startPeriodicRuleChecks, fetchAndCacheRules, RULES_ENDPOINT } from '../services/yara-rules-store' const execFileAsync = promisify(execFile) const CLOUD_SERVER_URL = 'https://cloud.usekudu.com' @@ -63,137 +63,9 @@ async function writeManifest(manifest: Manifest): Promise { await writeFile(getManifestPath(), JSON.stringify(manifest, null, 2), 'utf-8') } -// ─── Known malware signature database ───────────────────────── -// Common adware, PUPs, crypto miners, and trojans by filename pattern -const KNOWN_MALWARE_PATTERNS: { - pattern: RegExp - name: string - severity: MalwareThreat['severity'] - details: string -}[] = [ - // Crypto miners - { pattern: /xmrig/i, name: 'CoinMiner.XMRig', severity: 'critical', details: 'XMRig cryptocurrency miner — uses CPU/GPU to mine Monero without consent' }, - { pattern: /cpuminer/i, name: 'CoinMiner.CPUMiner', severity: 'critical', details: 'CPU cryptocurrency miner process' }, - { pattern: /\bminerd\b/i, name: 'CoinMiner.Minerd', severity: 'critical', details: 'Minerd cryptocurrency mining daemon' }, - { pattern: /nicehashminer/i, name: 'CoinMiner.NiceHash', severity: 'high', details: 'NiceHash miner — potentially unwanted cryptocurrency mining software' }, - { pattern: /coinhive/i, name: 'CoinMiner.CoinHive', severity: 'high', details: 'CoinHive browser-based cryptocurrency miner' }, - - // Common adware / PUPs - { pattern: /bonzi\s*buddy/i, name: 'Adware.BonziBuddy', severity: 'medium', details: 'BonziBuddy adware — tracks browsing and displays ads' }, - { pattern: /ask\s*toolbar/i, name: 'PUP.AskToolbar', severity: 'medium', details: 'Ask Toolbar — browser hijacker that changes search engine' }, - { pattern: /conduit[\s_-]?(toolbar|search|engine)/i, name: 'PUP.Conduit', severity: 'medium', details: 'Conduit toolbar/search hijacker' }, - { pattern: /babylontoolbar/i, name: 'PUP.BabylonToolbar', severity: 'medium', details: 'Babylon Toolbar — browser hijacker' }, - { pattern: /mywebsearch/i, name: 'PUP.MyWebSearch', severity: 'medium', details: 'MyWebSearch toolbar — bundled adware' }, - { pattern: /incredibar/i, name: 'PUP.IncrediBar', severity: 'medium', details: 'IncrediBar toolbar — browser hijacker' }, - { pattern: /sweetim/i, name: 'PUP.SweetIM', severity: 'medium', details: 'SweetIM — adware bundled with instant messengers' }, - { pattern: /opencandy/i, name: 'PUP.OpenCandy', severity: 'medium', details: 'OpenCandy — installer-bundled adware' }, - { pattern: /installcore/i, name: 'PUP.InstallCore', severity: 'medium', details: 'InstallCore — PUP installer wrapper that bundles unwanted software' }, - { pattern: /softpulse/i, name: 'PUP.SoftPulse', severity: 'medium', details: 'SoftPulse download manager — bundles adware' }, - { pattern: /browsefox/i, name: 'Adware.BrowseFox', severity: 'medium', details: 'BrowseFox — injects ads into web pages' }, - { pattern: /crossrider/i, name: 'Adware.CrossRider', severity: 'medium', details: 'CrossRider — ad-injection browser extension platform' }, - { pattern: /wajam/i, name: 'Adware.Wajam', severity: 'high', details: 'Wajam — social search injector that intercepts HTTPS traffic' }, - { pattern: /superfish/i, name: 'Adware.Superfish', severity: 'critical', details: 'Superfish VisualDiscovery — MITM adware that installs root certificates' }, - - // Remote access trojans / backdoors - { pattern: /darkcomet/i, name: 'RAT.DarkComet', severity: 'critical', details: 'DarkComet remote access trojan' }, - { pattern: /njrat/i, name: 'RAT.njRAT', severity: 'critical', details: 'njRAT (Bladabindi) — remote access trojan' }, - { pattern: /nanocore/i, name: 'RAT.NanoCore', severity: 'critical', details: 'NanoCore RAT — remote access trojan' }, - { pattern: /quasar\.?rat/i, name: 'RAT.Quasar', severity: 'critical', details: 'Quasar RAT — open-source remote administration tool used maliciously' }, - { pattern: /asyncrat/i, name: 'RAT.AsyncRAT', severity: 'critical', details: 'AsyncRAT — remote access trojan' }, - { pattern: /poisonivy/i, name: 'RAT.PoisonIvy', severity: 'critical', details: 'Poison Ivy remote access trojan' }, - - // Keyloggers - { pattern: /hawkeye[\s_.-]?(keylog|reborn|stealer|rat)/i, name: 'Keylogger.HawkEye', severity: 'critical', details: 'HawkEye keylogger — steals credentials and logs keystrokes' }, - { pattern: /ardamax/i, name: 'Keylogger.Ardamax', severity: 'high', details: 'Ardamax keylogger — commercial keylogger often used maliciously' }, - - // Common trojans - { pattern: /emotet/i, name: 'Trojan.Emotet', severity: 'critical', details: 'Emotet banking trojan — steals financial data and drops other malware' }, - { pattern: /trickbot/i, name: 'Trojan.TrickBot', severity: 'critical', details: 'TrickBot banking trojan' }, - { pattern: /lokibot/i, name: 'Trojan.LokiBot', severity: 'critical', details: 'LokiBot — information stealer targeting passwords and crypto wallets' }, - { pattern: /formbook/i, name: 'Trojan.FormBook', severity: 'critical', details: 'FormBook — form-grabber and info stealer' }, - { pattern: /agenttesla/i, name: 'Trojan.AgentTesla', severity: 'critical', details: 'Agent Tesla — .NET-based info stealer and keylogger' }, - { pattern: /redline\s*stealer/i, name: 'Trojan.RedLine', severity: 'critical', details: 'RedLine Stealer — steals passwords, cookies, and crypto wallets' }, - { pattern: /raccoon\s*stealer/i, name: 'Trojan.Raccoon', severity: 'critical', details: 'Raccoon Stealer — MaaS info stealer' }, - { pattern: /vidar[\s_.-]?(stealer|malware|trojan|loader)/i, name: 'Trojan.Vidar', severity: 'critical', details: 'Vidar info stealer — exfiltrates browser data and cryptocurrency wallets' }, - - // Ransomware remnants (detection of config/note files, not the payload itself) - { pattern: /wannacry/i, name: 'Ransom.WannaCry', severity: 'critical', details: 'WannaCry ransomware component detected' }, - { pattern: /readme_for_decrypt/i, name: 'Ransom.Generic', severity: 'critical', details: 'Ransomware note file — indicates ransomware activity' }, - { pattern: /decrypt_instructions/i, name: 'Ransom.Generic', severity: 'critical', details: 'Ransomware instruction file detected' }, - { pattern: /your_files_are_encrypted/i, name: 'Ransom.Generic', severity: 'critical', details: 'Ransomware note detected' }, - - // macOS-specific malware - { pattern: /shlayer/i, name: 'OSX.Shlayer', severity: 'critical', details: 'Shlayer — most prevalent macOS malware, distributes adware via fake Flash updates' }, - { pattern: /pirrit/i, name: 'Adware.OSX.Pirrit', severity: 'high', details: 'OSX.Pirrit — adware that injects ads and proxies web traffic' }, - { pattern: /bundlore/i, name: 'Adware.OSX.Bundlore', severity: 'medium', details: 'Bundlore — macOS adware bundler' }, - { pattern: /adload/i, name: 'Adware.OSX.Adload', severity: 'high', details: 'Adload — persistent macOS adware that bypasses XProtect' }, - { pattern: /genieo/i, name: 'Adware.OSX.Genieo', severity: 'medium', details: 'Genieo — macOS browser hijacker and adware' }, - { pattern: /mackeeper/i, name: 'PUP.OSX.MacKeeper', severity: 'medium', details: 'MacKeeper — potentially unwanted "optimization" software with aggressive upselling' }, - { pattern: /xcsset/i, name: 'OSX.XCSSET', severity: 'critical', details: 'XCSSET — targets Xcode projects to spread, steals data from Safari and other apps' }, - { pattern: /silver[\s_-]?sparrow/i, name: 'OSX.SilverSparrow', severity: 'critical', details: 'Silver Sparrow — macOS malware targeting both M1 and Intel Macs' }, - { pattern: /atomic[\s_-]?stealer|amos[\s_-]?stealer/i, name: 'OSX.AtomicStealer', severity: 'critical', details: 'Atomic Stealer (AMOS) — macOS info stealer sold as malware-as-a-service' }, - { pattern: /\brealst\b/i, name: 'OSX.Realst', severity: 'critical', details: 'Realst — macOS info stealer disguised as blockchain games' }, - { pattern: /cuckoo[\s_-]?stealer/i, name: 'OSX.CuckooStealer', severity: 'critical', details: 'Cuckoo Stealer — macOS info stealer targeting crypto wallets and credentials' }, - { pattern: /banshee[\s_-]?stealer/i, name: 'OSX.BansheeStealer', severity: 'critical', details: 'Banshee Stealer — macOS info stealer that exfiltrates browser and crypto data' }, - { pattern: /cthulhu[\s_-]?stealer/i, name: 'OSX.CthulhuStealer', severity: 'critical', details: 'Cthulhu Stealer — macOS info stealer distributed via fake app installers' }, - { pattern: /metastealer/i, name: 'OSX.MetaStealer', severity: 'critical', details: 'MetaStealer — macOS info stealer targeting business users via social engineering' }, - { pattern: /poseidon[\s_-]?stealer/i, name: 'OSX.Poseidon', severity: 'critical', details: 'Poseidon — macOS stealer distributed through malicious Google ads' }, - { pattern: /kandykorn/i, name: 'OSX.KandyKorn', severity: 'critical', details: 'KandyKorn — DPRK-attributed macOS backdoor targeting crypto engineers' }, - - // Additional stealers - { pattern: /lumma[\s_-]?stealer/i, name: 'Trojan.LummaStealer', severity: 'critical', details: 'Lumma Stealer — MaaS info stealer targeting browser data, crypto wallets, and 2FA extensions' }, - { pattern: /\bstealc\b/i, name: 'Trojan.StealC', severity: 'critical', details: 'StealC — lightweight info stealer sold as malware-as-a-service' }, - { pattern: /\brisepro\b/i, name: 'Trojan.RisePro', severity: 'critical', details: 'RisePro — info stealer targeting browser credentials and crypto wallets' }, - { pattern: /mystic[\s_-]?stealer/i, name: 'Trojan.MysticStealer', severity: 'critical', details: 'Mystic Stealer — info stealer with anti-analysis and VM detection' }, - - // Loaders / droppers - { pattern: /gootloader/i, name: 'Trojan.Gootloader', severity: 'critical', details: 'Gootloader — SEO-poisoning loader that drops REvil, Cobalt Strike, and other payloads' }, - { pattern: /icedid|bokbot/i, name: 'Trojan.IcedID', severity: 'critical', details: 'IcedID (BokBot) — banking trojan turned initial access broker' }, - { pattern: /bumblebee[\s_-]?(loader|malware|trojan)/i, name: 'Trojan.Bumblebee', severity: 'critical', details: 'Bumblebee — sophisticated loader used as initial access for ransomware gangs' }, - { pattern: /pikabot/i, name: 'Trojan.Pikabot', severity: 'critical', details: 'Pikabot — modular loader with anti-analysis, successor to QakBot infrastructure' }, - { pattern: /qakbot|\bqbot\b/i, name: 'Trojan.QakBot', severity: 'critical', details: 'QakBot (QBot) — banking trojan and botnet used for ransomware delivery' }, - { pattern: /cobalt[\s_-]?strike/i, name: 'HackTool.CobaltStrike', severity: 'critical', details: 'Cobalt Strike beacon — commercial red team tool widely abused by threat actors' }, - { pattern: /meterpreter/i, name: 'HackTool.Meterpreter', severity: 'critical', details: 'Meterpreter — Metasploit payload used for post-exploitation' }, - { pattern: /sliver[\s_-]?(implant|beacon|c2)/i, name: 'HackTool.Sliver', severity: 'critical', details: 'Sliver C2 implant — open-source red team framework increasingly used by threat actors' }, - - // Additional RATs - { pattern: /\bremcos\b/i, name: 'RAT.Remcos', severity: 'critical', details: 'Remcos RAT — commercial remote access tool heavily abused in phishing campaigns' }, - { pattern: /warzone[\s_-]?rat|ave[\s_-]?maria/i, name: 'RAT.WarzoneRAT', severity: 'critical', details: 'Warzone RAT (AveMaria) — MaaS remote access trojan' }, - { pattern: /xworm/i, name: 'RAT.XWorm', severity: 'critical', details: 'XWorm — .NET RAT with keylogging, clipboard hijacking, and ransomware capabilities' }, - { pattern: /dcrat/i, name: 'RAT.DCRat', severity: 'critical', details: 'DCRat — modular .NET RAT sold as malware-as-a-service' }, - { pattern: /\bnetwire\b/i, name: 'RAT.NetWire', severity: 'critical', details: 'NetWire RAT — multi-platform remote access trojan' }, - - // Ransomware families - { pattern: /\blockbit\b/i, name: 'Ransom.LockBit', severity: 'critical', details: 'LockBit ransomware — prolific RaaS operation' }, - { pattern: /blackcat[\s_-]?(ransomware|ransom|malware|locker)|\balphv\b/i, name: 'Ransom.BlackCat', severity: 'critical', details: 'BlackCat (ALPHV) — Rust-based ransomware-as-a-service' }, - { pattern: /conti[\s_-]?(ransomware|ransom|locker|malware)/i, name: 'Ransom.Conti', severity: 'critical', details: 'Conti ransomware — fast-encrypting ransomware with data exfiltration' }, - { pattern: /\brevil\b[\s_-](ransomware|ransom|locker|malware)|sodinokibi/i, name: 'Ransom.REvil', severity: 'critical', details: 'REvil (Sodinokibi) — ransomware-as-a-service operation' }, - { pattern: /ryuk[\s_-]?(ransomware|ransom|locker|malware)/i, name: 'Ransom.Ryuk', severity: 'critical', details: 'Ryuk ransomware — targets enterprises via TrickBot/BazarLoader' }, - { pattern: /blackbasta/i, name: 'Ransom.BlackBasta', severity: 'critical', details: 'Black Basta — ransomware group using double extortion' }, - { pattern: /\bakira\b[\s_-]?(ransom|decrypt|locked)/i, name: 'Ransom.Akira', severity: 'critical', details: 'Akira ransomware — targets VMware ESXi and Windows environments' }, - { pattern: /royal[\s_-]?ransom/i, name: 'Ransom.Royal', severity: 'critical', details: 'Royal ransomware — operated by former Conti members' }, - { pattern: /play[\s_-]?ransom|play[\s_-]?crypt/i, name: 'Ransom.Play', severity: 'critical', details: 'Play ransomware — uses intermittent encryption for speed' }, - - // Linux-specific malware - { pattern: /\bxorddos\b/i, name: 'Linux.XorDDoS', severity: 'critical', details: 'XorDDoS — Linux trojan that builds DDoS botnets via SSH brute force' }, - { pattern: /\bperfctl\b/i, name: 'Linux.Perfctl', severity: 'critical', details: 'Perfctl — Linux malware that hides as a system process for cryptomining' }, - - // Additional ransomware notes (filename-only, very specific patterns) - { pattern: /^how[\s_-]?to[\s_-]?decrypt\.(txt|html|hta)$/i, name: 'Ransom.Generic', severity: 'critical', details: 'Ransomware decryption instruction file detected' }, - { pattern: /^restore[\s_-]?my[\s_-]?files\.(txt|html|hta)$/i, name: 'Ransom.Generic', severity: 'critical', details: 'Ransomware recovery instruction file detected' }, -] - -// Known malware SHA256 hashes (EICAR test file + well-known samples) -const KNOWN_MALWARE_HASHES: Record = { - // EICAR test file - '275a021bbfb6489e54d471899f7db9d1663fc695ec2fe2a2c4538aabf651fd0f': { - name: 'EICAR.TestFile', - severity: 'low', - details: 'EICAR antivirus test file — not actual malware, used to verify AV detection' - }, -} - // Suspicious file names commonly dropped by malware +// These are heuristic process-name checks (not malware signatures) and are +// safe to keep in the binary — AV won't flag generic Windows process names. const SUSPICIOUS_FILENAMES: { pattern: RegExp; name: string; severity: MalwareThreat['severity']; details: string }[] = [ { pattern: /^svchost\.exe$/i, name: 'Suspicious.FakeSvchost', severity: 'high', details: 'svchost.exe found outside System32 — likely malware disguised as system process' }, { pattern: /^csrss\.exe$/i, name: 'Suspicious.FakeCsrss', severity: 'high', details: 'csrss.exe found outside System32 — likely malware impersonating system process' }, @@ -273,7 +145,7 @@ async function _initYaraEngine(): Promise { console.warn('[yara] Rule load warnings:', result.errors.slice(0, 20)) } if (result.loaded === 0) { - console.warn('[yara] No rules loaded — falling back to regex patterns') + console.warn('[yara] No rules loaded — download rules from cloud first') engine.dispose() return null } @@ -281,7 +153,7 @@ async function _initYaraEngine(): Promise { return engine } catch (err) { _yaraCompileProgress = null - console.warn('[yara] Init failed, falling back to regex patterns:', err) + console.warn('[yara] Init failed:', err) return null } } @@ -302,25 +174,17 @@ function getYaraRulesInfo(): YaraRulesInfo { // Compilation is started in the background by ensureYaraEngineStarted(). const engine = _yaraEngine const meta = getRulesMetadata() - const bundled = getBundledRulePaths() const cached = getCachedRulePaths() const available = engine !== null && engine.isReady() const compiling = _yaraCompileProgress !== null - let source: YaraRulesInfo['source'] = 'none' - if (cached.length > 0) source = 'cloud' - else if (bundled.length > 0) source = 'bundled' - - const hasRules = cached.length > 0 || bundled.length > 0 - return { available, - engine: compiling ? 'compiling' : available ? 'yara' : hasRules ? 'yara' : 'regex-fallback', + engine: compiling ? 'compiling' : available ? 'yara' : 'pending', rulesLoaded: engine?.rulesLoaded ?? 0, version: meta?.version ?? null, updatedAt: meta?.updatedAt ?? null, - source, - bundledRules: bundled.length, + source: cached.length > 0 ? 'cloud' : 'none', cachedRules: cached.length, compileProgress: _yaraCompileProgress, } @@ -1205,7 +1069,7 @@ export async function scanMalware( ): Promise { const startTime = Date.now() const threats: MalwareThreat[] = [] - const engines: string[] = ['Heuristic Analysis', 'Known Signatures', 'Script Analysis', 'System Integrity', 'Persistence Scan'] + const engines: string[] = ['Heuristic Analysis', 'YARA Rules Engine', 'Script Analysis', 'System Integrity', 'Persistence Scan'] let filesScanned = 0 const platform = getPlatform() const shouldAnalyzePE = platform.malware.shouldAnalyzePE() @@ -1262,19 +1126,13 @@ export async function scanMalware( // ── Phase 1: Initialize ── // Compile YARA rules — shows progress via the loadRules onProgress callback. - // Rule updates are handled by periodic checks (every 6h) and the Database - // tab's "Check for Updates" button — no pre-scan fetch needed. + // Rules are downloaded from the cloud on first launch and updated periodically. sendProgress({ step: 'init', stepLabel: 'Compiling signature rules...', engine: 'YARA Rules Engine' }) yaraEngine = await getYaraEngine() - if (yaraEngine) { - const sigIdx = engines.indexOf('Known Signatures') - if (sigIdx !== -1) engines[sigIdx] = 'YARA Rules Engine' - else engines.unshift('YARA Rules Engine') - } sendProgress({ step: 'init', stepLabel: 'Initializing scan engines...', - engine: yaraEngine ? 'YARA Rules Engine' : (hasNativeAv ? (process.platform === 'linux' ? 'ClamAV available' : 'Code Signing available') : 'Using built-in engines') + engine: yaraEngine ? 'YARA Rules Engine' : 'Waiting for rules download' }) // ── Phase 2: File discovery ── @@ -1301,12 +1159,12 @@ export async function scanMalware( const MAX_READ_SIZE = 50 * 1024 * 1024 // ── Phase 3: Signature + heuristic scan ── - const sigEngineName = yaraEngine ? 'YARA Rules Engine' : 'Signature Database' - updateCategory('signatures', { status: 'running', totalItems: totalFiles, label: sigEngineName }) + const sigEngineName = 'YARA Rules Engine' + updateCategory('signatures', { status: yaraEngine ? 'running' : 'skipped', totalItems: totalFiles, label: sigEngineName }) updateCategory('heuristics', { status: 'running', totalItems: totalFiles }) sendProgress({ step: 'signatures', - stepLabel: yaraEngine ? 'Scanning with YARA rules engine...' : 'Checking known malware signatures & patterns...', + stepLabel: yaraEngine ? 'Scanning with YARA rules engine...' : 'Skipping signatures (rules not yet downloaded)...', progress: 5, totalFiles, engine: sigEngineName @@ -1348,73 +1206,29 @@ export async function scanMalware( } } - // ── Signature matching: YARA (scanFile reads from disk) or regex fallback ── - if (yaraEngine && fileSize <= MAX_READ_SIZE) { - if (!threats.some(t => t.path === filePath)) { - const matches = yaraEngine.scanFile(filePath) - for (const match of matches) { - if (threats.some(t => t.path === filePath)) break - // filenameOnly rules should only match outside system dirs on Windows - if (match.metadata.filenameOnly === 'true') { - if (isInSystemDir || process.platform !== 'win32') continue - } - - const fields = yaraMatchToThreatFields(match) - threats.push({ - id: randomUUID(), - path: filePath, - fileName, - size: fileSize, - detectionName: fields.detectionName, - severity: fields.severity, - source: 'signature', - details: fields.details, - selected: true, - }) - sigThreatsCount++ + // ── Signature matching via YARA engine (rules downloaded from cloud) ── + if (yaraEngine && fileSize <= MAX_READ_SIZE && !threats.some(t => t.path === filePath)) { + const matches = yaraEngine.scanFile(filePath) + for (const match of matches) { + if (threats.some(t => t.path === filePath)) break + // filenameOnly rules should only match outside system dirs on Windows + if (match.metadata.filenameOnly === 'true') { + if (isInSystemDir || process.platform !== 'win32') continue } - } - } else if (!threats.some(t => t.path === filePath)) { - // Fallback: regex pattern matching + hash lookup (used when YARA is unavailable) - for (const mal of KNOWN_MALWARE_PATTERNS) { - if (mal.pattern.test(fileName) || mal.pattern.test(filePath)) { - if (!threats.some(t => t.path === filePath)) { - threats.push({ - id: randomUUID(), - path: filePath, - fileName, - size: fileSize, - detectionName: mal.name, - severity: mal.severity, - source: 'signature', - details: mal.details, - selected: true - }) - sigThreatsCount++ - } - break - } - } - // Hash lookup (fallback only — YARA handles hashes natively) - if (fileSize <= MAX_READ_SIZE && !threats.some(t => t.path === filePath)) { - const buf = await readFile(filePath).catch(() => null) - const hash = buf ? createHash('sha256').update(buf).digest('hex') : null - const knownMalware = KNOWN_MALWARE_HASHES[hash] - if (knownMalware) { - threats.push({ - id: randomUUID(), - path: filePath, - fileName, - size: fileSize, - detectionName: knownMalware.name, - severity: knownMalware.severity, - source: 'signature', - details: knownMalware.details, - selected: true - }) - sigThreatsCount++ - } + const fields = yaraMatchToThreatFields(match) + threats.push({ + id: randomUUID(), + path: filePath, + fileName, + size: fileSize, + detectionName: fields.detectionName, + severity: fields.severity, + source: 'signature', + details: fields.details, + selected: true, + }) + sigThreatsCount++ } } @@ -1529,7 +1343,7 @@ export async function scanMalware( sendProgress({ step: currentStep as MalwareScanProgress['step'], stepLabel: currentStep === 'signatures' - ? (yaraEngine ? 'Scanning with YARA rules engine...' : 'Matching filenames, hashes & known malware patterns...') + ? 'Scanning with YARA rules engine...' : 'Analyzing PE headers, entropy & suspicious API imports...', currentPath: chunk[0], progress: 5 + (batch / totalFiles) * 35, diff --git a/src/main/ipc/malware-scanner.test.ts b/src/main/ipc/malware-scanner.test.ts index 8661bf38..ffec2415 100644 --- a/src/main/ipc/malware-scanner.test.ts +++ b/src/main/ipc/malware-scanner.test.ts @@ -186,58 +186,6 @@ describe('findSuspiciousStrings', () => { }) }) -// ─── KNOWN_MALWARE_PATTERNS (replica of patterns) ──────────────── - -const KNOWN_MALWARE_PATTERNS: { pattern: RegExp; name: string; severity: string }[] = [ - { pattern: /xmrig/i, name: 'CoinMiner.XMRig', severity: 'critical' }, - { pattern: /cpuminer/i, name: 'CoinMiner.CPUMiner', severity: 'critical' }, - { pattern: /bonzi\s*buddy/i, name: 'Adware.BonziBuddy', severity: 'medium' }, - { pattern: /darkcomet/i, name: 'RAT.DarkComet', severity: 'critical' }, - { pattern: /njrat/i, name: 'RAT.njRAT', severity: 'critical' }, - { pattern: /emotet/i, name: 'Trojan.Emotet', severity: 'critical' }, - { pattern: /wannacry/i, name: 'Ransom.WannaCry', severity: 'critical' }, - { pattern: /superfish/i, name: 'Adware.Superfish', severity: 'critical' }, - { pattern: /cobalt[\s_-]?strike/i, name: 'HackTool.CobaltStrike', severity: 'critical' }, - { pattern: /shlayer/i, name: 'OSX.Shlayer', severity: 'critical' }, - { pattern: /^svchost\.exe$/i, name: 'Suspicious.FakeSvchost', severity: 'high' }, -] - -describe('malware pattern matching', () => { - it('detects XMRig miner', () => { - const match = KNOWN_MALWARE_PATTERNS.find((p) => p.pattern.test('xmrig-6.21.0.exe')) - expect(match?.name).toBe('CoinMiner.XMRig') - expect(match?.severity).toBe('critical') - }) - - it('detects Cobalt Strike beacon', () => { - const match = KNOWN_MALWARE_PATTERNS.find((p) => p.pattern.test('cobalt_strike_beacon.dll')) - expect(match?.name).toBe('HackTool.CobaltStrike') - }) - - it('detects WannaCry', () => { - const match = KNOWN_MALWARE_PATTERNS.find((p) => p.pattern.test('WannaCry.exe')) - expect(match?.name).toBe('Ransom.WannaCry') - }) - - it('detects macOS Shlayer', () => { - const match = KNOWN_MALWARE_PATTERNS.find((p) => p.pattern.test('shlayer_install')) - expect(match?.name).toBe('OSX.Shlayer') - }) - - it('is case-insensitive for pattern matching', () => { - const match = KNOWN_MALWARE_PATTERNS.find((p) => p.pattern.test('XMRIG')) - expect(match?.name).toBe('CoinMiner.XMRig') - }) - - it('does not match benign filenames', () => { - const benign = ['notepad.exe', 'chrome.dll', 'setup.msi', 'README.md'] - for (const name of benign) { - const match = KNOWN_MALWARE_PATTERNS.find((p) => p.pattern.test(name)) - expect(match).toBeUndefined() - } - }) -}) - // ─── SUSPICIOUS_FILENAMES outside system dirs ──────────────────── const SUSPICIOUS_FILENAMES: { pattern: RegExp; name: string }[] = [ diff --git a/src/main/services/yara-rules-store.test.ts b/src/main/services/yara-rules-store.test.ts index 17cce971..13975ad6 100644 --- a/src/main/services/yara-rules-store.test.ts +++ b/src/main/services/yara-rules-store.test.ts @@ -235,54 +235,6 @@ describe('bundle integrity verification', () => { }) }) -// ─── Rule file precedence (bundled vs cached) ─────────────── - -describe('rule file precedence', () => { - // Replicate the merging logic from getAllRulePaths - function mergeRulePaths(bundled: string[], cached: string[]): string[] { - if (cached.length === 0) return bundled - if (bundled.length === 0) return cached - const cachedNames = new Set(cached.map(p => { - const parts = p.replace(/\\/g, '/').split('/') - return parts[parts.length - 1] - })) - const merged = bundled.filter(p => { - const parts = p.replace(/\\/g, '/').split('/') - return !cachedNames.has(parts[parts.length - 1]) - }) - return [...merged, ...cached] - } - - it('returns bundled when no cached rules exist', () => { - const bundled = ['/app/resources/miners.yar', '/app/resources/rats.yar'] - expect(mergeRulePaths(bundled, [])).toEqual(bundled) - }) - - it('returns cached when no bundled rules exist', () => { - const cached = ['/data/miners.yar', '/data/rats.yar'] - expect(mergeRulePaths([], cached)).toEqual(cached) - }) - - it('cached rules override bundled with same filename', () => { - const bundled = ['/app/resources/miners.yar', '/app/resources/rats.yar'] - const cached = ['/data/miners.yar'] - const result = mergeRulePaths(bundled, cached) - expect(result).toContain('/app/resources/rats.yar') - expect(result).toContain('/data/miners.yar') - expect(result).not.toContain('/app/resources/miners.yar') - expect(result).toHaveLength(2) - }) - - it('includes new cached rules not in bundled', () => { - const bundled = ['/app/resources/miners.yar'] - const cached = ['/data/custom.yar'] - const result = mergeRulePaths(bundled, cached) - expect(result).toContain('/app/resources/miners.yar') - expect(result).toContain('/data/custom.yar') - expect(result).toHaveLength(2) - }) -}) - // ─── Metadata validation ───────────────────────────────────── describe('metadata validation', () => { diff --git a/src/main/services/yara-rules-store.ts b/src/main/services/yara-rules-store.ts index 56521a45..d62f08b4 100644 --- a/src/main/services/yara-rules-store.ts +++ b/src/main/services/yara-rules-store.ts @@ -1,5 +1,5 @@ import { readFileSync, writeFileSync, renameSync, unlinkSync, rmSync, existsSync, mkdirSync, readdirSync } from 'fs' -import { join, basename } from 'path' +import { join } from 'path' import { createHash } from 'crypto' import { app } from 'electron' @@ -54,14 +54,6 @@ function getMetadataPath(): string { return join(getCachedRulesDir(), 'metadata.json') } -// ─── Bundled rules (fetched at build time, shipped with the installer) ── - -function getBundledRulesDir(): string { - return app.isPackaged - ? join(process.resourcesPath, 'yara-rules') - : join(__dirname, '../../resources/yara-rules') -} - /** List .yar files in a directory. */ function listYarFiles(dir: string): string[] { try { @@ -75,11 +67,6 @@ function listYarFiles(dir: string): string[] { } } -/** Get paths to bundled YARA rule files (shipped with the app). */ -export function getBundledRulePaths(): string[] { - return listYarFiles(getBundledRulesDir()) -} - // ─── Cached rule files (downloaded from cloud, persisted to disk) ── /** Get paths to cached YARA rule files. */ @@ -89,19 +76,10 @@ export function getCachedRulePaths(): string[] { /** * Get all YARA rule file paths. - * Cached (cloud-downloaded) rules override bundled ones by filename, - * so cloud updates supersede the version that shipped with the installer. + * Rules are downloaded from the cloud on first launch and cached locally. */ export function getAllRulePaths(): string[] { - const bundled = getBundledRulePaths() - const cached = getCachedRulePaths() - - if (cached.length === 0) return bundled - if (bundled.length === 0) return cached - - const cachedNames = new Set(cached.map(p => basename(p))) - const merged = bundled.filter(p => !cachedNames.has(basename(p))) - return [...merged, ...cached] + return getCachedRulePaths() } export function getRulesMetadata(): YaraRulesMetadata | null { @@ -309,8 +287,9 @@ export function startPeriodicRuleChecks( } } - // Run first check after a short delay (let app finish initializing) - setTimeout(check, 30_000) + // Run first check shortly after launch so rules are available quickly. + // Rules are no longer bundled — they must be downloaded from the cloud. + setTimeout(check, 5_000) _checkInterval = setInterval(check, intervalMs) } diff --git a/src/renderer/src/locales/.checksums.json b/src/renderer/src/locales/.checksums.json index 364da9c1..4ceedcf6 100644 --- a/src/renderer/src/locales/.checksums.json +++ b/src/renderer/src/locales/.checksums.json @@ -3,7 +3,7 @@ "es/cleaner": "ed440cf4ecfa4e928c667cf3415b2956ebd2688093c32ef0a47be6f1a6a46bfa", "es/dashboard": "d6ab3a604f360cd67acafa3e91e2251517da28d1ab4ce328ddf727045c52b70a", "es/disk": "cb0036f0447062b13fbec3f37cf91f8fa7642be7c227ee6696709a20167c4c9c", - "es/malware": "6398ae4a7cb90cddcf44aa9d1a46d1b04054b83313520eb1b37820e69949e28c", + "es/malware": "a0d4e4b2aaf89b0b11e0a81a14a56c0de764ce26c29ef7af8d06797e38813e10", "es/history": "445b5ceb891d6df4e09be1278a8272ff57531c087ab25834e70e83e61f700190", "es/network": "673cd9572d1c5b76433c823ebb4887d21e75d6794df81cc77930c85499ecc7fc", "es/onboarding": "749b6bfee636f97b1bc573a2598458e0df8af681be28f6e285104f54c3a0c54a", @@ -22,7 +22,7 @@ "fr/cleaner": "ed440cf4ecfa4e928c667cf3415b2956ebd2688093c32ef0a47be6f1a6a46bfa", "fr/disk": "cb0036f0447062b13fbec3f37cf91f8fa7642be7c227ee6696709a20167c4c9c", "fr/dashboard": "d6ab3a604f360cd67acafa3e91e2251517da28d1ab4ce328ddf727045c52b70a", - "fr/malware": "6398ae4a7cb90cddcf44aa9d1a46d1b04054b83313520eb1b37820e69949e28c", + "fr/malware": "a0d4e4b2aaf89b0b11e0a81a14a56c0de764ce26c29ef7af8d06797e38813e10", "fr/history": "445b5ceb891d6df4e09be1278a8272ff57531c087ab25834e70e83e61f700190", "fr/network": "673cd9572d1c5b76433c823ebb4887d21e75d6794df81cc77930c85499ecc7fc", "fr/onboarding": "749b6bfee636f97b1bc573a2598458e0df8af681be28f6e285104f54c3a0c54a", @@ -41,7 +41,7 @@ "de/cleaner": "ed440cf4ecfa4e928c667cf3415b2956ebd2688093c32ef0a47be6f1a6a46bfa", "de/disk": "cb0036f0447062b13fbec3f37cf91f8fa7642be7c227ee6696709a20167c4c9c", "de/dashboard": "d6ab3a604f360cd67acafa3e91e2251517da28d1ab4ce328ddf727045c52b70a", - "de/malware": "6398ae4a7cb90cddcf44aa9d1a46d1b04054b83313520eb1b37820e69949e28c", + "de/malware": "a0d4e4b2aaf89b0b11e0a81a14a56c0de764ce26c29ef7af8d06797e38813e10", "de/history": "445b5ceb891d6df4e09be1278a8272ff57531c087ab25834e70e83e61f700190", "de/network": "673cd9572d1c5b76433c823ebb4887d21e75d6794df81cc77930c85499ecc7fc", "de/onboarding": "749b6bfee636f97b1bc573a2598458e0df8af681be28f6e285104f54c3a0c54a", @@ -60,7 +60,7 @@ "pt/cleaner": "ed440cf4ecfa4e928c667cf3415b2956ebd2688093c32ef0a47be6f1a6a46bfa", "pt/disk": "cb0036f0447062b13fbec3f37cf91f8fa7642be7c227ee6696709a20167c4c9c", "pt/dashboard": "d6ab3a604f360cd67acafa3e91e2251517da28d1ab4ce328ddf727045c52b70a", - "pt/malware": "6398ae4a7cb90cddcf44aa9d1a46d1b04054b83313520eb1b37820e69949e28c", + "pt/malware": "a0d4e4b2aaf89b0b11e0a81a14a56c0de764ce26c29ef7af8d06797e38813e10", "pt/network": "673cd9572d1c5b76433c823ebb4887d21e75d6794df81cc77930c85499ecc7fc", "pt/history": "445b5ceb891d6df4e09be1278a8272ff57531c087ab25834e70e83e61f700190", "pt/onboarding": "749b6bfee636f97b1bc573a2598458e0df8af681be28f6e285104f54c3a0c54a", @@ -79,7 +79,7 @@ "it/cleaner": "ed440cf4ecfa4e928c667cf3415b2956ebd2688093c32ef0a47be6f1a6a46bfa", "it/disk": "cb0036f0447062b13fbec3f37cf91f8fa7642be7c227ee6696709a20167c4c9c", "it/dashboard": "d6ab3a604f360cd67acafa3e91e2251517da28d1ab4ce328ddf727045c52b70a", - "it/malware": "6398ae4a7cb90cddcf44aa9d1a46d1b04054b83313520eb1b37820e69949e28c", + "it/malware": "a0d4e4b2aaf89b0b11e0a81a14a56c0de764ce26c29ef7af8d06797e38813e10", "it/history": "445b5ceb891d6df4e09be1278a8272ff57531c087ab25834e70e83e61f700190", "it/network": "673cd9572d1c5b76433c823ebb4887d21e75d6794df81cc77930c85499ecc7fc", "it/onboarding": "749b6bfee636f97b1bc573a2598458e0df8af681be28f6e285104f54c3a0c54a", @@ -98,7 +98,7 @@ "ja/cleaner": "ed440cf4ecfa4e928c667cf3415b2956ebd2688093c32ef0a47be6f1a6a46bfa", "ja/disk": "cb0036f0447062b13fbec3f37cf91f8fa7642be7c227ee6696709a20167c4c9c", "ja/dashboard": "d6ab3a604f360cd67acafa3e91e2251517da28d1ab4ce328ddf727045c52b70a", - "ja/malware": "6398ae4a7cb90cddcf44aa9d1a46d1b04054b83313520eb1b37820e69949e28c", + "ja/malware": "a0d4e4b2aaf89b0b11e0a81a14a56c0de764ce26c29ef7af8d06797e38813e10", "ja/history": "445b5ceb891d6df4e09be1278a8272ff57531c087ab25834e70e83e61f700190", "ja/network": "673cd9572d1c5b76433c823ebb4887d21e75d6794df81cc77930c85499ecc7fc", "ja/onboarding": "749b6bfee636f97b1bc573a2598458e0df8af681be28f6e285104f54c3a0c54a", @@ -117,7 +117,7 @@ "ko/cleaner": "ed440cf4ecfa4e928c667cf3415b2956ebd2688093c32ef0a47be6f1a6a46bfa", "ko/dashboard": "d6ab3a604f360cd67acafa3e91e2251517da28d1ab4ce328ddf727045c52b70a", "ko/disk": "cb0036f0447062b13fbec3f37cf91f8fa7642be7c227ee6696709a20167c4c9c", - "ko/malware": "6398ae4a7cb90cddcf44aa9d1a46d1b04054b83313520eb1b37820e69949e28c", + "ko/malware": "a0d4e4b2aaf89b0b11e0a81a14a56c0de764ce26c29ef7af8d06797e38813e10", "ko/history": "445b5ceb891d6df4e09be1278a8272ff57531c087ab25834e70e83e61f700190", "ko/network": "673cd9572d1c5b76433c823ebb4887d21e75d6794df81cc77930c85499ecc7fc", "ko/onboarding": "749b6bfee636f97b1bc573a2598458e0df8af681be28f6e285104f54c3a0c54a", @@ -136,7 +136,7 @@ "zh-CN/cleaner": "ed440cf4ecfa4e928c667cf3415b2956ebd2688093c32ef0a47be6f1a6a46bfa", "zh-CN/disk": "cb0036f0447062b13fbec3f37cf91f8fa7642be7c227ee6696709a20167c4c9c", "zh-CN/dashboard": "d6ab3a604f360cd67acafa3e91e2251517da28d1ab4ce328ddf727045c52b70a", - "zh-CN/malware": "6398ae4a7cb90cddcf44aa9d1a46d1b04054b83313520eb1b37820e69949e28c", + "zh-CN/malware": "a0d4e4b2aaf89b0b11e0a81a14a56c0de764ce26c29ef7af8d06797e38813e10", "zh-CN/history": "445b5ceb891d6df4e09be1278a8272ff57531c087ab25834e70e83e61f700190", "zh-CN/network": "673cd9572d1c5b76433c823ebb4887d21e75d6794df81cc77930c85499ecc7fc", "zh-CN/onboarding": "749b6bfee636f97b1bc573a2598458e0df8af681be28f6e285104f54c3a0c54a", @@ -155,7 +155,7 @@ "zh-TW/cleaner": "ed440cf4ecfa4e928c667cf3415b2956ebd2688093c32ef0a47be6f1a6a46bfa", "zh-TW/disk": "cb0036f0447062b13fbec3f37cf91f8fa7642be7c227ee6696709a20167c4c9c", "zh-TW/dashboard": "d6ab3a604f360cd67acafa3e91e2251517da28d1ab4ce328ddf727045c52b70a", - "zh-TW/malware": "6398ae4a7cb90cddcf44aa9d1a46d1b04054b83313520eb1b37820e69949e28c", + "zh-TW/malware": "a0d4e4b2aaf89b0b11e0a81a14a56c0de764ce26c29ef7af8d06797e38813e10", "zh-TW/history": "445b5ceb891d6df4e09be1278a8272ff57531c087ab25834e70e83e61f700190", "zh-TW/onboarding": "749b6bfee636f97b1bc573a2598458e0df8af681be28f6e285104f54c3a0c54a", "zh-TW/network": "673cd9572d1c5b76433c823ebb4887d21e75d6794df81cc77930c85499ecc7fc", @@ -174,7 +174,7 @@ "ru/cleaner": "ed440cf4ecfa4e928c667cf3415b2956ebd2688093c32ef0a47be6f1a6a46bfa", "ru/disk": "cb0036f0447062b13fbec3f37cf91f8fa7642be7c227ee6696709a20167c4c9c", "ru/dashboard": "d6ab3a604f360cd67acafa3e91e2251517da28d1ab4ce328ddf727045c52b70a", - "ru/malware": "6398ae4a7cb90cddcf44aa9d1a46d1b04054b83313520eb1b37820e69949e28c", + "ru/malware": "a0d4e4b2aaf89b0b11e0a81a14a56c0de764ce26c29ef7af8d06797e38813e10", "ru/history": "445b5ceb891d6df4e09be1278a8272ff57531c087ab25834e70e83e61f700190", "ru/network": "673cd9572d1c5b76433c823ebb4887d21e75d6794df81cc77930c85499ecc7fc", "ru/onboarding": "749b6bfee636f97b1bc573a2598458e0df8af681be28f6e285104f54c3a0c54a", @@ -193,7 +193,7 @@ "ar/cleaner": "ed440cf4ecfa4e928c667cf3415b2956ebd2688093c32ef0a47be6f1a6a46bfa", "ar/disk": "cb0036f0447062b13fbec3f37cf91f8fa7642be7c227ee6696709a20167c4c9c", "ar/dashboard": "d6ab3a604f360cd67acafa3e91e2251517da28d1ab4ce328ddf727045c52b70a", - "ar/malware": "6398ae4a7cb90cddcf44aa9d1a46d1b04054b83313520eb1b37820e69949e28c", + "ar/malware": "a0d4e4b2aaf89b0b11e0a81a14a56c0de764ce26c29ef7af8d06797e38813e10", "ar/history": "445b5ceb891d6df4e09be1278a8272ff57531c087ab25834e70e83e61f700190", "ar/network": "673cd9572d1c5b76433c823ebb4887d21e75d6794df81cc77930c85499ecc7fc", "ar/onboarding": "749b6bfee636f97b1bc573a2598458e0df8af681be28f6e285104f54c3a0c54a", @@ -212,7 +212,7 @@ "hi/cleaner": "ed440cf4ecfa4e928c667cf3415b2956ebd2688093c32ef0a47be6f1a6a46bfa", "hi/disk": "cb0036f0447062b13fbec3f37cf91f8fa7642be7c227ee6696709a20167c4c9c", "hi/dashboard": "d6ab3a604f360cd67acafa3e91e2251517da28d1ab4ce328ddf727045c52b70a", - "hi/malware": "6398ae4a7cb90cddcf44aa9d1a46d1b04054b83313520eb1b37820e69949e28c", + "hi/malware": "a0d4e4b2aaf89b0b11e0a81a14a56c0de764ce26c29ef7af8d06797e38813e10", "hi/history": "445b5ceb891d6df4e09be1278a8272ff57531c087ab25834e70e83e61f700190", "hi/network": "673cd9572d1c5b76433c823ebb4887d21e75d6794df81cc77930c85499ecc7fc", "hi/onboarding": "749b6bfee636f97b1bc573a2598458e0df8af681be28f6e285104f54c3a0c54a", @@ -231,7 +231,7 @@ "tr/cleaner": "ed440cf4ecfa4e928c667cf3415b2956ebd2688093c32ef0a47be6f1a6a46bfa", "tr/disk": "cb0036f0447062b13fbec3f37cf91f8fa7642be7c227ee6696709a20167c4c9c", "tr/dashboard": "d6ab3a604f360cd67acafa3e91e2251517da28d1ab4ce328ddf727045c52b70a", - "tr/malware": "6398ae4a7cb90cddcf44aa9d1a46d1b04054b83313520eb1b37820e69949e28c", + "tr/malware": "a0d4e4b2aaf89b0b11e0a81a14a56c0de764ce26c29ef7af8d06797e38813e10", "tr/history": "445b5ceb891d6df4e09be1278a8272ff57531c087ab25834e70e83e61f700190", "tr/network": "673cd9572d1c5b76433c823ebb4887d21e75d6794df81cc77930c85499ecc7fc", "tr/onboarding": "749b6bfee636f97b1bc573a2598458e0df8af681be28f6e285104f54c3a0c54a", @@ -250,7 +250,7 @@ "nl/cleaner": "ed440cf4ecfa4e928c667cf3415b2956ebd2688093c32ef0a47be6f1a6a46bfa", "nl/dashboard": "d6ab3a604f360cd67acafa3e91e2251517da28d1ab4ce328ddf727045c52b70a", "nl/disk": "cb0036f0447062b13fbec3f37cf91f8fa7642be7c227ee6696709a20167c4c9c", - "nl/malware": "6398ae4a7cb90cddcf44aa9d1a46d1b04054b83313520eb1b37820e69949e28c", + "nl/malware": "a0d4e4b2aaf89b0b11e0a81a14a56c0de764ce26c29ef7af8d06797e38813e10", "nl/history": "445b5ceb891d6df4e09be1278a8272ff57531c087ab25834e70e83e61f700190", "nl/network": "673cd9572d1c5b76433c823ebb4887d21e75d6794df81cc77930c85499ecc7fc", "nl/onboarding": "749b6bfee636f97b1bc573a2598458e0df8af681be28f6e285104f54c3a0c54a", @@ -269,7 +269,7 @@ "pl/cleaner": "ed440cf4ecfa4e928c667cf3415b2956ebd2688093c32ef0a47be6f1a6a46bfa", "pl/disk": "cb0036f0447062b13fbec3f37cf91f8fa7642be7c227ee6696709a20167c4c9c", "pl/dashboard": "d6ab3a604f360cd67acafa3e91e2251517da28d1ab4ce328ddf727045c52b70a", - "pl/malware": "6398ae4a7cb90cddcf44aa9d1a46d1b04054b83313520eb1b37820e69949e28c", + "pl/malware": "a0d4e4b2aaf89b0b11e0a81a14a56c0de764ce26c29ef7af8d06797e38813e10", "pl/history": "445b5ceb891d6df4e09be1278a8272ff57531c087ab25834e70e83e61f700190", "pl/network": "673cd9572d1c5b76433c823ebb4887d21e75d6794df81cc77930c85499ecc7fc", "pl/onboarding": "749b6bfee636f97b1bc573a2598458e0df8af681be28f6e285104f54c3a0c54a", @@ -288,7 +288,7 @@ "sv/cleaner": "ed440cf4ecfa4e928c667cf3415b2956ebd2688093c32ef0a47be6f1a6a46bfa", "sv/disk": "cb0036f0447062b13fbec3f37cf91f8fa7642be7c227ee6696709a20167c4c9c", "sv/dashboard": "d6ab3a604f360cd67acafa3e91e2251517da28d1ab4ce328ddf727045c52b70a", - "sv/malware": "6398ae4a7cb90cddcf44aa9d1a46d1b04054b83313520eb1b37820e69949e28c", + "sv/malware": "a0d4e4b2aaf89b0b11e0a81a14a56c0de764ce26c29ef7af8d06797e38813e10", "sv/history": "445b5ceb891d6df4e09be1278a8272ff57531c087ab25834e70e83e61f700190", "sv/network": "673cd9572d1c5b76433c823ebb4887d21e75d6794df81cc77930c85499ecc7fc", "sv/onboarding": "749b6bfee636f97b1bc573a2598458e0df8af681be28f6e285104f54c3a0c54a", @@ -307,7 +307,7 @@ "no/cleaner": "ed440cf4ecfa4e928c667cf3415b2956ebd2688093c32ef0a47be6f1a6a46bfa", "no/disk": "cb0036f0447062b13fbec3f37cf91f8fa7642be7c227ee6696709a20167c4c9c", "no/dashboard": "d6ab3a604f360cd67acafa3e91e2251517da28d1ab4ce328ddf727045c52b70a", - "no/malware": "6398ae4a7cb90cddcf44aa9d1a46d1b04054b83313520eb1b37820e69949e28c", + "no/malware": "a0d4e4b2aaf89b0b11e0a81a14a56c0de764ce26c29ef7af8d06797e38813e10", "no/history": "445b5ceb891d6df4e09be1278a8272ff57531c087ab25834e70e83e61f700190", "no/network": "673cd9572d1c5b76433c823ebb4887d21e75d6794df81cc77930c85499ecc7fc", "no/onboarding": "749b6bfee636f97b1bc573a2598458e0df8af681be28f6e285104f54c3a0c54a", @@ -326,7 +326,7 @@ "da/cleaner": "ed440cf4ecfa4e928c667cf3415b2956ebd2688093c32ef0a47be6f1a6a46bfa", "da/disk": "cb0036f0447062b13fbec3f37cf91f8fa7642be7c227ee6696709a20167c4c9c", "da/dashboard": "d6ab3a604f360cd67acafa3e91e2251517da28d1ab4ce328ddf727045c52b70a", - "da/malware": "6398ae4a7cb90cddcf44aa9d1a46d1b04054b83313520eb1b37820e69949e28c", + "da/malware": "a0d4e4b2aaf89b0b11e0a81a14a56c0de764ce26c29ef7af8d06797e38813e10", "da/history": "445b5ceb891d6df4e09be1278a8272ff57531c087ab25834e70e83e61f700190", "da/onboarding": "749b6bfee636f97b1bc573a2598458e0df8af681be28f6e285104f54c3a0c54a", "da/network": "673cd9572d1c5b76433c823ebb4887d21e75d6794df81cc77930c85499ecc7fc", @@ -345,7 +345,7 @@ "fi/cleaner": "ed440cf4ecfa4e928c667cf3415b2956ebd2688093c32ef0a47be6f1a6a46bfa", "fi/disk": "cb0036f0447062b13fbec3f37cf91f8fa7642be7c227ee6696709a20167c4c9c", "fi/dashboard": "d6ab3a604f360cd67acafa3e91e2251517da28d1ab4ce328ddf727045c52b70a", - "fi/malware": "6398ae4a7cb90cddcf44aa9d1a46d1b04054b83313520eb1b37820e69949e28c", + "fi/malware": "a0d4e4b2aaf89b0b11e0a81a14a56c0de764ce26c29ef7af8d06797e38813e10", "fi/history": "445b5ceb891d6df4e09be1278a8272ff57531c087ab25834e70e83e61f700190", "fi/network": "673cd9572d1c5b76433c823ebb4887d21e75d6794df81cc77930c85499ecc7fc", "fi/onboarding": "749b6bfee636f97b1bc573a2598458e0df8af681be28f6e285104f54c3a0c54a", @@ -364,7 +364,7 @@ "cs/cleaner": "ed440cf4ecfa4e928c667cf3415b2956ebd2688093c32ef0a47be6f1a6a46bfa", "cs/disk": "cb0036f0447062b13fbec3f37cf91f8fa7642be7c227ee6696709a20167c4c9c", "cs/dashboard": "d6ab3a604f360cd67acafa3e91e2251517da28d1ab4ce328ddf727045c52b70a", - "cs/malware": "6398ae4a7cb90cddcf44aa9d1a46d1b04054b83313520eb1b37820e69949e28c", + "cs/malware": "a0d4e4b2aaf89b0b11e0a81a14a56c0de764ce26c29ef7af8d06797e38813e10", "cs/network": "673cd9572d1c5b76433c823ebb4887d21e75d6794df81cc77930c85499ecc7fc", "cs/history": "445b5ceb891d6df4e09be1278a8272ff57531c087ab25834e70e83e61f700190", "cs/onboarding": "749b6bfee636f97b1bc573a2598458e0df8af681be28f6e285104f54c3a0c54a", @@ -383,7 +383,7 @@ "th/cleaner": "ed440cf4ecfa4e928c667cf3415b2956ebd2688093c32ef0a47be6f1a6a46bfa", "th/disk": "cb0036f0447062b13fbec3f37cf91f8fa7642be7c227ee6696709a20167c4c9c", "th/dashboard": "d6ab3a604f360cd67acafa3e91e2251517da28d1ab4ce328ddf727045c52b70a", - "th/malware": "6398ae4a7cb90cddcf44aa9d1a46d1b04054b83313520eb1b37820e69949e28c", + "th/malware": "a0d4e4b2aaf89b0b11e0a81a14a56c0de764ce26c29ef7af8d06797e38813e10", "th/history": "445b5ceb891d6df4e09be1278a8272ff57531c087ab25834e70e83e61f700190", "th/network": "673cd9572d1c5b76433c823ebb4887d21e75d6794df81cc77930c85499ecc7fc", "th/onboarding": "749b6bfee636f97b1bc573a2598458e0df8af681be28f6e285104f54c3a0c54a", @@ -402,7 +402,7 @@ "vi/cleaner": "ed440cf4ecfa4e928c667cf3415b2956ebd2688093c32ef0a47be6f1a6a46bfa", "vi/disk": "cb0036f0447062b13fbec3f37cf91f8fa7642be7c227ee6696709a20167c4c9c", "vi/dashboard": "d6ab3a604f360cd67acafa3e91e2251517da28d1ab4ce328ddf727045c52b70a", - "vi/malware": "6398ae4a7cb90cddcf44aa9d1a46d1b04054b83313520eb1b37820e69949e28c", + "vi/malware": "a0d4e4b2aaf89b0b11e0a81a14a56c0de764ce26c29ef7af8d06797e38813e10", "vi/history": "445b5ceb891d6df4e09be1278a8272ff57531c087ab25834e70e83e61f700190", "vi/network": "673cd9572d1c5b76433c823ebb4887d21e75d6794df81cc77930c85499ecc7fc", "vi/onboarding": "749b6bfee636f97b1bc573a2598458e0df8af681be28f6e285104f54c3a0c54a", @@ -421,7 +421,7 @@ "id/cleaner": "ed440cf4ecfa4e928c667cf3415b2956ebd2688093c32ef0a47be6f1a6a46bfa", "id/disk": "cb0036f0447062b13fbec3f37cf91f8fa7642be7c227ee6696709a20167c4c9c", "id/dashboard": "d6ab3a604f360cd67acafa3e91e2251517da28d1ab4ce328ddf727045c52b70a", - "id/malware": "6398ae4a7cb90cddcf44aa9d1a46d1b04054b83313520eb1b37820e69949e28c", + "id/malware": "a0d4e4b2aaf89b0b11e0a81a14a56c0de764ce26c29ef7af8d06797e38813e10", "id/history": "445b5ceb891d6df4e09be1278a8272ff57531c087ab25834e70e83e61f700190", "id/network": "673cd9572d1c5b76433c823ebb4887d21e75d6794df81cc77930c85499ecc7fc", "id/onboarding": "749b6bfee636f97b1bc573a2598458e0df8af681be28f6e285104f54c3a0c54a", @@ -440,7 +440,7 @@ "ms/cleaner": "ed440cf4ecfa4e928c667cf3415b2956ebd2688093c32ef0a47be6f1a6a46bfa", "ms/disk": "cb0036f0447062b13fbec3f37cf91f8fa7642be7c227ee6696709a20167c4c9c", "ms/dashboard": "d6ab3a604f360cd67acafa3e91e2251517da28d1ab4ce328ddf727045c52b70a", - "ms/malware": "6398ae4a7cb90cddcf44aa9d1a46d1b04054b83313520eb1b37820e69949e28c", + "ms/malware": "a0d4e4b2aaf89b0b11e0a81a14a56c0de764ce26c29ef7af8d06797e38813e10", "ms/history": "445b5ceb891d6df4e09be1278a8272ff57531c087ab25834e70e83e61f700190", "ms/network": "673cd9572d1c5b76433c823ebb4887d21e75d6794df81cc77930c85499ecc7fc", "ms/onboarding": "749b6bfee636f97b1bc573a2598458e0df8af681be28f6e285104f54c3a0c54a", @@ -459,7 +459,7 @@ "uk/cleaner": "ed440cf4ecfa4e928c667cf3415b2956ebd2688093c32ef0a47be6f1a6a46bfa", "uk/dashboard": "d6ab3a604f360cd67acafa3e91e2251517da28d1ab4ce328ddf727045c52b70a", "uk/disk": "cb0036f0447062b13fbec3f37cf91f8fa7642be7c227ee6696709a20167c4c9c", - "uk/malware": "6398ae4a7cb90cddcf44aa9d1a46d1b04054b83313520eb1b37820e69949e28c", + "uk/malware": "a0d4e4b2aaf89b0b11e0a81a14a56c0de764ce26c29ef7af8d06797e38813e10", "uk/history": "445b5ceb891d6df4e09be1278a8272ff57531c087ab25834e70e83e61f700190", "uk/network": "673cd9572d1c5b76433c823ebb4887d21e75d6794df81cc77930c85499ecc7fc", "uk/onboarding": "749b6bfee636f97b1bc573a2598458e0df8af681be28f6e285104f54c3a0c54a", @@ -478,7 +478,7 @@ "ro/cleaner": "ed440cf4ecfa4e928c667cf3415b2956ebd2688093c32ef0a47be6f1a6a46bfa", "ro/disk": "cb0036f0447062b13fbec3f37cf91f8fa7642be7c227ee6696709a20167c4c9c", "ro/dashboard": "d6ab3a604f360cd67acafa3e91e2251517da28d1ab4ce328ddf727045c52b70a", - "ro/malware": "6398ae4a7cb90cddcf44aa9d1a46d1b04054b83313520eb1b37820e69949e28c", + "ro/malware": "a0d4e4b2aaf89b0b11e0a81a14a56c0de764ce26c29ef7af8d06797e38813e10", "ro/history": "445b5ceb891d6df4e09be1278a8272ff57531c087ab25834e70e83e61f700190", "ro/onboarding": "749b6bfee636f97b1bc573a2598458e0df8af681be28f6e285104f54c3a0c54a", "ro/network": "673cd9572d1c5b76433c823ebb4887d21e75d6794df81cc77930c85499ecc7fc", @@ -497,7 +497,7 @@ "el/cleaner": "ed440cf4ecfa4e928c667cf3415b2956ebd2688093c32ef0a47be6f1a6a46bfa", "el/disk": "cb0036f0447062b13fbec3f37cf91f8fa7642be7c227ee6696709a20167c4c9c", "el/dashboard": "d6ab3a604f360cd67acafa3e91e2251517da28d1ab4ce328ddf727045c52b70a", - "el/malware": "6398ae4a7cb90cddcf44aa9d1a46d1b04054b83313520eb1b37820e69949e28c", + "el/malware": "a0d4e4b2aaf89b0b11e0a81a14a56c0de764ce26c29ef7af8d06797e38813e10", "el/history": "445b5ceb891d6df4e09be1278a8272ff57531c087ab25834e70e83e61f700190", "el/network": "673cd9572d1c5b76433c823ebb4887d21e75d6794df81cc77930c85499ecc7fc", "el/onboarding": "749b6bfee636f97b1bc573a2598458e0df8af681be28f6e285104f54c3a0c54a", @@ -516,7 +516,7 @@ "he/cleaner": "ed440cf4ecfa4e928c667cf3415b2956ebd2688093c32ef0a47be6f1a6a46bfa", "he/disk": "cb0036f0447062b13fbec3f37cf91f8fa7642be7c227ee6696709a20167c4c9c", "he/dashboard": "d6ab3a604f360cd67acafa3e91e2251517da28d1ab4ce328ddf727045c52b70a", - "he/malware": "6398ae4a7cb90cddcf44aa9d1a46d1b04054b83313520eb1b37820e69949e28c", + "he/malware": "a0d4e4b2aaf89b0b11e0a81a14a56c0de764ce26c29ef7af8d06797e38813e10", "he/history": "445b5ceb891d6df4e09be1278a8272ff57531c087ab25834e70e83e61f700190", "he/network": "673cd9572d1c5b76433c823ebb4887d21e75d6794df81cc77930c85499ecc7fc", "he/hardening": "262c9c4b827b486f7b9f5bfdeb27eca2d63c3c0e439ae12de4f9ea9fb0319bec", @@ -535,7 +535,7 @@ "hu/cleaner": "ed440cf4ecfa4e928c667cf3415b2956ebd2688093c32ef0a47be6f1a6a46bfa", "hu/disk": "cb0036f0447062b13fbec3f37cf91f8fa7642be7c227ee6696709a20167c4c9c", "hu/dashboard": "d6ab3a604f360cd67acafa3e91e2251517da28d1ab4ce328ddf727045c52b70a", - "hu/malware": "6398ae4a7cb90cddcf44aa9d1a46d1b04054b83313520eb1b37820e69949e28c", + "hu/malware": "a0d4e4b2aaf89b0b11e0a81a14a56c0de764ce26c29ef7af8d06797e38813e10", "hu/history": "445b5ceb891d6df4e09be1278a8272ff57531c087ab25834e70e83e61f700190", "hu/network": "673cd9572d1c5b76433c823ebb4887d21e75d6794df81cc77930c85499ecc7fc", "hu/onboarding": "749b6bfee636f97b1bc573a2598458e0df8af681be28f6e285104f54c3a0c54a", diff --git a/src/renderer/src/locales/ar/malware.json b/src/renderer/src/locales/ar/malware.json index 7c15635b..5cdce7da 100644 --- a/src/renderer/src/locales/ar/malware.json +++ b/src/renderer/src/locales/ar/malware.json @@ -1,12 +1,12 @@ { - "pageTitle": "فاحص البرامج الضارة", - "pageDescription": "اكتشاف التهديدات بمحركات متعددة — التواقيع، والتحليل الاستدلالي، وتحليل البرامج النصية، وسلامة النظام، وفحص الاستمرارية", + "pageTitle": "فاحص البرمجيات الخبيثة", + "pageDescription": "اكتشاف التهديدات متعدد المحركات — التواقيع، والتحليل الاستدلالي، وتحليل البرامج النصية، وسلامة النظام، وفحص الاستمرارية", "scanButtonScanning": "جارٍ الفحص...", "scanButton": "فحص", "quarantineButton": "الحجر", "deleteButton": "حذف", "severityCritical": "حرج", - "severityHigh": "عالٍ", + "severityHigh": "مرتفع", "severityMedium": "متوسط", "severityLow": "منخفض", "sourceDefenderWindows": "مضاد فيروسات أصلي", @@ -39,9 +39,9 @@ "actionResultDeleted": "تم حذف {{count}}", "actionResultFailed": "فشل {{count}}", "noThreatsDetectedTitle": "لم يتم اكتشاف أي تهديدات", - "noThreatsDetectedDescription": "تم فحص {{filesScanned}} ملف عبر {{engineCount}} محرك خلال {{duration}} ثانية — نظامك نظيف.", - "emptyStateTitle": "فاحص البرامج الضارة", - "emptyStateDescription": "انقر فوق \"فحص\" للتحقق من نظامك بحثًا عن البرامج الضارة، والبرامج الإعلانية، ومُعدّني العملات الرقمية، والملفات المشبوهة.", + "noThreatsDetectedDescription": "تم فحص {{filesScanned}} ملف عبر {{engineCount}} محركات خلال {{duration}} ثانية — نظامك نظيف.", + "emptyStateTitle": "فاحص البرمجيات الخبيثة", + "emptyStateDescription": "انقر على \"فحص\" للتحقق من نظامك بحثًا عن البرمجيات الخبيثة، والبرامج الإعلانية، ومُعدّني العملات المشفرة، والملفات المشبوهة.", "detectedThreatsHeading": "التهديدات المكتشفة", "detectedThreatsCount": "{{count}} تهديد", "detectedThreatsCountPlural": "{{count}} تهديدات", @@ -50,12 +50,12 @@ "threatDetailSize": "الحجم", "threatDetailPath": "المسار", "confirmQuarantineTitle": "نقل التهديدات إلى الحجر", - "confirmQuarantineDescription": "سيؤدي هذا إلى نقل {{count}} من التهديدات المكتشفة إلى الحجر. يمكن استعادة الملفات لاحقًا عند الحاجة.", + "confirmQuarantineDescription": "سيؤدي هذا إلى نقل {{count}} من التهديدات المكتشفة إلى الحجر. يمكن استعادة الملفات لاحقًا إذا لزم الأمر.", "confirmQuarantineLabel": "النقل إلى الحجر الآن", "confirmDeleteTitle": "حذف التهديدات", "confirmDeleteDescription": "سيؤدي هذا إلى حذف {{count}} من التهديدات المكتشفة نهائيًا. لا يمكن التراجع عن هذا الإجراء.", "confirmDeleteLabel": "حذف نهائي", - "toastScanFailed": "فشل فحص البرامج الضارة", + "toastScanFailed": "فشل فحص البرمجيات الخبيثة", "toastActionFailed": "فشل {{action}} التهديدات", "toastActionFailedDescription": "حاول التشغيل كمسؤول", "errorOperationFailed": "فشلت العملية — حاول التشغيل كمسؤول", @@ -63,12 +63,12 @@ "tabQuarantine": "الحجر", "tabDatabase": "قاعدة البيانات", "dbTitle": "قاعدة بيانات التواقيع", - "dbDescription": "قواعد YARA لاكتشاف البرامج الضارة المستخدمة بواسطة الفاحص", + "dbDescription": "قواعد YARA لاكتشاف البرمجيات الخبيثة المستخدمة بواسطة الفاحص", "dbFetchLatest": "التحقق من وجود تحديثات", "dbUpdating": "جارٍ التحديث...", "dbEngine": "المحرك", "dbEngineYara": "Kudu Cloud Signatures", - "dbEngineRegex": "Regex احتياطي", + "dbEngineRegex": "Regex Fallback", "dbEngineCompiling": "جارٍ التجميع...", "dbCompiling": "جارٍ تجميع قواعد التواقيع ({{loaded}}/{{total}})...", "dbRulesLoaded": "القواعد المحمّلة", @@ -77,16 +77,15 @@ "dbNever": "أبدًا", "dbSource": "مصدر القواعد", "dbSourceCloud": "السحابة (مخزنة مؤقتًا)", - "dbSourceBundled": "مضمنة مع التطبيق", "dbSourceNone": "لم يتم تحميل أي قواعد", "dbRuleFiles": "ملفات القواعد", - "dbRuleFilesCounts": "{{bundled}} مضمنة، {{cached}} من السحابة", + "dbRuleFilesCounts": "{{count}} من السحابة", "dbUpdateSuccess": "تم التحديث إلى v{{version}} ({{count}} قاعدة)", "dbAlreadyCurrent": "التواقيع محدّثة بالفعل", "dbUpdateFailed": "فشل تحديث التواقيع", "quarantineEmptyTitle": "لا توجد عناصر في الحجر", "quarantineEmptyDescription": "ستظهر هنا الملفات التي تم نقلها إلى الحجر. يمكنك استعادتها أو حذفها نهائيًا.", - "quarantineHeading": "الملفات الموجودة في الحجر", + "quarantineHeading": "الملفات المعزولة", "quarantineCount": "{{count}} ملف", "quarantineCountPlural": "{{count}} ملفات", "quarantineColumnFile": "الملف", @@ -102,7 +101,7 @@ "confirmRestoreDescription": "سيؤدي هذا إلى استعادة {{count}} من الملفات إلى موقعها الأصلي. استعد فقط الملفات التي تثق بها.", "confirmRestoreLabel": "استعادة الآن", "confirmDeleteQuarantineTitle": "حذف نهائي", - "confirmDeleteQuarantineDescription": "سيؤدي هذا إلى حذف {{count}} من الملفات الموجودة في الحجر نهائيًا. لا يمكن التراجع عن هذا الإجراء.", + "confirmDeleteQuarantineDescription": "سيؤدي هذا إلى حذف {{count}} من الملفات المعزولة نهائيًا. لا يمكن التراجع عن هذا الإجراء.", "confirmDeleteQuarantineLabel": "حذف نهائي", "quarantineLoading": "جارٍ تحميل الحجر...", "quarantineRestoring": "جارٍ استعادة الملفات...", diff --git a/src/renderer/src/locales/cs/malware.json b/src/renderer/src/locales/cs/malware.json index f629bfbe..56801559 100644 --- a/src/renderer/src/locales/cs/malware.json +++ b/src/renderer/src/locales/cs/malware.json @@ -1,6 +1,6 @@ { "pageTitle": "Skener malwaru", - "pageDescription": "Detekce hrozeb pomocí více enginů — signatury, heuristika, analýza skriptů, integrita systému a kontrola perzistence", + "pageDescription": "Vícevrstvá detekce hrozeb — signatury, heuristika, analýza skriptů, integrita systému a kontrola perzistence", "scanButtonScanning": "Probíhá kontrola...", "scanButton": "Kontrolovat", "quarantineButton": "Přesunout do karantény", @@ -35,13 +35,13 @@ "actingDeleting": "Odstraňování vybraných hrozeb...", "actionCompleteQuarantine": "Přesun do karantény dokončen", "actionCompleteDeletion": "Odstranění dokončeno", - "actionResultQuarantined": "Do karantény přesunuto: {{count}}", + "actionResultQuarantined": "Přesunuto do karantény: {{count}}", "actionResultDeleted": "Odstraněno: {{count}}", "actionResultFailed": "Nezdařilo se: {{count}}", "noThreatsDetectedTitle": "Nebyly zjištěny žádné hrozby", "noThreatsDetectedDescription": "Bylo zkontrolováno {{filesScanned}} souborů pomocí {{engineCount}} enginů za {{duration}} s — váš systém je čistý.", "emptyStateTitle": "Skener malwaru", - "emptyStateDescription": "Kliknutím na „Kontrolovat“ zkontrolujete systém na malware, adware, kryptoměnové těžaře a podezřelé soubory.", + "emptyStateDescription": "Kliknutím na „Kontrolovat“ zkontrolujete systém na malware, adware, těžaře kryptoměn a podezřelé soubory.", "detectedThreatsHeading": "Zjištěné hrozby", "detectedThreatsCount": "{{count}} hrozba", "detectedThreatsCountPlural": "{{count}} hrozeb", @@ -77,10 +77,9 @@ "dbNever": "Nikdy", "dbSource": "Zdroj pravidel", "dbSourceCloud": "Cloud (v mezipaměti)", - "dbSourceBundled": "Součást aplikace", "dbSourceNone": "Nejsou načtena žádná pravidla", "dbRuleFiles": "Soubory pravidel", - "dbRuleFilesCounts": "{{bundled}} součástí aplikace, {{cached}} z cloudu", + "dbRuleFilesCounts": "{{count}} z cloudu", "dbUpdateSuccess": "Aktualizováno na v{{version}} ({{count}} pravidel)", "dbAlreadyCurrent": "Signatury jsou již aktuální", "dbUpdateFailed": "Aktualizace signatur se nezdařila", @@ -108,7 +107,7 @@ "quarantineRestoring": "Obnovování souborů...", "quarantineDeleting": "Odstraňování souborů...", "toastRestoreSuccess": "Obnoveno souborů: {{count}}", - "toastRestoreFailed": "Některé soubory se nepodařilo obnovit", + "toastRestoreFailed": "Obnovení některých souborů se nezdařilo", "toastDeleteQuarantineSuccess": "Trvale odstraněno souborů: {{count}}", "toastRestoreNoOriginal": "Nelze obnovit — původní umístění není známo" } diff --git a/src/renderer/src/locales/da/malware.json b/src/renderer/src/locales/da/malware.json index d33274ab..4af6e124 100644 --- a/src/renderer/src/locales/da/malware.json +++ b/src/renderer/src/locales/da/malware.json @@ -14,7 +14,7 @@ "sourceDefenderLinux": "ClamAV", "sourceHeuristic": "Heuristisk analyse", "sourceSignature": "Kendt signatur", - "initializingScanEngines": "Initialiserer scanningsmotorer...", + "initializingScanEngines": "Initialiserer scanmotorer...", "filesScanned": "{{count}} filer scannet", "threatCount": "{{count}} trussel", "threatCountPlural": "{{count}} trusler", @@ -67,20 +67,19 @@ "dbFetchLatest": "Søg efter opdateringer", "dbUpdating": "Opdaterer...", "dbEngine": "Motor", - "dbEngineYara": "Kudu Cloud-signaturer", + "dbEngineYara": "Kudu Cloud Signatures", "dbEngineRegex": "Regex-reserve", "dbEngineCompiling": "Kompilerer...", "dbCompiling": "Kompilerer signaturregler ({{loaded}}/{{total}})...", "dbRulesLoaded": "Regler indlæst", "dbVersion": "Signaturversion", - "dbLastUpdated": "Sidst opdateret", + "dbLastUpdated": "Senest opdateret", "dbNever": "Aldrig", "dbSource": "Regelkilde", "dbSourceCloud": "Cloud (cachelagret)", - "dbSourceBundled": "Medfølger appen", "dbSourceNone": "Ingen regler indlæst", "dbRuleFiles": "Regelfiler", - "dbRuleFilesCounts": "{{bundled}} medfølgende, {{cached}} fra cloud", + "dbRuleFilesCounts": "{{count}} fra cloud", "dbUpdateSuccess": "Opdateret til v{{version}} ({{count}} regler)", "dbAlreadyCurrent": "Signaturerne er allerede opdaterede", "dbUpdateFailed": "Kunne ikke opdatere signaturer", diff --git a/src/renderer/src/locales/de/malware.json b/src/renderer/src/locales/de/malware.json index 91d1c9a1..335c475d 100644 --- a/src/renderer/src/locales/de/malware.json +++ b/src/renderer/src/locales/de/malware.json @@ -30,7 +30,7 @@ "selectedHeading": "Ausgewählt", "selectedOfThreats": "von {{count}} Bedrohungen", "selectAll": "Alle auswählen", - "deselectAll": "Auswahl aufheben", + "deselectAll": "Alle abwählen", "actingQuarantining": "Ausgewählte Bedrohungen werden in Quarantäne verschoben...", "actingDeleting": "Ausgewählte Bedrohungen werden gelöscht...", "actionCompleteQuarantine": "Quarantäne abgeschlossen", @@ -39,9 +39,9 @@ "actionResultDeleted": "{{count}} gelöscht", "actionResultFailed": "{{count}} fehlgeschlagen", "noThreatsDetectedTitle": "Keine Bedrohungen erkannt", - "noThreatsDetectedDescription": "{{filesScanned}} Dateien mit {{engineCount}} Engines in {{duration}} s gescannt — Ihr System ist sauber.", + "noThreatsDetectedDescription": "{{filesScanned}} Dateien mit {{engineCount}} Engines in {{duration}}s gescannt — Ihr System ist sauber.", "emptyStateTitle": "Malware-Scanner", - "emptyStateDescription": "Klicken Sie auf \"Scannen\", um Ihr System auf Malware, Adware, Krypto-Miner und verdächtige Dateien zu überprüfen.", + "emptyStateDescription": "Klicken Sie auf „Scannen“, um Ihr System auf Malware, Adware, Krypto-Miner und verdächtige Dateien zu überprüfen.", "detectedThreatsHeading": "Erkannte Bedrohungen", "detectedThreatsCount": "{{count}} Bedrohung", "detectedThreatsCountPlural": "{{count}} Bedrohungen", @@ -67,7 +67,7 @@ "dbFetchLatest": "Nach Updates suchen", "dbUpdating": "Wird aktualisiert...", "dbEngine": "Engine", - "dbEngineYara": "Kudu Cloud Signatures", + "dbEngineYara": "Kudu Cloud-Signaturen", "dbEngineRegex": "Regex-Fallback", "dbEngineCompiling": "Wird kompiliert...", "dbCompiling": "Signaturregeln werden kompiliert ({{loaded}}/{{total}})...", @@ -77,10 +77,9 @@ "dbNever": "Nie", "dbSource": "Regelquelle", "dbSourceCloud": "Cloud (zwischengespeichert)", - "dbSourceBundled": "Mit der App gebündelt", "dbSourceNone": "Keine Regeln geladen", "dbRuleFiles": "Regeldateien", - "dbRuleFilesCounts": "{{bundled}} gebündelt, {{cached}} aus der Cloud", + "dbRuleFilesCounts": "{{count}} aus der Cloud", "dbUpdateSuccess": "Auf v{{version}} aktualisiert ({{count}} Regeln)", "dbAlreadyCurrent": "Signaturen sind bereits auf dem neuesten Stand", "dbUpdateFailed": "Signaturen konnten nicht aktualisiert werden", @@ -97,7 +96,7 @@ "quarantineRestoreButton": "Wiederherstellen", "quarantineDeleteButton": "Dauerhaft löschen", "quarantineSelectAll": "Alle auswählen", - "quarantineDeselectAll": "Auswahl aufheben", + "quarantineDeselectAll": "Alle abwählen", "confirmRestoreTitle": "Dateien wiederherstellen", "confirmRestoreDescription": "Dadurch werden {{count}} Datei(en) an ihrem ursprünglichen Speicherort wiederhergestellt. Stellen Sie nur Dateien wieder her, denen Sie vertrauen.", "confirmRestoreLabel": "Jetzt wiederherstellen", diff --git a/src/renderer/src/locales/el/malware.json b/src/renderer/src/locales/el/malware.json index 3d7e4db1..7e2f64bb 100644 --- a/src/renderer/src/locales/el/malware.json +++ b/src/renderer/src/locales/el/malware.json @@ -1,6 +1,6 @@ { "pageTitle": "Σαρωτής κακόβουλου λογισμικού", - "pageDescription": "Ανίχνευση απειλών πολλαπλών μηχανών — υπογραφές, ευρετική ανάλυση, ανάλυση σεναρίων, ακεραιότητα συστήματος και σάρωση μονιμότητας", + "pageDescription": "Ανίχνευση απειλών πολλαπλών μηχανών — υπογραφές, ευρετική ανάλυση, ανάλυση δεσμών ενεργειών, ακεραιότητα συστήματος και σάρωση μονιμότητας", "scanButtonScanning": "Γίνεται σάρωση...", "scanButton": "Σάρωση", "quarantineButton": "Καραντίνα", @@ -31,8 +31,8 @@ "selectedOfThreats": "από {{count}} απειλές", "selectAll": "Επιλογή όλων", "deselectAll": "Κατάργηση επιλογής όλων", - "actingQuarantining": "Τα επιλεγμένα στοιχεία μεταφέρονται σε καραντίνα...", - "actingDeleting": "Τα επιλεγμένα στοιχεία διαγράφονται...", + "actingQuarantining": "Μεταφορά των επιλεγμένων απειλών σε καραντίνα...", + "actingDeleting": "Διαγραφή των επιλεγμένων απειλών...", "actionCompleteQuarantine": "Η μεταφορά σε καραντίνα ολοκληρώθηκε", "actionCompleteDeletion": "Η διαγραφή ολοκληρώθηκε", "actionResultQuarantined": "{{count}} σε καραντίνα", @@ -41,7 +41,7 @@ "noThreatsDetectedTitle": "Δεν εντοπίστηκαν απειλές", "noThreatsDetectedDescription": "Σαρώθηκαν {{filesScanned}} αρχεία σε {{engineCount}} μηχανές σε {{duration}} δευτ. — το σύστημά σας είναι καθαρό.", "emptyStateTitle": "Σαρωτής κακόβουλου λογισμικού", - "emptyStateDescription": "Κάντε κλικ στο \"Σάρωση\" για να ελέγξετε το σύστημά σας για κακόβουλο λογισμικό, adware, crypto miners και ύποπτα αρχεία.", + "emptyStateDescription": "Κάντε κλικ στο \"Σάρωση\" για να ελέγξετε το σύστημά σας για κακόβουλο λογισμικό, adware, εξορύκτες κρυπτονομισμάτων και ύποπτα αρχεία.", "detectedThreatsHeading": "Εντοπισμένες απειλές", "detectedThreatsCount": "{{count}} απειλή", "detectedThreatsCountPlural": "{{count}} απειλές", @@ -68,7 +68,7 @@ "dbUpdating": "Γίνεται ενημέρωση...", "dbEngine": "Μηχανή", "dbEngineYara": "Kudu Cloud Signatures", - "dbEngineRegex": "Regex Fallback", + "dbEngineRegex": "Εφεδρικό Regex", "dbEngineCompiling": "Γίνεται μεταγλώττιση...", "dbCompiling": "Μεταγλώττιση κανόνων υπογραφών ({{loaded}}/{{total}})...", "dbRulesLoaded": "Φορτωμένοι κανόνες", @@ -77,11 +77,10 @@ "dbNever": "Ποτέ", "dbSource": "Πηγή κανόνων", "dbSourceCloud": "Cloud (στη μνήμη cache)", - "dbSourceBundled": "Περιλαμβάνεται με την εφαρμογή", - "dbSourceNone": "Δεν φορτώθηκαν κανόνες", + "dbSourceNone": "Δεν έχουν φορτωθεί κανόνες", "dbRuleFiles": "Αρχεία κανόνων", - "dbRuleFilesCounts": "{{bundled}} ενσωματωμένα, {{cached}} από το cloud", - "dbUpdateSuccess": "Ενημερώθηκε στην έκδοση v{{version}} ({{count}} κανόνες)", + "dbRuleFilesCounts": "{{count}} από το cloud", + "dbUpdateSuccess": "Ενημερώθηκε σε v{{version}} ({{count}} κανόνες)", "dbAlreadyCurrent": "Οι υπογραφές είναι ήδη ενημερωμένες", "dbUpdateFailed": "Αποτυχία ενημέρωσης υπογραφών", "quarantineEmptyTitle": "Δεν υπάρχουν στοιχεία σε καραντίνα", @@ -99,14 +98,14 @@ "quarantineSelectAll": "Επιλογή όλων", "quarantineDeselectAll": "Κατάργηση επιλογής όλων", "confirmRestoreTitle": "Αποκατάσταση αρχείων", - "confirmRestoreDescription": "Αυτό θα αποκαταστήσει {{count}} αρχεία στην αρχική τους θέση. Αποκαθιστάτε μόνο αρχεία που εμπιστεύεστε.", + "confirmRestoreDescription": "Αυτό θα αποκαταστήσει {{count}} αρχεία στην αρχική τους θέση. Αποκαταστήστε μόνο αρχεία που εμπιστεύεστε.", "confirmRestoreLabel": "Αποκατάσταση τώρα", "confirmDeleteQuarantineTitle": "Οριστική διαγραφή", "confirmDeleteQuarantineDescription": "Αυτό θα διαγράψει οριστικά {{count}} αρχεία σε καραντίνα. Αυτή η ενέργεια δεν μπορεί να αναιρεθεί.", "confirmDeleteQuarantineLabel": "Οριστική διαγραφή", "quarantineLoading": "Φόρτωση καραντίνας...", - "quarantineRestoring": "Γίνεται αποκατάσταση αρχείων...", - "quarantineDeleting": "Γίνεται διαγραφή αρχείων...", + "quarantineRestoring": "Αποκατάσταση αρχείων...", + "quarantineDeleting": "Διαγραφή αρχείων...", "toastRestoreSuccess": "Αποκαταστάθηκαν {{count}} αρχεία", "toastRestoreFailed": "Αποτυχία αποκατάστασης ορισμένων αρχείων", "toastDeleteQuarantineSuccess": "Διαγράφηκαν οριστικά {{count}} αρχεία", diff --git a/src/renderer/src/locales/en/malware.json b/src/renderer/src/locales/en/malware.json index 5c755479..099c0d2b 100644 --- a/src/renderer/src/locales/en/malware.json +++ b/src/renderer/src/locales/en/malware.json @@ -79,10 +79,9 @@ "dbNever": "Never", "dbSource": "Rule Source", "dbSourceCloud": "Cloud (cached)", - "dbSourceBundled": "Bundled with app", "dbSourceNone": "No rules loaded", "dbRuleFiles": "Rule Files", - "dbRuleFilesCounts": "{{bundled}} bundled, {{cached}} from cloud", + "dbRuleFilesCounts": "{{count}} from cloud", "dbUpdateSuccess": "Updated to v{{version}} ({{count}} rules)", "dbAlreadyCurrent": "Signatures are already up to date", "dbUpdateFailed": "Failed to update signatures", diff --git a/src/renderer/src/locales/es/malware.json b/src/renderer/src/locales/es/malware.json index 1bd5b44a..edd0a7c5 100644 --- a/src/renderer/src/locales/es/malware.json +++ b/src/renderer/src/locales/es/malware.json @@ -37,9 +37,9 @@ "actionCompleteDeletion": "Eliminación completada", "actionResultQuarantined": "{{count}} en cuarentena", "actionResultDeleted": "{{count}} eliminadas", - "actionResultFailed": "{{count}} con error", + "actionResultFailed": "{{count}} fallidas", "noThreatsDetectedTitle": "No se detectaron amenazas", - "noThreatsDetectedDescription": "Se analizaron {{filesScanned}} archivos con {{engineCount}} motores en {{duration}} s; su sistema está limpio.", + "noThreatsDetectedDescription": "Se analizaron {{filesScanned}} archivos con {{engineCount}} motores en {{duration}} s: su sistema está limpio.", "emptyStateTitle": "Escáner de malware", "emptyStateDescription": "Haga clic en \"Analizar\" para comprobar si hay malware, adware, mineros de criptomonedas y archivos sospechosos en su sistema.", "detectedThreatsHeading": "Amenazas detectadas", @@ -50,15 +50,15 @@ "threatDetailSize": "Tamaño", "threatDetailPath": "Ruta", "confirmQuarantineTitle": "Poner amenazas en cuarentena", - "confirmQuarantineDescription": "Esto moverá {{count}} amenaza(s) detectada(s) a la cuarentena. Los archivos podrán restaurarse más adelante si es necesario.", + "confirmQuarantineDescription": "Esto moverá {{count}} amenaza(s) detectada(s) a la cuarentena. Los archivos se pueden restaurar más tarde si es necesario.", "confirmQuarantineLabel": "Poner en cuarentena ahora", "confirmDeleteTitle": "Eliminar amenazas", "confirmDeleteDescription": "Esto eliminará permanentemente {{count}} amenaza(s) detectada(s). Esta acción no se puede deshacer.", "confirmDeleteLabel": "Eliminar permanentemente", - "toastScanFailed": "Error al analizar malware", + "toastScanFailed": "Error al analizar en busca de malware", "toastActionFailed": "No se pudieron {{action}} las amenazas", "toastActionFailedDescription": "Intente ejecutar como administrador", - "errorOperationFailed": "La operación falló; intente ejecutar como administrador", + "errorOperationFailed": "La operación falló: intente ejecutar como administrador", "tabScanner": "Escáner", "tabQuarantine": "Cuarentena", "tabDatabase": "Base de datos", @@ -72,15 +72,14 @@ "dbEngineCompiling": "Compilando...", "dbCompiling": "Compilando reglas de firmas ({{loaded}}/{{total}})...", "dbRulesLoaded": "Reglas cargadas", - "dbVersion": "Versión de las firmas", + "dbVersion": "Versión de firmas", "dbLastUpdated": "Última actualización", "dbNever": "Nunca", "dbSource": "Origen de las reglas", "dbSourceCloud": "Nube (en caché)", - "dbSourceBundled": "Incluidas con la aplicación", "dbSourceNone": "No hay reglas cargadas", "dbRuleFiles": "Archivos de reglas", - "dbRuleFilesCounts": "{{bundled}} incluidas, {{cached}} desde la nube", + "dbRuleFilesCounts": "{{count}} desde la nube", "dbUpdateSuccess": "Actualizado a la v{{version}} ({{count}} reglas)", "dbAlreadyCurrent": "Las firmas ya están actualizadas", "dbUpdateFailed": "No se pudieron actualizar las firmas", @@ -110,5 +109,5 @@ "toastRestoreSuccess": "{{count}} archivo(s) restaurado(s)", "toastRestoreFailed": "No se pudieron restaurar algunos archivos", "toastDeleteQuarantineSuccess": "{{count}} archivo(s) eliminado(s) permanentemente", - "toastRestoreNoOriginal": "No se puede restaurar; la ubicación original es desconocida" + "toastRestoreNoOriginal": "No se puede restaurar: ubicación original desconocida" } diff --git a/src/renderer/src/locales/fi/malware.json b/src/renderer/src/locales/fi/malware.json index 9f44e0be..b2ce433a 100644 --- a/src/renderer/src/locales/fi/malware.json +++ b/src/renderer/src/locales/fi/malware.json @@ -1,19 +1,19 @@ { "pageTitle": "Haittaohjelmaskanneri", - "pageDescription": "Monimoottorinen uhkien tunnistus — allekirjoitukset, heuristiikka, skriptianalyysi, järjestelmän eheys ja pysyvyyden tarkistus", + "pageDescription": "Monimoottorinen uhkien tunnistus — signatuurit, heuristiikka, skriptianalyysi, järjestelmän eheys ja pysyvyysskannaus", "scanButtonScanning": "Skannataan...", "scanButton": "Skannaa", - "quarantineButton": "Siirrä karanteeniin", + "quarantineButton": "Aseta karanteeniin", "deleteButton": "Poista", "severityCritical": "Kriittinen", "severityHigh": "Korkea", "severityMedium": "Keskitaso", "severityLow": "Matala", - "sourceDefenderWindows": "Natiivi AV", + "sourceDefenderWindows": "Sisäinen AV", "sourceDefenderMac": "Koodin allekirjoitus", "sourceDefenderLinux": "ClamAV", "sourceHeuristic": "Heuristinen analyysi", - "sourceSignature": "Tunnettu allekirjoitus", + "sourceSignature": "Tunnettu signatuuri", "initializingScanEngines": "Alustetaan skannausmoottoreita...", "filesScanned": "{{count}} tiedostoa skannattu", "threatCount": "{{count}} uhka", @@ -31,11 +31,11 @@ "selectedOfThreats": "{{count}} uhasta", "selectAll": "Valitse kaikki", "deselectAll": "Poista kaikkien valinta", - "actingQuarantining": "Siirretään valittuja uhkia karanteeniin...", + "actingQuarantining": "Asetetaan valittuja uhkia karanteeniin...", "actingDeleting": "Poistetaan valittuja uhkia...", "actionCompleteQuarantine": "Karanteeniin siirto valmis", "actionCompleteDeletion": "Poisto valmis", - "actionResultQuarantined": "{{count}} siirretty karanteeniin", + "actionResultQuarantined": "{{count}} asetettu karanteeniin", "actionResultDeleted": "{{count}} poistettu", "actionResultFailed": "{{count}} epäonnistui", "noThreatsDetectedTitle": "Uhkiä ei havaittu", @@ -49,44 +49,43 @@ "threatDetailFile": "Tiedosto", "threatDetailSize": "Koko", "threatDetailPath": "Polku", - "confirmQuarantineTitle": "Siirrä uhkia karanteeniin", - "confirmQuarantineDescription": "Tämä siirtää {{count}} havaitun uhan karanteeniin. Tiedostot voidaan tarvittaessa palauttaa myöhemmin.", - "confirmQuarantineLabel": "Siirrä karanteeniin nyt", + "confirmQuarantineTitle": "Aseta uhkia karanteeniin", + "confirmQuarantineDescription": "Tämä siirtää {{count}} havaittua uhkaa karanteeniin. Tiedostot voidaan tarvittaessa palauttaa myöhemmin.", + "confirmQuarantineLabel": "Aseta karanteeniin nyt", "confirmDeleteTitle": "Poista uhkia", "confirmDeleteDescription": "Tämä poistaa pysyvästi {{count}} havaittua uhkaa. Tätä toimintoa ei voi kumota.", "confirmDeleteLabel": "Poista pysyvästi", "toastScanFailed": "Haittaohjelmaskannaus epäonnistui", - "toastActionFailed": "Uhien toiminto \"{{action}}\" epäonnistui", + "toastActionFailed": "Uhien toiminto {{action}} epäonnistui", "toastActionFailedDescription": "Yritä suorittaa järjestelmänvalvojana", "errorOperationFailed": "Toiminto epäonnistui — yritä suorittaa järjestelmänvalvojana", "tabScanner": "Skanneri", "tabQuarantine": "Karanteeni", "tabDatabase": "Tietokanta", - "dbTitle": "Allekirjoitustietokanta", + "dbTitle": "Signatuuritietokanta", "dbDescription": "Skannerin käyttämät YARA-haittaohjelmien tunnistussäännöt", "dbFetchLatest": "Tarkista päivitykset", "dbUpdating": "Päivitetään...", "dbEngine": "Moottori", "dbEngineYara": "Kudu Cloud Signatures", - "dbEngineRegex": "Regex-varajärjestelmä", + "dbEngineRegex": "Regex-vararatkaisu", "dbEngineCompiling": "Käännetään...", - "dbCompiling": "Käännetään allekirjoitussääntöjä ({{loaded}}/{{total}})...", - "dbRulesLoaded": "Säännöt ladattu", - "dbVersion": "Allekirjoitusversio", + "dbCompiling": "Käännetään signatuurisääntöjä ({{loaded}}/{{total}})...", + "dbRulesLoaded": "Ladatut säännöt", + "dbVersion": "Signatuuriversio", "dbLastUpdated": "Viimeksi päivitetty", "dbNever": "Ei koskaan", "dbSource": "Sääntöjen lähde", "dbSourceCloud": "Pilvi (välimuistissa)", - "dbSourceBundled": "Sisältyy sovellukseen", - "dbSourceNone": "Sääntöjä ei ladattu", + "dbSourceNone": "Sääntöjä ei ole ladattu", "dbRuleFiles": "Sääntötiedostot", - "dbRuleFilesCounts": "{{bundled}} sisältyy sovellukseen, {{cached}} pilvestä", + "dbRuleFilesCounts": "{{count}} pilvestä", "dbUpdateSuccess": "Päivitetty versioon v{{version}} ({{count}} sääntöä)", - "dbAlreadyCurrent": "Allekirjoitukset ovat jo ajan tasalla", - "dbUpdateFailed": "Allekirjoitusten päivitys epäonnistui", - "quarantineEmptyTitle": "Ei karanteenissa olevia kohteita", + "dbAlreadyCurrent": "Signatuurit ovat jo ajan tasalla", + "dbUpdateFailed": "Signatuurien päivitys epäonnistui", + "quarantineEmptyTitle": "Ei karanteeniin asetettuja kohteita", "quarantineEmptyDescription": "Karanteeniin siirretyt tiedostot näkyvät täällä. Voit palauttaa ne tai poistaa ne pysyvästi.", - "quarantineHeading": "Karanteenissa olevat tiedostot", + "quarantineHeading": "Karanteeniin asetetut tiedostot", "quarantineCount": "{{count}} tiedosto", "quarantineCountPlural": "{{count}} tiedostoa", "quarantineColumnFile": "Tiedosto", @@ -102,7 +101,7 @@ "confirmRestoreDescription": "Tämä palauttaa {{count}} tiedostoa niiden alkuperäiseen sijaintiin. Palauta vain tiedostoja, joihin luotat.", "confirmRestoreLabel": "Palauta nyt", "confirmDeleteQuarantineTitle": "Poista pysyvästi", - "confirmDeleteQuarantineDescription": "Tämä poistaa pysyvästi {{count}} karanteenissa olevaa tiedostoa. Tätä toimintoa ei voi kumota.", + "confirmDeleteQuarantineDescription": "Tämä poistaa pysyvästi {{count}} karanteeniin asetettua tiedostoa. Tätä toimintoa ei voi kumota.", "confirmDeleteQuarantineLabel": "Poista pysyvästi", "quarantineLoading": "Ladataan karanteenia...", "quarantineRestoring": "Palautetaan tiedostoja...", @@ -110,5 +109,5 @@ "toastRestoreSuccess": "{{count}} tiedostoa palautettu", "toastRestoreFailed": "Joidenkin tiedostojen palautus epäonnistui", "toastDeleteQuarantineSuccess": "{{count}} tiedostoa poistettu pysyvästi", - "toastRestoreNoOriginal": "Palautus ei onnistu — alkuperäinen sijainti tuntematon" + "toastRestoreNoOriginal": "Palautus ei onnistu — alkuperäinen sijainti ei ole tiedossa" } diff --git a/src/renderer/src/locales/fr/malware.json b/src/renderer/src/locales/fr/malware.json index e6acaef0..cd573c68 100644 --- a/src/renderer/src/locales/fr/malware.json +++ b/src/renderer/src/locales/fr/malware.json @@ -14,7 +14,7 @@ "sourceDefenderLinux": "ClamAV", "sourceHeuristic": "Analyse heuristique", "sourceSignature": "Signature connue", - "initializingScanEngines": "Initialisation des moteurs d'analyse...", + "initializingScanEngines": "Initialisation des moteurs d’analyse...", "filesScanned": "{{count}} fichiers analysés", "threatCount": "{{count}} menace", "threatCountPlural": "{{count}} menaces", @@ -39,7 +39,7 @@ "actionResultDeleted": "{{count}} supprimées", "actionResultFailed": "{{count}} échecs", "noThreatsDetectedTitle": "Aucune menace détectée", - "noThreatsDetectedDescription": "Analyse de {{filesScanned}} fichiers avec {{engineCount}} moteurs en {{duration}} s — votre système est propre.", + "noThreatsDetectedDescription": "Analyse de {{filesScanned}} fichiers avec {{engineCount}} moteurs en {{duration}}s — votre système est propre.", "emptyStateTitle": "Analyseur de malware", "emptyStateDescription": "Cliquez sur \"Analyser\" pour rechercher des malware, adwares, mineurs de cryptomonnaie et fichiers suspects sur votre système.", "detectedThreatsHeading": "Menaces détectées", @@ -55,15 +55,15 @@ "confirmDeleteTitle": "Supprimer les menaces", "confirmDeleteDescription": "Cette action supprimera définitivement {{count}} menace(s) détectée(s). Cette action est irréversible.", "confirmDeleteLabel": "Supprimer définitivement", - "toastScanFailed": "L'analyse des malware a échoué", - "toastActionFailed": "Échec de l'action {{action}} sur les menaces", - "toastActionFailedDescription": "Essayez d'exécuter en tant qu'administrateur", - "errorOperationFailed": "L'opération a échoué — essayez d'exécuter en tant qu'administrateur", + "toastScanFailed": "L’analyse des malware a échoué", + "toastActionFailed": "Échec de l’action {{action}} sur les menaces", + "toastActionFailedDescription": "Essayez d’exécuter l’application en tant qu’administrateur", + "errorOperationFailed": "L’opération a échoué — essayez d’exécuter l’application en tant qu’administrateur", "tabScanner": "Analyseur", "tabQuarantine": "Quarantaine", "tabDatabase": "Base de données", "dbTitle": "Base de signatures", - "dbDescription": "Règles de détection de malware YARA utilisées par l'analyseur", + "dbDescription": "Règles de détection de malware YARA utilisées par l’analyseur", "dbFetchLatest": "Rechercher des mises à jour", "dbUpdating": "Mise à jour...", "dbEngine": "Moteur", @@ -77,11 +77,10 @@ "dbNever": "Jamais", "dbSource": "Source des règles", "dbSourceCloud": "Cloud (en cache)", - "dbSourceBundled": "Incluses avec l'application", "dbSourceNone": "Aucune règle chargée", "dbRuleFiles": "Fichiers de règles", - "dbRuleFilesCounts": "{{bundled}} incluses, {{cached}} depuis le cloud", - "dbUpdateSuccess": "Mise à jour vers v{{version}} ({{count}} règles)", + "dbRuleFilesCounts": "{{count}} depuis le cloud", + "dbUpdateSuccess": "Mis à jour vers v{{version}} ({{count}} règles)", "dbAlreadyCurrent": "Les signatures sont déjà à jour", "dbUpdateFailed": "Échec de la mise à jour des signatures", "quarantineEmptyTitle": "Aucun élément en quarantaine", @@ -92,14 +91,14 @@ "quarantineColumnFile": "Fichier", "quarantineColumnDate": "Date", "quarantineColumnSize": "Taille", - "quarantineColumnOriginal": "Emplacement d'origine", + "quarantineColumnOriginal": "Emplacement d’origine", "quarantineOriginalUnknown": "Inconnu", "quarantineRestoreButton": "Restaurer", "quarantineDeleteButton": "Supprimer définitivement", "quarantineSelectAll": "Tout sélectionner", "quarantineDeselectAll": "Tout désélectionner", "confirmRestoreTitle": "Restaurer les fichiers", - "confirmRestoreDescription": "Cette action restaurera {{count}} fichier(s) à leur emplacement d'origine. Ne restaurez que les fichiers auxquels vous faites confiance.", + "confirmRestoreDescription": "Cette action restaurera {{count}} fichier(s) à leur emplacement d’origine. Ne restaurez que les fichiers auxquels vous faites confiance.", "confirmRestoreLabel": "Restaurer maintenant", "confirmDeleteQuarantineTitle": "Supprimer définitivement", "confirmDeleteQuarantineDescription": "Cette action supprimera définitivement {{count}} fichier(s) en quarantaine. Cette action est irréversible.", @@ -110,5 +109,5 @@ "toastRestoreSuccess": "{{count}} fichier(s) restauré(s)", "toastRestoreFailed": "Échec de la restauration de certains fichiers", "toastDeleteQuarantineSuccess": "{{count}} fichier(s) supprimé(s) définitivement", - "toastRestoreNoOriginal": "Impossible de restaurer — emplacement d'origine inconnu" + "toastRestoreNoOriginal": "Restauration impossible — emplacement d’origine inconnu" } diff --git a/src/renderer/src/locales/he/malware.json b/src/renderer/src/locales/he/malware.json index 8b87d813..00c42cb0 100644 --- a/src/renderer/src/locales/he/malware.json +++ b/src/renderer/src/locales/he/malware.json @@ -24,7 +24,7 @@ "scanSummarySystemClean": "המערכת נקייה", "scanSummaryThreatsDetected": "{{count}} איומים זוהו", "scanStatFiles": "קבצים", - "scanStatDuration": "משך", + "scanStatDuration": "משך זמן", "scanStatEngines": "מנועים", "severityHeading": "חומרה", "selectedHeading": "נבחרו", @@ -39,7 +39,7 @@ "actionResultDeleted": "{{count}} נמחקו", "actionResultFailed": "{{count}} נכשלו", "noThreatsDetectedTitle": "לא זוהו איומים", - "noThreatsDetectedDescription": "נסרקו {{filesScanned}} קבצים באמצעות {{engineCount}} מנועים במשך {{duration}} שניות — המערכת שלך נקייה.", + "noThreatsDetectedDescription": "נסרקו {{filesScanned}} קבצים באמצעות {{engineCount}} מנועים בתוך {{duration}} שניות — המערכת שלך נקייה.", "emptyStateTitle": "סורק נוזקות", "emptyStateDescription": "לחץ על \"סרוק\" כדי לבדוק את המערכת שלך לאיתור נוזקות, תוכנות פרסום, כורי מטבעות וקבצים חשודים.", "detectedThreatsHeading": "איומים שזוהו", @@ -50,13 +50,13 @@ "threatDetailSize": "גודל", "threatDetailPath": "נתיב", "confirmQuarantineTitle": "העבר איומים להסגר", - "confirmQuarantineDescription": "פעולה זו תעביר {{count}} איומים שזוהו להסגר. ניתן יהיה לשחזר את הקבצים מאוחר יותר במידת הצורך.", + "confirmQuarantineDescription": "פעולה זו תעביר {{count}} איום/איומים שזוהו להסגר. ניתן לשחזר קבצים מאוחר יותר אם יהיה צורך.", "confirmQuarantineLabel": "העבר להסגר כעת", "confirmDeleteTitle": "מחק איומים", - "confirmDeleteDescription": "פעולה זו תמחק לצמיתות {{count}} איומים שזוהו. לא ניתן לבטל פעולה זו.", + "confirmDeleteDescription": "פעולה זו תמחק לצמיתות {{count}} איום/איומים שזוהו. לא ניתן לבטל פעולה זו.", "confirmDeleteLabel": "מחק לצמיתות", "toastScanFailed": "סריקת הנוזקות נכשלה", - "toastActionFailed": "לא ניתן היה {{action}} את האיומים", + "toastActionFailed": "הפעולה {{action}} על האיומים נכשלה", "toastActionFailedDescription": "נסה להפעיל כמנהל מערכת", "errorOperationFailed": "הפעולה נכשלה — נסה להפעיל כמנהל מערכת", "tabScanner": "סורק", @@ -77,10 +77,9 @@ "dbNever": "מעולם לא", "dbSource": "מקור הכללים", "dbSourceCloud": "ענן (במטמון)", - "dbSourceBundled": "כלול ביישום", "dbSourceNone": "לא נטענו כללים", "dbRuleFiles": "קובצי כללים", - "dbRuleFilesCounts": "{{bundled}} כלולים, {{cached}} מהענן", + "dbRuleFilesCounts": "{{count}} מהענן", "dbUpdateSuccess": "עודכן ל-v{{version}} ({{count}} כללים)", "dbAlreadyCurrent": "החתימות כבר מעודכנות", "dbUpdateFailed": "עדכון החתימות נכשל", @@ -99,16 +98,16 @@ "quarantineSelectAll": "בחר הכול", "quarantineDeselectAll": "בטל בחירה של הכול", "confirmRestoreTitle": "שחזר קבצים", - "confirmRestoreDescription": "פעולה זו תשחזר {{count}} קבצים למיקומם המקורי. שחזר רק קבצים שאתה סומך עליהם.", + "confirmRestoreDescription": "פעולה זו תשחזר {{count}} קובץ/קבצים למיקומם המקורי. שחזר רק קבצים שאתה סומך עליהם.", "confirmRestoreLabel": "שחזר כעת", "confirmDeleteQuarantineTitle": "מחק לצמיתות", - "confirmDeleteQuarantineDescription": "פעולה זו תמחק לצמיתות {{count}} קבצים שבהסגר. לא ניתן לבטל פעולה זו.", + "confirmDeleteQuarantineDescription": "פעולה זו תמחק לצמיתות {{count}} קובץ/קבצים שבהסגר. לא ניתן לבטל פעולה זו.", "confirmDeleteQuarantineLabel": "מחק לצמיתות", "quarantineLoading": "טוען הסגר...", "quarantineRestoring": "משחזר קבצים...", "quarantineDeleting": "מוחק קבצים...", - "toastRestoreSuccess": "{{count}} קבצים שוחזרו", + "toastRestoreSuccess": "{{count}} קובץ/קבצים שוחזרו", "toastRestoreFailed": "שחזור חלק מהקבצים נכשל", - "toastDeleteQuarantineSuccess": "{{count}} קבצים נמחקו לצמיתות", + "toastDeleteQuarantineSuccess": "{{count}} קובץ/קבצים נמחקו לצמיתות", "toastRestoreNoOriginal": "לא ניתן לשחזר — המיקום המקורי אינו ידוע" } diff --git a/src/renderer/src/locales/hi/malware.json b/src/renderer/src/locales/hi/malware.json index f485077a..2968c188 100644 --- a/src/renderer/src/locales/hi/malware.json +++ b/src/renderer/src/locales/hi/malware.json @@ -1,6 +1,6 @@ { - "pageTitle": "मैलवेयर स्कैनर", - "pageDescription": "मल्टी-इंजन खतरा पहचान — signatures, heuristics, script analysis, system integrity, और persistence scanning", + "pageTitle": "Malware स्कैनर", + "pageDescription": "मल्टी-इंजन खतरा पहचान — signatures, heuristics, script analysis, system integrity, और persistence स्कैनिंग", "scanButtonScanning": "स्कैन किया जा रहा है...", "scanButton": "स्कैन", "quarantineButton": "क्वारंटीन", @@ -12,7 +12,7 @@ "sourceDefenderWindows": "मूल AV", "sourceDefenderMac": "Code Signing", "sourceDefenderLinux": "ClamAV", - "sourceHeuristic": "Heuristic Analysis", + "sourceHeuristic": "Heuristic विश्लेषण", "sourceSignature": "ज्ञात Signature", "initializingScanEngines": "स्कैन इंजन प्रारंभ किए जा रहे हैं...", "filesScanned": "{{count}} फ़ाइलें स्कैन की गईं", @@ -40,7 +40,7 @@ "actionResultFailed": "{{count}} विफल", "noThreatsDetectedTitle": "कोई खतरा नहीं मिला", "noThreatsDetectedDescription": "{{duration}}s में {{engineCount}} इंजनों पर {{filesScanned}} फ़ाइलें स्कैन की गईं — आपका सिस्टम स्वच्छ है।", - "emptyStateTitle": "मैलवेयर स्कैनर", + "emptyStateTitle": "Malware स्कैनर", "emptyStateDescription": "\"स्कैन\" पर क्लिक करके अपने सिस्टम में malware, adware, crypto miners, और संदिग्ध फ़ाइलों की जाँच करें।", "detectedThreatsHeading": "पाए गए खतरे", "detectedThreatsCount": "{{count}} खतरा", @@ -50,15 +50,15 @@ "threatDetailSize": "आकार", "threatDetailPath": "पथ", "confirmQuarantineTitle": "खतरों को क्वारंटीन करें", - "confirmQuarantineDescription": "इससे पाए गए {{count}} threat(s) क्वारंटीन में भेज दिए जाएँगे। आवश्यकता होने पर फ़ाइलों को बाद में पुनर्स्थापित किया जा सकता है।", + "confirmQuarantineDescription": "इससे पाए गए {{count}} threat(s) को क्वारंटीन में भेज दिया जाएगा। आवश्यकता होने पर फ़ाइलों को बाद में पुनर्स्थापित किया जा सकता है।", "confirmQuarantineLabel": "अभी क्वारंटीन करें", "confirmDeleteTitle": "खतरों को हटाएँ", "confirmDeleteDescription": "इससे पाए गए {{count}} threat(s) स्थायी रूप से हटा दिए जाएँगे। इस क्रिया को पूर्ववत नहीं किया जा सकता।", "confirmDeleteLabel": "स्थायी रूप से हटाएँ", - "toastScanFailed": "मैलवेयर स्कैन विफल हुआ", - "toastActionFailed": "खतरों को {{action}} करने में विफल", - "toastActionFailedDescription": "व्यवस्थापक के रूप में चलाने का प्रयास करें", - "errorOperationFailed": "क्रिया विफल हुई — व्यवस्थापक के रूप में चलाने का प्रयास करें", + "toastScanFailed": "Malware स्कैन विफल हुआ", + "toastActionFailed": "threats को {{action}} करने में विफल", + "toastActionFailedDescription": "प्रशासक के रूप में चलाने का प्रयास करें", + "errorOperationFailed": "क्रिया विफल हुई — प्रशासक के रूप में चलाने का प्रयास करें", "tabScanner": "स्कैनर", "tabQuarantine": "क्वारंटीन", "tabDatabase": "डेटाबेस", @@ -71,16 +71,15 @@ "dbEngineRegex": "Regex Fallback", "dbEngineCompiling": "कंपाइल किया जा रहा है...", "dbCompiling": "Signature rules कंपाइल किए जा रहे हैं ({{loaded}}/{{total}})...", - "dbRulesLoaded": "नियम लोड किए गए", + "dbRulesLoaded": "लोड किए गए नियम", "dbVersion": "Signature संस्करण", "dbLastUpdated": "अंतिम अपडेट", "dbNever": "कभी नहीं", "dbSource": "नियम स्रोत", "dbSourceCloud": "Cloud (cached)", - "dbSourceBundled": "ऐप के साथ शामिल", - "dbSourceNone": "कोई नियम लोड नहीं किए गए", + "dbSourceNone": "कोई नियम लोड नहीं किया गया", "dbRuleFiles": "नियम फ़ाइलें", - "dbRuleFilesCounts": "{{bundled}} शामिल, {{cached}} cloud से", + "dbRuleFilesCounts": "{{count}} cloud से", "dbUpdateSuccess": "v{{version}} में अपडेट किया गया ({{count}} नियम)", "dbAlreadyCurrent": "Signatures पहले से अद्यतित हैं", "dbUpdateFailed": "Signatures अपडेट करने में विफल", @@ -99,7 +98,7 @@ "quarantineSelectAll": "सभी चुनें", "quarantineDeselectAll": "सभी का चयन हटाएँ", "confirmRestoreTitle": "फ़ाइलें पुनर्स्थापित करें", - "confirmRestoreDescription": "इससे {{count}} file(s) उनके मूल स्थान पर पुनर्स्थापित कर दी जाएँगी। केवल उन्हीं फ़ाइलों को पुनर्स्थापित करें जिन पर आप भरोसा करते हैं।", + "confirmRestoreDescription": "इससे {{count}} file(s) को उनके मूल स्थान पर पुनर्स्थापित किया जाएगा। केवल उन्हीं फ़ाइलों को पुनर्स्थापित करें जिन पर आप भरोसा करते हैं।", "confirmRestoreLabel": "अभी पुनर्स्थापित करें", "confirmDeleteQuarantineTitle": "स्थायी रूप से हटाएँ", "confirmDeleteQuarantineDescription": "इससे {{count}} quarantined file(s) स्थायी रूप से हटा दी जाएँगी। इस क्रिया को पूर्ववत नहीं किया जा सकता।", @@ -108,7 +107,7 @@ "quarantineRestoring": "फ़ाइलें पुनर्स्थापित की जा रही हैं...", "quarantineDeleting": "फ़ाइलें हटाई जा रही हैं...", "toastRestoreSuccess": "{{count}} file(s) पुनर्स्थापित की गईं", - "toastRestoreFailed": "कुछ फ़ाइलें पुनर्स्थापित करने में विफल", + "toastRestoreFailed": "कुछ फ़ाइलों को पुनर्स्थापित करने में विफल", "toastDeleteQuarantineSuccess": "{{count}} file(s) स्थायी रूप से हटाई गईं", "toastRestoreNoOriginal": "पुनर्स्थापित नहीं किया जा सकता — मूल स्थान अज्ञात है" } diff --git a/src/renderer/src/locales/hu/malware.json b/src/renderer/src/locales/hu/malware.json index 67af93a7..5563dfc0 100644 --- a/src/renderer/src/locales/hu/malware.json +++ b/src/renderer/src/locales/hu/malware.json @@ -1,5 +1,5 @@ { - "pageTitle": "Kártevőkereső", + "pageTitle": "Kártevő-ellenőrző", "pageDescription": "Többmotoros fenyegetésészlelés — szignatúrák, heurisztika, szkriptelemzés, rendszerintegritás és perzisztencia vizsgálata", "scanButtonScanning": "Vizsgálat folyamatban...", "scanButton": "Vizsgálat", @@ -38,10 +38,10 @@ "actionResultQuarantined": "{{count}} karanténba helyezve", "actionResultDeleted": "{{count}} törölve", "actionResultFailed": "{{count}} sikertelen", - "noThreatsDetectedTitle": "Nem észleltünk fenyegetést", + "noThreatsDetectedTitle": "Nem észlelhető fenyegetés", "noThreatsDetectedDescription": "{{filesScanned}} fájl vizsgálva {{engineCount}} motorral {{duration}} mp alatt — a rendszer tiszta.", - "emptyStateTitle": "Kártevőkereső", - "emptyStateDescription": "Kattintson a „Vizsgálat” gombra a rendszer kártevők, reklámprogramok, kriptobányászok és gyanús fájlok kereséséhez.", + "emptyStateTitle": "Kártevő-ellenőrző", + "emptyStateDescription": "Kattintson a „Vizsgálat” gombra a rendszer kártevők, reklámprogramok, kriptobányászok és gyanús fájlok ellenőrzéséhez.", "detectedThreatsHeading": "Észlelt fenyegetések", "detectedThreatsCount": "{{count}} fenyegetés", "detectedThreatsCountPlural": "{{count}} fenyegetés", @@ -59,11 +59,11 @@ "toastActionFailed": "Nem sikerült a fenyegetések {{action}} művelete", "toastActionFailedDescription": "Próbálja rendszergazdaként futtatni", "errorOperationFailed": "A művelet sikertelen — próbálja rendszergazdaként futtatni", - "tabScanner": "Kereső", + "tabScanner": "Ellenőrző", "tabQuarantine": "Karantén", "tabDatabase": "Adatbázis", - "dbTitle": "Szignatúraadatbázis", - "dbDescription": "A kereső által használt YARA kártevőészlelési szabályok", + "dbTitle": "Szignatúra-adatbázis", + "dbDescription": "Az ellenőrző által használt YARA kártevőészlelési szabályok", "dbFetchLatest": "Frissítések keresése", "dbUpdating": "Frissítés...", "dbEngine": "Motor", @@ -77,10 +77,9 @@ "dbNever": "Soha", "dbSource": "Szabályforrás", "dbSourceCloud": "Felhő (gyorsítótárazva)", - "dbSourceBundled": "Az alkalmazással együtt", - "dbSourceNone": "Nincs betöltött szabály", + "dbSourceNone": "Nincsenek betöltött szabályok", "dbRuleFiles": "Szabályfájlok", - "dbRuleFilesCounts": "{{bundled}} beépített, {{cached}} a felhőből", + "dbRuleFilesCounts": "{{count}} a felhőből", "dbUpdateSuccess": "Frissítve erre: v{{version}} ({{count}} szabály)", "dbAlreadyCurrent": "A szignatúrák már naprakészek", "dbUpdateFailed": "Nem sikerült frissíteni a szignatúrákat", @@ -99,7 +98,7 @@ "quarantineSelectAll": "Összes kijelölése", "quarantineDeselectAll": "Kijelölés megszüntetése", "confirmRestoreTitle": "Fájlok visszaállítása", - "confirmRestoreDescription": "Ez a művelet visszaállít {{count}} fájl(oka)t az eredeti helyére. Csak olyan fájlokat állítson vissza, amelyekben megbízik.", + "confirmRestoreDescription": "Ez a művelet {{count}} fájl(oka)t állít vissza az eredeti helyére. Csak megbízható fájlokat állítson vissza.", "confirmRestoreLabel": "Visszaállítás most", "confirmDeleteQuarantineTitle": "Végleges törlés", "confirmDeleteQuarantineDescription": "Ez a művelet véglegesen törli a(z) {{count}} karanténba helyezett fájl(oka)t. Ez a művelet nem vonható vissza.", diff --git a/src/renderer/src/locales/id/malware.json b/src/renderer/src/locales/id/malware.json index 1a10cbbf..b5ac1275 100644 --- a/src/renderer/src/locales/id/malware.json +++ b/src/renderer/src/locales/id/malware.json @@ -9,7 +9,7 @@ "severityHigh": "Tinggi", "severityMedium": "Sedang", "severityLow": "Rendah", - "sourceDefenderWindows": "AV Bawaan", + "sourceDefenderWindows": "AV bawaan", "sourceDefenderMac": "Penandatanganan Kode", "sourceDefenderLinux": "ClamAV", "sourceHeuristic": "Analisis Heuristik", @@ -53,7 +53,7 @@ "confirmQuarantineDescription": "Ini akan memindahkan {{count}} ancaman yang terdeteksi ke karantina. File dapat dipulihkan nanti jika diperlukan.", "confirmQuarantineLabel": "Karantina Sekarang", "confirmDeleteTitle": "Hapus Ancaman", - "confirmDeleteDescription": "Ini akan menghapus permanen {{count}} ancaman yang terdeteksi. Tindakan ini tidak dapat dibatalkan.", + "confirmDeleteDescription": "Ini akan menghapus {{count}} ancaman yang terdeteksi secara permanen. Tindakan ini tidak dapat dibatalkan.", "confirmDeleteLabel": "Hapus Permanen", "toastScanFailed": "Pemindaian malware gagal", "toastActionFailed": "Gagal {{action}} ancaman", @@ -68,7 +68,7 @@ "dbUpdating": "Memperbarui...", "dbEngine": "Engine", "dbEngineYara": "Kudu Cloud Signatures", - "dbEngineRegex": "Fallback Regex", + "dbEngineRegex": "Regex Fallback", "dbEngineCompiling": "Mengompilasi...", "dbCompiling": "Mengompilasi aturan signature ({{loaded}}/{{total}})...", "dbRulesLoaded": "Aturan Dimuat", @@ -77,23 +77,22 @@ "dbNever": "Tidak Pernah", "dbSource": "Sumber Aturan", "dbSourceCloud": "Cloud (di-cache)", - "dbSourceBundled": "Disertakan dengan aplikasi", "dbSourceNone": "Tidak ada aturan yang dimuat", "dbRuleFiles": "File Aturan", - "dbRuleFilesCounts": "{{bundled}} disertakan, {{cached}} dari cloud", + "dbRuleFilesCounts": "{{count}} dari cloud", "dbUpdateSuccess": "Diperbarui ke v{{version}} ({{count}} aturan)", "dbAlreadyCurrent": "Signature sudah yang terbaru", "dbUpdateFailed": "Gagal memperbarui signature", - "quarantineEmptyTitle": "Tidak Ada Item di Karantina", + "quarantineEmptyTitle": "Tidak Ada Item dalam Karantina", "quarantineEmptyDescription": "File yang dipindahkan ke karantina akan muncul di sini. Anda dapat memulihkan atau menghapusnya secara permanen.", - "quarantineHeading": "File di Karantina", + "quarantineHeading": "File dalam Karantina", "quarantineCount": "{{count}} file", "quarantineCountPlural": "{{count}} file", "quarantineColumnFile": "File", "quarantineColumnDate": "Tanggal", "quarantineColumnSize": "Ukuran", "quarantineColumnOriginal": "Lokasi Asal", - "quarantineOriginalUnknown": "Tidak diketahui", + "quarantineOriginalUnknown": "Tidak Diketahui", "quarantineRestoreButton": "Pulihkan", "quarantineDeleteButton": "Hapus Permanen", "quarantineSelectAll": "Pilih Semua", @@ -102,13 +101,13 @@ "confirmRestoreDescription": "Ini akan memulihkan {{count}} file ke lokasi asalnya. Pulihkan hanya file yang Anda percayai.", "confirmRestoreLabel": "Pulihkan Sekarang", "confirmDeleteQuarantineTitle": "Hapus Permanen", - "confirmDeleteQuarantineDescription": "Ini akan menghapus permanen {{count}} file yang dikarantina. Tindakan ini tidak dapat dibatalkan.", + "confirmDeleteQuarantineDescription": "Ini akan menghapus {{count}} file dalam karantina secara permanen. Tindakan ini tidak dapat dibatalkan.", "confirmDeleteQuarantineLabel": "Hapus Permanen", "quarantineLoading": "Memuat karantina...", "quarantineRestoring": "Memulihkan file...", "quarantineDeleting": "Menghapus file...", "toastRestoreSuccess": "{{count}} file dipulihkan", "toastRestoreFailed": "Gagal memulihkan beberapa file", - "toastDeleteQuarantineSuccess": "{{count}} file dihapus permanen", + "toastDeleteQuarantineSuccess": "{{count}} file dihapus secara permanen", "toastRestoreNoOriginal": "Tidak dapat memulihkan — lokasi asal tidak diketahui" } diff --git a/src/renderer/src/locales/it/malware.json b/src/renderer/src/locales/it/malware.json index 541b60a7..1d636a58 100644 --- a/src/renderer/src/locales/it/malware.json +++ b/src/renderer/src/locales/it/malware.json @@ -18,7 +18,7 @@ "filesScanned": "{{count}} file analizzati", "threatCount": "{{count}} minaccia", "threatCountPlural": "{{count}} minacce", - "threatFound": "{{count}} trovate", + "threatFound": "{{count}} trovata", "scanCategoryClean": "pulito", "scanCategoryNA": "N/D", "scanSummarySystemClean": "Sistema pulito", @@ -35,11 +35,11 @@ "actingDeleting": "Eliminazione delle minacce selezionate...", "actionCompleteQuarantine": "Quarantena completata", "actionCompleteDeletion": "Eliminazione completata", - "actionResultQuarantined": "{{count}} in quarantena", + "actionResultQuarantined": "{{count}} messe in quarantena", "actionResultDeleted": "{{count}} eliminate", "actionResultFailed": "{{count}} non riuscite", "noThreatsDetectedTitle": "Nessuna minaccia rilevata", - "noThreatsDetectedDescription": "Analizzati {{filesScanned}} file con {{engineCount}} motori in {{duration}} s — il sistema è pulito.", + "noThreatsDetectedDescription": "Analizzati {{filesScanned}} file con {{engineCount}} motori in {{duration}}s — il sistema è pulito.", "emptyStateTitle": "Scanner malware", "emptyStateDescription": "Fai clic su \"Scansiona\" per controllare il sistema alla ricerca di malware, adware, crypto miner e file sospetti.", "detectedThreatsHeading": "Minacce rilevate", @@ -63,8 +63,8 @@ "tabQuarantine": "Quarantena", "tabDatabase": "Database", "dbTitle": "Database delle firme", - "dbDescription": "Regole YARA di rilevamento malware utilizzate dallo scanner", - "dbFetchLatest": "Verifica aggiornamenti", + "dbDescription": "Regole di rilevamento malware YARA utilizzate dallo scanner", + "dbFetchLatest": "Controlla aggiornamenti", "dbUpdating": "Aggiornamento in corso...", "dbEngine": "Motore", "dbEngineYara": "Kudu Cloud Signatures", @@ -77,10 +77,9 @@ "dbNever": "Mai", "dbSource": "Origine delle regole", "dbSourceCloud": "Cloud (in cache)", - "dbSourceBundled": "Incluso nell'app", "dbSourceNone": "Nessuna regola caricata", "dbRuleFiles": "File delle regole", - "dbRuleFilesCounts": "{{bundled}} inclusi, {{cached}} dal cloud", + "dbRuleFilesCounts": "{{count}} dal cloud", "dbUpdateSuccess": "Aggiornato alla v{{version}} ({{count}} regole)", "dbAlreadyCurrent": "Le firme sono già aggiornate", "dbUpdateFailed": "Aggiornamento delle firme non riuscito", @@ -105,8 +104,8 @@ "confirmDeleteQuarantineDescription": "Questa operazione eliminerà definitivamente {{count}} file in quarantena. L'azione non può essere annullata.", "confirmDeleteQuarantineLabel": "Elimina definitivamente", "quarantineLoading": "Caricamento della quarantena...", - "quarantineRestoring": "Ripristino dei file...", - "quarantineDeleting": "Eliminazione dei file...", + "quarantineRestoring": "Ripristino dei file in corso...", + "quarantineDeleting": "Eliminazione dei file in corso...", "toastRestoreSuccess": "{{count}} file ripristinati", "toastRestoreFailed": "Impossibile ripristinare alcuni file", "toastDeleteQuarantineSuccess": "{{count}} file eliminati definitivamente", diff --git a/src/renderer/src/locales/ja/malware.json b/src/renderer/src/locales/ja/malware.json index fa5b9188..afbd9dec 100644 --- a/src/renderer/src/locales/ja/malware.json +++ b/src/renderer/src/locales/ja/malware.json @@ -41,7 +41,7 @@ "noThreatsDetectedTitle": "脅威は検出されませんでした", "noThreatsDetectedDescription": "{{engineCount}} 個のエンジンで {{filesScanned}} 個のファイルを {{duration}} 秒でスキャンしました — システムはクリーンです。", "emptyStateTitle": "マルウェア スキャナー", - "emptyStateDescription": "「スキャン」をクリックして、システム内のマルウェア、アドウェア、暗号資産マイナー、不審なファイルを確認します。", + "emptyStateDescription": "「スキャン」をクリックして、システムにマルウェア、アドウェア、暗号通貨マイナー、不審なファイルがないか確認します。", "detectedThreatsHeading": "検出された脅威", "detectedThreatsCount": "{{count}} 件の脅威", "detectedThreatsCountPlural": "{{count}} 件の脅威", @@ -71,16 +71,15 @@ "dbEngineRegex": "Regex フォールバック", "dbEngineCompiling": "コンパイルしています...", "dbCompiling": "シグネチャ ルールをコンパイルしています ({{loaded}}/{{total}})...", - "dbRulesLoaded": "読み込まれたルール", - "dbVersion": "シグネチャのバージョン", + "dbRulesLoaded": "読み込み済みルール", + "dbVersion": "シグネチャ バージョン", "dbLastUpdated": "最終更新", "dbNever": "なし", "dbSource": "ルール ソース", "dbSourceCloud": "クラウド (キャッシュ済み)", - "dbSourceBundled": "アプリに同梱", "dbSourceNone": "ルールが読み込まれていません", "dbRuleFiles": "ルール ファイル", - "dbRuleFilesCounts": "同梱 {{bundled}}、クラウド {{cached}}", + "dbRuleFilesCounts": "クラウドから {{count}} 件", "dbUpdateSuccess": "v{{version}} に更新しました ({{count}} ルール)", "dbAlreadyCurrent": "シグネチャはすでに最新です", "dbUpdateFailed": "シグネチャの更新に失敗しました", diff --git a/src/renderer/src/locales/ko/malware.json b/src/renderer/src/locales/ko/malware.json index 4de471cc..689ff2df 100644 --- a/src/renderer/src/locales/ko/malware.json +++ b/src/renderer/src/locales/ko/malware.json @@ -1,5 +1,5 @@ { - "pageTitle": "멀웨어 스캐너", + "pageTitle": "악성코드 검사기", "pageDescription": "다중 엔진 위협 탐지 — 시그니처, 휴리스틱, 스크립트 분석, 시스템 무결성 및 지속성 검사", "scanButtonScanning": "검사 중...", "scanButton": "검사", @@ -18,7 +18,7 @@ "filesScanned": "{{count}}개 파일 검사됨", "threatCount": "{{count}}개 위협", "threatCountPlural": "{{count}}개 위협", - "threatFound": "{{count}}개 발견됨", + "threatFound": "{{count}}개 발견", "scanCategoryClean": "정상", "scanCategoryNA": "해당 없음", "scanSummarySystemClean": "시스템 정상", @@ -39,9 +39,9 @@ "actionResultDeleted": "{{count}}개 삭제됨", "actionResultFailed": "{{count}}개 실패", "noThreatsDetectedTitle": "탐지된 위협 없음", - "noThreatsDetectedDescription": "{{engineCount}}개 엔진으로 {{filesScanned}}개 파일을 {{duration}}초 동안 검사했습니다 — 시스템이 정상입니다.", - "emptyStateTitle": "멀웨어 스캐너", - "emptyStateDescription": "\"검사\"를 클릭하여 시스템에서 멀웨어, 애드웨어, 암호화폐 채굴기 및 의심스러운 파일을 확인하세요.", + "noThreatsDetectedDescription": "{{duration}}초 동안 {{engineCount}}개 엔진으로 {{filesScanned}}개 파일을 검사했습니다 — 시스템이 정상입니다.", + "emptyStateTitle": "악성코드 검사기", + "emptyStateDescription": "\"검사\"를 클릭하여 시스템에서 악성코드, 애드웨어, 암호화폐 채굴기 및 의심스러운 파일을 확인하세요.", "detectedThreatsHeading": "탐지된 위협", "detectedThreatsCount": "{{count}}개 위협", "detectedThreatsCountPlural": "{{count}}개 위협", @@ -55,15 +55,15 @@ "confirmDeleteTitle": "위협 삭제", "confirmDeleteDescription": "탐지된 위협 {{count}}개를 영구적으로 삭제합니다. 이 작업은 되돌릴 수 없습니다.", "confirmDeleteLabel": "영구 삭제", - "toastScanFailed": "멀웨어 검사 실패", - "toastActionFailed": "위협 {{action}} 실패", + "toastScanFailed": "악성코드 검사에 실패했습니다", + "toastActionFailed": "위협 {{action}}에 실패했습니다", "toastActionFailedDescription": "관리자 권한으로 실행해 보세요", - "errorOperationFailed": "작업 실패 — 관리자 권한으로 실행해 보세요", - "tabScanner": "스캐너", + "errorOperationFailed": "작업에 실패했습니다 — 관리자 권한으로 실행해 보세요", + "tabScanner": "검사기", "tabQuarantine": "격리", "tabDatabase": "데이터베이스", "dbTitle": "시그니처 데이터베이스", - "dbDescription": "스캐너에서 사용하는 YARA 멀웨어 탐지 규칙", + "dbDescription": "검사기에서 사용하는 YARA 악성코드 탐지 규칙", "dbFetchLatest": "업데이트 확인", "dbUpdating": "업데이트 중...", "dbEngine": "엔진", @@ -75,15 +75,14 @@ "dbVersion": "시그니처 버전", "dbLastUpdated": "마지막 업데이트", "dbNever": "없음", - "dbSource": "규칙 소스", + "dbSource": "규칙 원본", "dbSourceCloud": "클라우드(캐시됨)", - "dbSourceBundled": "앱에 포함됨", "dbSourceNone": "로드된 규칙 없음", "dbRuleFiles": "규칙 파일", - "dbRuleFilesCounts": "기본 제공 {{bundled}}개, 클라우드 {{cached}}개", + "dbRuleFilesCounts": "클라우드에서 {{count}}개", "dbUpdateSuccess": "v{{version}}로 업데이트됨 (규칙 {{count}}개)", "dbAlreadyCurrent": "시그니처가 이미 최신 상태입니다", - "dbUpdateFailed": "시그니처 업데이트 실패", + "dbUpdateFailed": "시그니처 업데이트에 실패했습니다", "quarantineEmptyTitle": "격리된 항목 없음", "quarantineEmptyDescription": "격리로 이동된 파일이 여기에 표시됩니다. 파일을 복원하거나 영구적으로 삭제할 수 있습니다.", "quarantineHeading": "격리된 파일", diff --git a/src/renderer/src/locales/ms/malware.json b/src/renderer/src/locales/ms/malware.json index 4932a540..d6362467 100644 --- a/src/renderer/src/locales/ms/malware.json +++ b/src/renderer/src/locales/ms/malware.json @@ -1,7 +1,7 @@ { "pageTitle": "Pengimbas Malware", "pageDescription": "Pengesanan ancaman berbilang enjin — tandatangan, heuristik, analisis skrip, integriti sistem dan pengimbasan ketekalan", - "scanButtonScanning": "Mengimbas...", + "scanButtonScanning": "Sedang mengimbas...", "scanButton": "Imbas", "quarantineButton": "Kuarantin", "deleteButton": "Padam", @@ -39,7 +39,7 @@ "actionResultDeleted": "{{count}} dipadam", "actionResultFailed": "{{count}} gagal", "noThreatsDetectedTitle": "Tiada Ancaman Dikesan", - "noThreatsDetectedDescription": "Mengimbas {{filesScanned}} fail merentas {{engineCount}} enjin dalam {{duration}}s — sistem anda bersih.", + "noThreatsDetectedDescription": "Sebanyak {{filesScanned}} fail telah diimbas merentas {{engineCount}} enjin dalam {{duration}}s — sistem anda bersih.", "emptyStateTitle": "Pengimbas Malware", "emptyStateDescription": "Klik \"Imbas\" untuk memeriksa sistem anda bagi malware, adware, pelombong kripto dan fail yang mencurigakan.", "detectedThreatsHeading": "Ancaman Dikesan", @@ -65,22 +65,21 @@ "dbTitle": "Pangkalan Data Tandatangan", "dbDescription": "Peraturan pengesanan malware YARA yang digunakan oleh pengimbas", "dbFetchLatest": "Semak Kemas Kini", - "dbUpdating": "Mengemas kini...", + "dbUpdating": "Sedang mengemas kini...", "dbEngine": "Enjin", - "dbEngineYara": "Kudu Cloud Signatures", + "dbEngineYara": "Tandatangan Awan Kudu", "dbEngineRegex": "Sandaran Regex", - "dbEngineCompiling": "Menyusun...", + "dbEngineCompiling": "Sedang menyusun...", "dbCompiling": "Menyusun peraturan tandatangan ({{loaded}}/{{total}})...", "dbRulesLoaded": "Peraturan Dimuatkan", "dbVersion": "Versi Tandatangan", - "dbLastUpdated": "Terakhir Dikemas Kini", + "dbLastUpdated": "Kemas Kini Terakhir", "dbNever": "Tidak Pernah", "dbSource": "Sumber Peraturan", - "dbSourceCloud": "Cloud (cache)", - "dbSourceBundled": "Disertakan dengan aplikasi", + "dbSourceCloud": "Awan (dicache)", "dbSourceNone": "Tiada peraturan dimuatkan", "dbRuleFiles": "Fail Peraturan", - "dbRuleFilesCounts": "{{bundled}} disertakan, {{cached}} dari cloud", + "dbRuleFilesCounts": "{{count}} dari cloud", "dbUpdateSuccess": "Dikemas kini ke v{{version}} ({{count}} peraturan)", "dbAlreadyCurrent": "Tandatangan sudah pun terkini", "dbUpdateFailed": "Gagal mengemas kini tandatangan", diff --git a/src/renderer/src/locales/nl/malware.json b/src/renderer/src/locales/nl/malware.json index 00aa0c6f..9b5a1b76 100644 --- a/src/renderer/src/locales/nl/malware.json +++ b/src/renderer/src/locales/nl/malware.json @@ -20,7 +20,7 @@ "threatCountPlural": "{{count}} bedreigingen", "threatFound": "{{count}} gevonden", "scanCategoryClean": "schoon", - "scanCategoryNA": "n.v.t.", + "scanCategoryNA": "N.v.t.", "scanSummarySystemClean": "Systeem schoon", "scanSummaryThreatsDetected": "{{count}} bedreigingen gedetecteerd", "scanStatFiles": "Bestanden", @@ -31,9 +31,9 @@ "selectedOfThreats": "van {{count}} bedreigingen", "selectAll": "Alles selecteren", "deselectAll": "Alles deselecteren", - "actingQuarantining": "Geselecteerde bedreigingen in quarantaine plaatsen...", - "actingDeleting": "Geselecteerde bedreigingen verwijderen...", - "actionCompleteQuarantine": "In quarantaine plaatsen voltooid", + "actingQuarantining": "Geselecteerde bedreigingen worden in quarantaine geplaatst...", + "actingDeleting": "Geselecteerde bedreigingen worden verwijderd...", + "actionCompleteQuarantine": "Quarantaine voltooid", "actionCompleteDeletion": "Verwijderen voltooid", "actionResultQuarantined": "{{count}} in quarantaine geplaatst", "actionResultDeleted": "{{count}} verwijderd", @@ -50,13 +50,13 @@ "threatDetailSize": "Grootte", "threatDetailPath": "Pad", "confirmQuarantineTitle": "Bedreigingen in quarantaine plaatsen", - "confirmQuarantineDescription": "Hiermee worden {{count}} gedetecteerde bedreiging(en) naar quarantaine verplaatst. Bestanden kunnen later indien nodig worden hersteld.", + "confirmQuarantineDescription": "Hiermee worden {{count}} gedetecteerde bedreiging(en) naar de quarantaine verplaatst. Bestanden kunnen later indien nodig worden hersteld.", "confirmQuarantineLabel": "Nu in quarantaine plaatsen", "confirmDeleteTitle": "Bedreigingen verwijderen", "confirmDeleteDescription": "Hiermee worden {{count}} gedetecteerde bedreiging(en) permanent verwijderd. Deze actie kan niet ongedaan worden gemaakt.", "confirmDeleteLabel": "Permanent verwijderen", "toastScanFailed": "Malwarescan mislukt", - "toastActionFailed": "Bedreigingen konden niet worden {{action}}", + "toastActionFailed": "Kan bedreigingen niet {{action}}", "toastActionFailedDescription": "Probeer uit te voeren als administrator", "errorOperationFailed": "Bewerking mislukt — probeer uit te voeren als administrator", "tabScanner": "Scanner", @@ -72,20 +72,19 @@ "dbEngineCompiling": "Compileren...", "dbCompiling": "Handtekeningregels compileren ({{loaded}}/{{total}})...", "dbRulesLoaded": "Regels geladen", - "dbVersion": "Handtekeningversie", + "dbVersion": "Handtekeningenversie", "dbLastUpdated": "Laatst bijgewerkt", "dbNever": "Nooit", - "dbSource": "Bron van regels", + "dbSource": "Regelbron", "dbSourceCloud": "Cloud (in cache)", - "dbSourceBundled": "Meegeleverd met app", "dbSourceNone": "Geen regels geladen", "dbRuleFiles": "Regelbestanden", - "dbRuleFilesCounts": "{{bundled}} meegeleverd, {{cached}} uit de cloud", + "dbRuleFilesCounts": "{{count}} uit de cloud", "dbUpdateSuccess": "Bijgewerkt naar v{{version}} ({{count}} regels)", "dbAlreadyCurrent": "Handtekeningen zijn al up-to-date", "dbUpdateFailed": "Bijwerken van handtekeningen mislukt", "quarantineEmptyTitle": "Geen items in quarantaine", - "quarantineEmptyDescription": "Bestanden die naar quarantaine zijn verplaatst, worden hier weergegeven. U kunt ze herstellen of permanent verwijderen.", + "quarantineEmptyDescription": "Bestanden die naar de quarantaine zijn verplaatst, verschijnen hier. U kunt ze herstellen of permanent verwijderen.", "quarantineHeading": "Bestanden in quarantaine", "quarantineCount": "{{count}} bestand", "quarantineCountPlural": "{{count}} bestanden", @@ -108,7 +107,7 @@ "quarantineRestoring": "Bestanden herstellen...", "quarantineDeleting": "Bestanden verwijderen...", "toastRestoreSuccess": "{{count}} bestand(en) hersteld", - "toastRestoreFailed": "Sommige bestanden konden niet worden hersteld", + "toastRestoreFailed": "Herstellen van sommige bestanden mislukt", "toastDeleteQuarantineSuccess": "{{count}} bestand(en) permanent verwijderd", "toastRestoreNoOriginal": "Kan niet herstellen — oorspronkelijke locatie onbekend" } diff --git a/src/renderer/src/locales/no/malware.json b/src/renderer/src/locales/no/malware.json index 569e5c3a..b4879019 100644 --- a/src/renderer/src/locales/no/malware.json +++ b/src/renderer/src/locales/no/malware.json @@ -1,6 +1,6 @@ { "pageTitle": "Skanner for skadelig programvare", - "pageDescription": "Trusseldeteksjon med flere motorer — signaturer, heuristikk, skriptanalyse, systemintegritet og skanning av persistens", + "pageDescription": "Fleremotors trusseldeteksjon — signaturer, heuristikk, skriptanalyse, systemintegritet og skanning av vedvarende trusler", "scanButtonScanning": "Skanner...", "scanButton": "Skann", "quarantineButton": "Sett i karantene", @@ -30,7 +30,7 @@ "selectedHeading": "Valgt", "selectedOfThreats": "av {{count}} trusler", "selectAll": "Velg alle", - "deselectAll": "Fjern alle valg", + "deselectAll": "Fjern markering av alle", "actingQuarantining": "Setter valgte trusler i karantene...", "actingDeleting": "Sletter valgte trusler...", "actionCompleteQuarantine": "Karantene fullført", @@ -41,7 +41,7 @@ "noThreatsDetectedTitle": "Ingen trusler oppdaget", "noThreatsDetectedDescription": "Skannet {{filesScanned}} filer med {{engineCount}} motorer på {{duration}} s — systemet ditt er rent.", "emptyStateTitle": "Skanner for skadelig programvare", - "emptyStateDescription": "Klikk på \"Skann\" for å kontrollere systemet ditt for skadelig programvare, reklameprogrammer, kryptoutvinnere og mistenkelige filer.", + "emptyStateDescription": "Klikk på \"Skann\" for å kontrollere systemet for skadelig programvare, reklameprogrammer, kryptoutvinnere og mistenkelige filer.", "detectedThreatsHeading": "Oppdagede trusler", "detectedThreatsCount": "{{count}} trussel", "detectedThreatsCountPlural": "{{count}} trusler", @@ -63,7 +63,7 @@ "tabQuarantine": "Karantene", "tabDatabase": "Database", "dbTitle": "Signaturdatabase", - "dbDescription": "YARA-regler for deteksjon av skadelig programvare brukt av skanneren", + "dbDescription": "YARA-regler for oppdagelse av skadelig programvare brukt av skanneren", "dbFetchLatest": "Se etter oppdateringer", "dbUpdating": "Oppdaterer...", "dbEngine": "Motor", @@ -76,11 +76,10 @@ "dbLastUpdated": "Sist oppdatert", "dbNever": "Aldri", "dbSource": "Regelkilde", - "dbSourceCloud": "Sky (bufret)", - "dbSourceBundled": "Levert med appen", + "dbSourceCloud": "Sky (hurtigbufret)", "dbSourceNone": "Ingen regler lastet inn", "dbRuleFiles": "Regelfiler", - "dbRuleFilesCounts": "{{bundled}} levert med appen, {{cached}} fra skyen", + "dbRuleFilesCounts": "{{count}} fra skyen", "dbUpdateSuccess": "Oppdatert til v{{version}} ({{count}} regler)", "dbAlreadyCurrent": "Signaturene er allerede oppdatert", "dbUpdateFailed": "Kunne ikke oppdatere signaturene", @@ -97,7 +96,7 @@ "quarantineRestoreButton": "Gjenopprett", "quarantineDeleteButton": "Slett permanent", "quarantineSelectAll": "Velg alle", - "quarantineDeselectAll": "Fjern alle valg", + "quarantineDeselectAll": "Fjern markering av alle", "confirmRestoreTitle": "Gjenopprett filer", "confirmRestoreDescription": "Dette vil gjenopprette {{count}} fil(er) til den opprinnelige plasseringen. Gjenopprett bare filer du stoler på.", "confirmRestoreLabel": "Gjenopprett nå", diff --git a/src/renderer/src/locales/pl/malware.json b/src/renderer/src/locales/pl/malware.json index a9e87766..61b34bf5 100644 --- a/src/renderer/src/locales/pl/malware.json +++ b/src/renderer/src/locales/pl/malware.json @@ -1,9 +1,9 @@ { "pageTitle": "Skaner malware", - "pageDescription": "Wykrywanie zagrożeń wieloma silnikami — sygnatury, heurystyka, analiza skryptów, integralność systemu i skanowanie mechanizmów trwałości", + "pageDescription": "Wielosilnikowe wykrywanie zagrożeń — sygnatury, heurystyka, analiza skryptów, integralność systemu i skanowanie mechanizmów utrwalania", "scanButtonScanning": "Skanowanie...", "scanButton": "Skanuj", - "quarantineButton": "Poddaj kwarantannie", + "quarantineButton": "Kwarantanna", "deleteButton": "Usuń", "severityCritical": "Krytyczny", "severityHigh": "Wysoki", @@ -21,13 +21,13 @@ "threatFound": "Znaleziono: {{count}}", "scanCategoryClean": "czysty", "scanCategoryNA": "Nie dotyczy", - "scanSummarySystemClean": "System czysty", + "scanSummarySystemClean": "System jest czysty", "scanSummaryThreatsDetected": "Wykryto zagrożenia: {{count}}", "scanStatFiles": "Pliki", "scanStatDuration": "Czas trwania", "scanStatEngines": "Silniki", "severityHeading": "Poziom zagrożenia", - "selectedHeading": "Zaznaczono", + "selectedHeading": "Zaznaczone", "selectedOfThreats": "z {{count}} zagrożeń", "selectAll": "Zaznacz wszystko", "deselectAll": "Odznacz wszystko", @@ -35,9 +35,9 @@ "actingDeleting": "Usuwanie zaznaczonych zagrożeń...", "actionCompleteQuarantine": "Przenoszenie do kwarantanny zakończone", "actionCompleteDeletion": "Usuwanie zakończone", - "actionResultQuarantined": "Poddano kwarantannie: {{count}}", + "actionResultQuarantined": "Przeniesiono do kwarantanny: {{count}}", "actionResultDeleted": "Usunięto: {{count}}", - "actionResultFailed": "Niepowodzeń: {{count}}", + "actionResultFailed": "Niepowodzenie: {{count}}", "noThreatsDetectedTitle": "Nie wykryto zagrożeń", "noThreatsDetectedDescription": "Przeskanowano {{filesScanned}} plików przy użyciu {{engineCount}} silników w ciągu {{duration}} s — system jest czysty.", "emptyStateTitle": "Skaner malware", @@ -49,14 +49,14 @@ "threatDetailFile": "Plik", "threatDetailSize": "Rozmiar", "threatDetailPath": "Ścieżka", - "confirmQuarantineTitle": "Poddaj zagrożenia kwarantannie", + "confirmQuarantineTitle": "Przenieś zagrożenia do kwarantanny", "confirmQuarantineDescription": "Spowoduje to przeniesienie {{count}} wykrytych zagrożeń do kwarantanny. W razie potrzeby pliki będzie można później przywrócić.", - "confirmQuarantineLabel": "Poddaj kwarantannie teraz", + "confirmQuarantineLabel": "Przenieś do kwarantanny", "confirmDeleteTitle": "Usuń zagrożenia", "confirmDeleteDescription": "Spowoduje to trwałe usunięcie {{count}} wykrytych zagrożeń. Tej operacji nie można cofnąć.", "confirmDeleteLabel": "Usuń trwale", "toastScanFailed": "Skanowanie malware nie powiodło się", - "toastActionFailed": "Nie udało się wykonać akcji „{{action}}” dla zagrożeń", + "toastActionFailed": "Nie udało się wykonać działania „{{action}}” dla zagrożeń", "toastActionFailedDescription": "Spróbuj uruchomić jako administrator", "errorOperationFailed": "Operacja nie powiodła się — spróbuj uruchomić jako administrator", "tabScanner": "Skaner", @@ -77,11 +77,10 @@ "dbNever": "Nigdy", "dbSource": "Źródło reguł", "dbSourceCloud": "Chmura (z pamięci podręcznej)", - "dbSourceBundled": "Dołączone do aplikacji", "dbSourceNone": "Nie załadowano reguł", "dbRuleFiles": "Pliki reguł", - "dbRuleFilesCounts": "{{bundled}} dołączonych, {{cached}} z chmury", - "dbUpdateSuccess": "Zaktualizowano do wersji v{{version}} ({{count}} reguł)", + "dbRuleFilesCounts": "{{count}} z chmury", + "dbUpdateSuccess": "Zaktualizowano do wersji v{{version}} (reguł: {{count}})", "dbAlreadyCurrent": "Sygnatury są już aktualne", "dbUpdateFailed": "Nie udało się zaktualizować sygnatur", "quarantineEmptyTitle": "Brak elementów w kwarantannie", @@ -107,8 +106,8 @@ "quarantineLoading": "Ładowanie kwarantanny...", "quarantineRestoring": "Przywracanie plików...", "quarantineDeleting": "Usuwanie plików...", - "toastRestoreSuccess": "Przywrócono {{count}} plików", + "toastRestoreSuccess": "Przywrócono pliki: {{count}}", "toastRestoreFailed": "Nie udało się przywrócić niektórych plików", - "toastDeleteQuarantineSuccess": "Trwale usunięto {{count}} plików", + "toastDeleteQuarantineSuccess": "Trwale usunięto pliki: {{count}}", "toastRestoreNoOriginal": "Nie można przywrócić — oryginalna lokalizacja jest nieznana" } diff --git a/src/renderer/src/locales/pt/malware.json b/src/renderer/src/locales/pt/malware.json index c4bf7f3b..20890083 100644 --- a/src/renderer/src/locales/pt/malware.json +++ b/src/renderer/src/locales/pt/malware.json @@ -1,6 +1,6 @@ { "pageTitle": "Scanner de Malware", - "pageDescription": "Deteção de ameaças com vários motores — assinaturas, heurísticas, análise de scripts, integridade do sistema e análise de persistência", + "pageDescription": "Deteção de ameaças por múltiplos motores — assinaturas, heurística, análise de scripts, integridade do sistema e verificação de persistência", "scanButtonScanning": "A analisar...", "scanButton": "Analisar", "quarantineButton": "Colocar em quarentena", @@ -10,10 +10,10 @@ "severityMedium": "Média", "severityLow": "Baixa", "sourceDefenderWindows": "AV nativo", - "sourceDefenderMac": "Assinatura de código", + "sourceDefenderMac": "Assinatura de Código", "sourceDefenderLinux": "ClamAV", - "sourceHeuristic": "Análise heurística", - "sourceSignature": "Assinatura conhecida", + "sourceHeuristic": "Análise Heurística", + "sourceSignature": "Assinatura Conhecida", "initializingScanEngines": "A inicializar motores de análise...", "filesScanned": "{{count}} ficheiros analisados", "threatCount": "{{count}} ameaça", @@ -21,89 +21,88 @@ "threatFound": "{{count}} encontrada(s)", "scanCategoryClean": "limpo", "scanCategoryNA": "N/D", - "scanSummarySystemClean": "Sistema limpo", - "scanSummaryThreatsDetected": "{{count}} ameaças detetadas", + "scanSummarySystemClean": "Sistema Limpo", + "scanSummaryThreatsDetected": "{{count}} Ameaças Detetadas", "scanStatFiles": "Ficheiros", "scanStatDuration": "Duração", "scanStatEngines": "Motores", "severityHeading": "Gravidade", "selectedHeading": "Selecionadas", "selectedOfThreats": "de {{count}} ameaças", - "selectAll": "Selecionar tudo", - "deselectAll": "Desselecionar tudo", - "actingQuarantining": "A colocar as ameaças selecionadas em quarentena...", - "actingDeleting": "A eliminar as ameaças selecionadas...", + "selectAll": "Selecionar Tudo", + "deselectAll": "Desmarcar Tudo", + "actingQuarantining": "A colocar ameaças selecionadas em quarentena...", + "actingDeleting": "A eliminar ameaças selecionadas...", "actionCompleteQuarantine": "Quarentena concluída", "actionCompleteDeletion": "Eliminação concluída", "actionResultQuarantined": "{{count}} em quarentena", "actionResultDeleted": "{{count}} eliminadas", "actionResultFailed": "{{count}} falharam", - "noThreatsDetectedTitle": "Nenhuma ameaça detetada", + "noThreatsDetectedTitle": "Nenhuma Ameaça Detetada", "noThreatsDetectedDescription": "Foram analisados {{filesScanned}} ficheiros em {{engineCount}} motores em {{duration}}s — o seu sistema está limpo.", "emptyStateTitle": "Scanner de Malware", - "emptyStateDescription": "Clique em \"Analisar\" para verificar o seu sistema à procura de malware, adware, mineradores de criptomoedas e ficheiros suspeitos.", - "detectedThreatsHeading": "Ameaças detetadas", + "emptyStateDescription": "Clique em \"Analisar\" para verificar o seu sistema quanto a malware, adware, mineradores de criptomoedas e ficheiros suspeitos.", + "detectedThreatsHeading": "Ameaças Detetadas", "detectedThreatsCount": "{{count}} ameaça", "detectedThreatsCountPlural": "{{count}} ameaças", "threatDetailDetails": "Detalhes", "threatDetailFile": "Ficheiro", "threatDetailSize": "Tamanho", "threatDetailPath": "Caminho", - "confirmQuarantineTitle": "Colocar ameaças em quarentena", + "confirmQuarantineTitle": "Colocar Ameaças em Quarentena", "confirmQuarantineDescription": "Isto moverá {{count}} ameaça(s) detetada(s) para a quarentena. Os ficheiros podem ser restaurados mais tarde, se necessário.", - "confirmQuarantineLabel": "Colocar em quarentena agora", - "confirmDeleteTitle": "Eliminar ameaças", + "confirmQuarantineLabel": "Colocar em Quarentena Agora", + "confirmDeleteTitle": "Eliminar Ameaças", "confirmDeleteDescription": "Isto eliminará permanentemente {{count}} ameaça(s) detetada(s). Esta ação não pode ser anulada.", - "confirmDeleteLabel": "Eliminar permanentemente", + "confirmDeleteLabel": "Eliminar Permanentemente", "toastScanFailed": "A análise de malware falhou", "toastActionFailed": "Falha ao {{action}} ameaças", "toastActionFailedDescription": "Tente executar como administrador", "errorOperationFailed": "A operação falhou — tente executar como administrador", "tabScanner": "Scanner", "tabQuarantine": "Quarentena", - "tabDatabase": "Base de dados", - "dbTitle": "Base de dados de assinaturas", + "tabDatabase": "Base de Dados", + "dbTitle": "Base de Dados de Assinaturas", "dbDescription": "Regras YARA de deteção de malware utilizadas pelo scanner", - "dbFetchLatest": "Procurar atualizações", + "dbFetchLatest": "Procurar Atualizações", "dbUpdating": "A atualizar...", "dbEngine": "Motor", - "dbEngineYara": "Kudu Cloud Signatures", + "dbEngineYara": "Assinaturas na Cloud do Kudu", "dbEngineRegex": "Fallback Regex", "dbEngineCompiling": "A compilar...", "dbCompiling": "A compilar regras de assinatura ({{loaded}}/{{total}})...", - "dbRulesLoaded": "Regras carregadas", - "dbVersion": "Versão das assinaturas", - "dbLastUpdated": "Última atualização", + "dbRulesLoaded": "Regras Carregadas", + "dbVersion": "Versão das Assinaturas", + "dbLastUpdated": "Última Atualização", "dbNever": "Nunca", - "dbSource": "Origem das regras", + "dbSource": "Origem das Regras", "dbSourceCloud": "Cloud (em cache)", - "dbSourceBundled": "Incluídas na aplicação", "dbSourceNone": "Nenhuma regra carregada", - "dbRuleFiles": "Ficheiros de regras", - "dbRuleFilesCounts": "{{bundled}} incluídas, {{cached}} da cloud", + "dbRuleFiles": "Ficheiros de Regras", + "dbRuleFilesCounts": "{{count}} da cloud", "dbUpdateSuccess": "Atualizado para v{{version}} ({{count}} regras)", "dbAlreadyCurrent": "As assinaturas já estão atualizadas", - "dbUpdateFailed": "Falha ao atualizar as assinaturas", - "quarantineEmptyTitle": "Nenhum item em quarentena", + "dbUpdateFailed": "Falha ao atualizar assinaturas", + "quarantineEmptyTitle": "Nenhum Item em Quarentena", "quarantineEmptyDescription": "Os ficheiros movidos para a quarentena aparecerão aqui. Pode restaurá-los ou eliminá-los permanentemente.", - "quarantineHeading": "Ficheiros em quarentena", + "quarantineHeading": "Ficheiros em Quarentena", "quarantineCount": "{{count}} ficheiro", "quarantineCountPlural": "{{count}} ficheiros", "quarantineColumnFile": "Ficheiro", "quarantineColumnDate": "Data", "quarantineColumnSize": "Tamanho", - "quarantineColumnOriginal": "Localização original", + "quarantineColumnOriginal": "Localização Original", "quarantineOriginalUnknown": "Desconhecida", "quarantineRestoreButton": "Restaurar", - "quarantineDeleteButton": "Eliminar permanentemente", - "quarantineSelectAll": "Selecionar tudo", - "quarantineDeselectAll": "Desselecionar tudo", - "confirmRestoreTitle": "Restaurar ficheiros", - "confirmRestoreDescription": "Isto restaurará {{count}} ficheiro(s) para a respetiva localização original. Restaure apenas ficheiros em que confia.", - "confirmRestoreLabel": "Restaurar agora", - "confirmDeleteQuarantineTitle": "Eliminar permanentemente", + "quarantineDeleteButton": "Eliminar Permanentemente", + "quarantineSelectAll": "Selecionar Tudo", + "quarantineDeselectAll": "Desmarcar Tudo", + "confirmRestoreTitle": "Restaurar Ficheiros", + "confirmRestoreDescription": "Isto restaurará {{count}} ficheiro(s) para a sua localização original. Restaure apenas ficheiros em que confia.", + "confirmRestoreLabel": "Restaurar Agora", + "confirmDeleteQuarantineTitle": "Eliminar Permanentemente", "confirmDeleteQuarantineDescription": "Isto eliminará permanentemente {{count}} ficheiro(s) em quarentena. Esta ação não pode ser anulada.", - "confirmDeleteQuarantineLabel": "Eliminar permanentemente", + "confirmDeleteQuarantineLabel": "Eliminar Permanentemente", "quarantineLoading": "A carregar quarentena...", "quarantineRestoring": "A restaurar ficheiros...", "quarantineDeleting": "A eliminar ficheiros...", diff --git a/src/renderer/src/locales/ro/malware.json b/src/renderer/src/locales/ro/malware.json index 885769ae..0d0fd12b 100644 --- a/src/renderer/src/locales/ro/malware.json +++ b/src/renderer/src/locales/ro/malware.json @@ -1,6 +1,6 @@ { "pageTitle": "Scanner malware", - "pageDescription": "Detectare multi-engine a amenințărilor — semnături, euristică, analiză de scripturi, integritatea sistemului și scanare a persistenței", + "pageDescription": "Detectare multi-engine a amenințărilor — semnături, euristică, analiză de scripturi, integritatea sistemului și scanarea persistenței", "scanButtonScanning": "Se scanează...", "scanButton": "Scanează", "quarantineButton": "Pune în carantină", @@ -50,13 +50,13 @@ "threatDetailSize": "Dimensiune", "threatDetailPath": "Cale", "confirmQuarantineTitle": "Pune amenințările în carantină", - "confirmQuarantineDescription": "Aceasta va muta {{count}} amenințare(ări) detectată(e) în carantină. Fișierele pot fi restaurate ulterior, dacă este necesar.", + "confirmQuarantineDescription": "Aceasta va muta {{count}} amenințare(amenințări) detectată(e) în carantină. Fișierele pot fi restaurate ulterior, dacă este necesar.", "confirmQuarantineLabel": "Pune acum în carantină", "confirmDeleteTitle": "Șterge amenințările", - "confirmDeleteDescription": "Aceasta va șterge definitiv {{count}} amenințare(ări) detectată(e). Această acțiune nu poate fi anulată.", + "confirmDeleteDescription": "Aceasta va șterge definitiv {{count}} amenințare(amenințări) detectată(e). Această acțiune nu poate fi anulată.", "confirmDeleteLabel": "Șterge definitiv", "toastScanFailed": "Scanarea malware a eșuat", - "toastActionFailed": "Nu s-a reușit {{action}} amenințărilor", + "toastActionFailed": "Nu s-a putut efectua acțiunea {{action}} pentru amenințări", "toastActionFailedDescription": "Încercați să rulați ca administrator", "errorOperationFailed": "Operațiunea a eșuat — încercați să rulați ca administrator", "tabScanner": "Scanner", @@ -75,12 +75,11 @@ "dbVersion": "Versiune semnături", "dbLastUpdated": "Ultima actualizare", "dbNever": "Niciodată", - "dbSource": "Sursă reguli", + "dbSource": "Sursa regulilor", "dbSourceCloud": "Cloud (în cache)", - "dbSourceBundled": "Inclusă în aplicație", "dbSourceNone": "Nu sunt încărcate reguli", "dbRuleFiles": "Fișiere de reguli", - "dbRuleFilesCounts": "{{bundled}} incluse, {{cached}} din cloud", + "dbRuleFilesCounts": "{{count}} din cloud", "dbUpdateSuccess": "Actualizat la v{{version}} ({{count}} reguli)", "dbAlreadyCurrent": "Semnăturile sunt deja actualizate", "dbUpdateFailed": "Actualizarea semnăturilor a eșuat", @@ -101,14 +100,14 @@ "confirmRestoreTitle": "Restaurează fișierele", "confirmRestoreDescription": "Aceasta va restaura {{count}} fișier(e) în locația lor originală. Restaurați doar fișierele în care aveți încredere.", "confirmRestoreLabel": "Restaurează acum", - "confirmDeleteQuarantineTitle": "Șterge definitiv", + "confirmDeleteQuarantineTitle": "Ștergere definitivă", "confirmDeleteQuarantineDescription": "Aceasta va șterge definitiv {{count}} fișier(e) din carantină. Această acțiune nu poate fi anulată.", "confirmDeleteQuarantineLabel": "Șterge definitiv", "quarantineLoading": "Se încarcă carantina...", "quarantineRestoring": "Se restaurează fișierele...", "quarantineDeleting": "Se șterg fișierele...", "toastRestoreSuccess": "{{count}} fișier(e) restaurat(e)", - "toastRestoreFailed": "Restaurarea unor fișiere a eșuat", + "toastRestoreFailed": "Nu s-au putut restaura unele fișiere", "toastDeleteQuarantineSuccess": "{{count}} fișier(e) șters(e) definitiv", "toastRestoreNoOriginal": "Nu se poate restaura — locația originală este necunoscută" } diff --git a/src/renderer/src/locales/ru/malware.json b/src/renderer/src/locales/ru/malware.json index 5bb315c8..95c77164 100644 --- a/src/renderer/src/locales/ru/malware.json +++ b/src/renderer/src/locales/ru/malware.json @@ -1,21 +1,21 @@ { "pageTitle": "Сканер вредоносных программ", - "pageDescription": "Многоуровневое обнаружение угроз — сигнатуры, эвристика, анализ сценариев, проверка целостности системы и сканирование на закрепление", + "pageDescription": "Многоуровневое обнаружение угроз — сигнатуры, эвристика, анализ сценариев, целостность системы и сканирование на закрепление", "scanButtonScanning": "Сканирование...", "scanButton": "Сканировать", "quarantineButton": "Поместить в карантин", "deleteButton": "Удалить", - "severityCritical": "Критический", - "severityHigh": "Высокий", - "severityMedium": "Средний", - "severityLow": "Низкий", + "severityCritical": "Критическая", + "severityHigh": "Высокая", + "severityMedium": "Средняя", + "severityLow": "Низкая", "sourceDefenderWindows": "Встроенный антивирус", "sourceDefenderMac": "Подпись кода", "sourceDefenderLinux": "ClamAV", "sourceHeuristic": "Эвристический анализ", "sourceSignature": "Известная сигнатура", "initializingScanEngines": "Инициализация модулей сканирования...", - "filesScanned": "Проверено файлов: {{count}}", + "filesScanned": "Просканировано файлов: {{count}}", "threatCount": "{{count}} угроза", "threatCountPlural": "{{count}} угроз", "threatFound": "Найдено: {{count}}", @@ -39,9 +39,9 @@ "actionResultDeleted": "Удалено: {{count}}", "actionResultFailed": "Не удалось: {{count}}", "noThreatsDetectedTitle": "Угроз не обнаружено", - "noThreatsDetectedDescription": "Проверено {{filesScanned}} файлов с помощью {{engineCount}} модулей за {{duration}} с — ваша система чиста.", + "noThreatsDetectedDescription": "Просканировано {{filesScanned}} файлов с помощью {{engineCount}} модулей за {{duration}} с — ваша система чиста.", "emptyStateTitle": "Сканер вредоносных программ", - "emptyStateDescription": "Нажмите «Сканировать», чтобы проверить систему на вредоносные программы, рекламное ПО, криптомайнеры и подозрительные файлы.", + "emptyStateDescription": "Нажмите «Сканировать», чтобы проверить систему на наличие вредоносных программ, рекламного ПО, криптомайнеров и подозрительных файлов.", "detectedThreatsHeading": "Обнаруженные угрозы", "detectedThreatsCount": "{{count}} угроза", "detectedThreatsCountPlural": "{{count}} угроз", @@ -50,10 +50,10 @@ "threatDetailSize": "Размер", "threatDetailPath": "Путь", "confirmQuarantineTitle": "Поместить угрозы в карантин", - "confirmQuarantineDescription": "Это действие переместит {{count}} обнаруженных угроз(ы) в карантин. При необходимости файлы можно будет восстановить позже.", + "confirmQuarantineDescription": "Будет выполнено перемещение {{count}} обнаруженных угроз в карантин. При необходимости файлы можно будет восстановить позже.", "confirmQuarantineLabel": "Поместить в карантин", "confirmDeleteTitle": "Удалить угрозы", - "confirmDeleteDescription": "Это действие безвозвратно удалит {{count}} обнаруженных угроз(ы). Это действие нельзя отменить.", + "confirmDeleteDescription": "Будет выполнено безвозвратное удаление {{count}} обнаруженных угроз. Это действие нельзя отменить.", "confirmDeleteLabel": "Удалить безвозвратно", "toastScanFailed": "Не удалось выполнить сканирование на вредоносные программы", "toastActionFailed": "Не удалось выполнить действие «{{action}}» для угроз", @@ -71,16 +71,15 @@ "dbEngineRegex": "Резервный Regex", "dbEngineCompiling": "Компиляция...", "dbCompiling": "Компиляция правил сигнатур ({{loaded}}/{{total}})...", - "dbRulesLoaded": "Правил загружено", + "dbRulesLoaded": "Загружено правил", "dbVersion": "Версия сигнатур", "dbLastUpdated": "Последнее обновление", "dbNever": "Никогда", "dbSource": "Источник правил", "dbSourceCloud": "Облако (кэшировано)", - "dbSourceBundled": "В комплекте с приложением", "dbSourceNone": "Правила не загружены", "dbRuleFiles": "Файлы правил", - "dbRuleFilesCounts": "{{bundled}} в комплекте, {{cached}} из облака", + "dbRuleFilesCounts": "{{count}} из облака", "dbUpdateSuccess": "Обновлено до v{{version}} (правил: {{count}})", "dbAlreadyCurrent": "Сигнатуры уже актуальны", "dbUpdateFailed": "Не удалось обновить сигнатуры", @@ -99,10 +98,10 @@ "quarantineSelectAll": "Выбрать все", "quarantineDeselectAll": "Снять выделение", "confirmRestoreTitle": "Восстановить файлы", - "confirmRestoreDescription": "Это действие восстановит {{count}} файл(ов) в исходное расположение. Восстанавливайте только те файлы, которым доверяете.", + "confirmRestoreDescription": "Будет выполнено восстановление {{count}} файлов в исходное расположение. Восстанавливайте только те файлы, которым доверяете.", "confirmRestoreLabel": "Восстановить", "confirmDeleteQuarantineTitle": "Удалить безвозвратно", - "confirmDeleteQuarantineDescription": "Это действие безвозвратно удалит {{count}} файл(ов) из карантина. Это действие нельзя отменить.", + "confirmDeleteQuarantineDescription": "Будет выполнено безвозвратное удаление {{count}} файлов из карантина. Это действие нельзя отменить.", "confirmDeleteQuarantineLabel": "Удалить безвозвратно", "quarantineLoading": "Загрузка карантина...", "quarantineRestoring": "Восстановление файлов...", @@ -110,5 +109,5 @@ "toastRestoreSuccess": "Восстановлено файлов: {{count}}", "toastRestoreFailed": "Не удалось восстановить некоторые файлы", "toastDeleteQuarantineSuccess": "Безвозвратно удалено файлов: {{count}}", - "toastRestoreNoOriginal": "Не удаётся восстановить — исходное расположение неизвестно" + "toastRestoreNoOriginal": "Невозможно восстановить — исходное расположение неизвестно" } diff --git a/src/renderer/src/locales/sv/malware.json b/src/renderer/src/locales/sv/malware.json index 41b9bc45..6e55b30d 100644 --- a/src/renderer/src/locales/sv/malware.json +++ b/src/renderer/src/locales/sv/malware.json @@ -1,6 +1,6 @@ { "pageTitle": "Skanner för skadlig kod", - "pageDescription": "Hotidentifiering med flera motorer — signaturer, heuristik, skriptanalys, systemintegritet och genomsökning av persistens", + "pageDescription": "Hotidentifiering med flera motorer — signaturer, heuristik, skriptanalys, systemintegritet och skanning av persistens", "scanButtonScanning": "Skannar...", "scanButton": "Skanna", "quarantineButton": "Sätt i karantän", @@ -20,7 +20,7 @@ "threatCountPlural": "{{count}} hot", "threatFound": "{{count}} hittades", "scanCategoryClean": "ren", - "scanCategoryNA": "Ej tillgängligt", + "scanCategoryNA": "Ej tillämpligt", "scanSummarySystemClean": "Systemet är rent", "scanSummaryThreatsDetected": "{{count}} hot identifierade", "scanStatFiles": "Filer", @@ -39,7 +39,7 @@ "actionResultDeleted": "{{count}} borttagna", "actionResultFailed": "{{count}} misslyckades", "noThreatsDetectedTitle": "Inga hot identifierades", - "noThreatsDetectedDescription": "Skannade {{filesScanned}} filer med {{engineCount}} motorer på {{duration}} s — ditt system är rent.", + "noThreatsDetectedDescription": "Skannade {{filesScanned}} filer med {{engineCount}} motorer på {{duration}}s — ditt system är rent.", "emptyStateTitle": "Skanner för skadlig kod", "emptyStateDescription": "Klicka på \"Skanna\" för att kontrollera systemet efter skadlig kod, annonsprogram, kryptominers och misstänkta filer.", "detectedThreatsHeading": "Identifierade hot", @@ -53,7 +53,7 @@ "confirmQuarantineDescription": "Detta flyttar {{count}} identifierade hot till karantän. Filer kan återställas senare vid behov.", "confirmQuarantineLabel": "Sätt i karantän nu", "confirmDeleteTitle": "Ta bort hot", - "confirmDeleteDescription": "Detta tar bort {{count}} identifierade hot permanent. Åtgärden kan inte ångras.", + "confirmDeleteDescription": "Detta tar permanent bort {{count}} identifierade hot. Åtgärden kan inte ångras.", "confirmDeleteLabel": "Ta bort permanent", "toastScanFailed": "Skanning efter skadlig kod misslyckades", "toastActionFailed": "Det gick inte att {{action}} hot", @@ -77,10 +77,9 @@ "dbNever": "Aldrig", "dbSource": "Regelkälla", "dbSourceCloud": "Moln (cachelagrat)", - "dbSourceBundled": "Medföljer appen", "dbSourceNone": "Inga regler inlästa", "dbRuleFiles": "Regelfiler", - "dbRuleFilesCounts": "{{bundled}} medföljande, {{cached}} från molnet", + "dbRuleFilesCounts": "{{count}} från molnet", "dbUpdateSuccess": "Uppdaterad till v{{version}} ({{count}} regler)", "dbAlreadyCurrent": "Signaturerna är redan uppdaterade", "dbUpdateFailed": "Det gick inte att uppdatera signaturerna", @@ -99,10 +98,10 @@ "quarantineSelectAll": "Markera alla", "quarantineDeselectAll": "Avmarkera alla", "confirmRestoreTitle": "Återställ filer", - "confirmRestoreDescription": "Detta återställer {{count}} filer till deras ursprungliga plats. Återställ endast filer som du litar på.", + "confirmRestoreDescription": "Detta återställer {{count}} fil(er) till deras ursprungliga plats. Återställ endast filer som du litar på.", "confirmRestoreLabel": "Återställ nu", "confirmDeleteQuarantineTitle": "Ta bort permanent", - "confirmDeleteQuarantineDescription": "Detta tar bort {{count}} filer i karantän permanent. Åtgärden kan inte ångras.", + "confirmDeleteQuarantineDescription": "Detta tar permanent bort {{count}} fil(er) i karantän. Åtgärden kan inte ångras.", "confirmDeleteQuarantineLabel": "Ta bort permanent", "quarantineLoading": "Läser in karantän...", "quarantineRestoring": "Återställer filer...", diff --git a/src/renderer/src/locales/th/malware.json b/src/renderer/src/locales/th/malware.json index daad3665..00358a59 100644 --- a/src/renderer/src/locales/th/malware.json +++ b/src/renderer/src/locales/th/malware.json @@ -1,18 +1,18 @@ { "pageTitle": "ตัวสแกนมัลแวร์", - "pageDescription": "การตรวจจับภัยคุกคามแบบหลายเอนจิน — ลายเซ็น การวิเคราะห์เชิงพฤติกรรม การวิเคราะห์สคริปต์ ความสมบูรณ์ของระบบ และการสแกนการคงอยู่", + "pageDescription": "การตรวจจับภัยคุกคามด้วยหลายเอนจิน — ลายเซ็น การวิเคราะห์เชิงฮิวริสติก การวิเคราะห์สคริปต์ ความสมบูรณ์ของระบบ และการสแกนการคงอยู่", "scanButtonScanning": "กำลังสแกน...", "scanButton": "สแกน", "quarantineButton": "กักกัน", "deleteButton": "ลบ", - "severityCritical": "วิกฤต", + "severityCritical": "ร้ายแรง", "severityHigh": "สูง", "severityMedium": "ปานกลาง", "severityLow": "ต่ำ", - "sourceDefenderWindows": "โปรแกรมป้องกันไวรัสในระบบ", + "sourceDefenderWindows": "โปรแกรมป้องกันไวรัสภายในระบบ", "sourceDefenderMac": "การลงนามโค้ด", "sourceDefenderLinux": "ClamAV", - "sourceHeuristic": "การวิเคราะห์เชิงพฤติกรรม", + "sourceHeuristic": "การวิเคราะห์เชิงฮิวริสติก", "sourceSignature": "ลายเซ็นที่รู้จัก", "initializingScanEngines": "กำลังเริ่มต้นเอนจินการสแกน...", "filesScanned": "สแกนแล้ว {{count}} ไฟล์", @@ -28,7 +28,7 @@ "scanStatEngines": "เอนจิน", "severityHeading": "ระดับความรุนแรง", "selectedHeading": "ที่เลือก", - "selectedOfThreats": "จาก {{count}} ภัยคุกคาม", + "selectedOfThreats": "จากภัยคุกคาม {{count}} รายการ", "selectAll": "เลือกทั้งหมด", "deselectAll": "ยกเลิกการเลือกทั้งหมด", "actingQuarantining": "กำลังกักกันภัยคุกคามที่เลือก...", @@ -63,12 +63,12 @@ "tabQuarantine": "กักกัน", "tabDatabase": "ฐานข้อมูล", "dbTitle": "ฐานข้อมูลลายเซ็น", - "dbDescription": "กฎการตรวจจับมัลแวร์ YARA ที่ตัวสแกนใช้", + "dbDescription": "กฎการตรวจจับมัลแวร์ YARA ที่ใช้โดยตัวสแกน", "dbFetchLatest": "ตรวจหาการอัปเดต", "dbUpdating": "กำลังอัปเดต...", "dbEngine": "เอนจิน", "dbEngineYara": "Kudu Cloud Signatures", - "dbEngineRegex": "Regex สำรอง", + "dbEngineRegex": "Regex Fallback", "dbEngineCompiling": "กำลังคอมไพล์...", "dbCompiling": "กำลังคอมไพล์กฎลายเซ็น ({{loaded}}/{{total}})...", "dbRulesLoaded": "กฎที่โหลดแล้ว", @@ -77,10 +77,9 @@ "dbNever": "ไม่เคย", "dbSource": "แหล่งที่มาของกฎ", "dbSourceCloud": "Cloud (แคชไว้)", - "dbSourceBundled": "มาพร้อมแอป", "dbSourceNone": "ไม่ได้โหลดกฎ", "dbRuleFiles": "ไฟล์กฎ", - "dbRuleFilesCounts": "มาพร้อมแอป {{bundled}} ไฟล์, จาก cloud {{cached}} ไฟล์", + "dbRuleFilesCounts": "จาก cloud {{count}} ไฟล์", "dbUpdateSuccess": "อัปเดตเป็น v{{version}} แล้ว ({{count}} กฎ)", "dbAlreadyCurrent": "ลายเซ็นเป็นเวอร์ชันล่าสุดอยู่แล้ว", "dbUpdateFailed": "ไม่สามารถอัปเดตลายเซ็นได้", @@ -107,8 +106,8 @@ "quarantineLoading": "กำลังโหลดรายการกักกัน...", "quarantineRestoring": "กำลังกู้คืนไฟล์...", "quarantineDeleting": "กำลังลบไฟล์...", - "toastRestoreSuccess": "กู้คืนไฟล์แล้ว {{count}} ไฟล์", - "toastRestoreFailed": "ไม่สามารถกู้คืนไฟล์บางรายการได้", + "toastRestoreSuccess": "กู้คืนแล้ว {{count}} ไฟล์", + "toastRestoreFailed": "ไม่สามารถกู้คืนบางไฟล์ได้", "toastDeleteQuarantineSuccess": "ลบไฟล์อย่างถาวรแล้ว {{count}} ไฟล์", "toastRestoreNoOriginal": "ไม่สามารถกู้คืนได้ — ไม่ทราบตำแหน่งเดิม" } diff --git a/src/renderer/src/locales/tr/malware.json b/src/renderer/src/locales/tr/malware.json index 8baef03e..9e0a3303 100644 --- a/src/renderer/src/locales/tr/malware.json +++ b/src/renderer/src/locales/tr/malware.json @@ -1,6 +1,6 @@ { - "pageTitle": "Kötü Amaçlı Yazılım Tarayıcısı", - "pageDescription": "Çoklu motor tehdit algılama — imzalar, sezgisel analiz, betik analizi, sistem bütünlüğü ve kalıcılık taraması", + "pageTitle": "Zararlı Yazılım Tarayıcısı", + "pageDescription": "Çok motorlu tehdit algılama — imzalar, sezgisel analiz, betik analizi, sistem bütünlüğü ve kalıcılık taraması", "scanButtonScanning": "Taranıyor...", "scanButton": "Tara", "quarantineButton": "Karantinaya Al", @@ -40,8 +40,8 @@ "actionResultFailed": "{{count}} başarısız", "noThreatsDetectedTitle": "Tehdit Algılanmadı", "noThreatsDetectedDescription": "{{duration}} sn içinde {{engineCount}} motorda {{filesScanned}} dosya tarandı — sisteminiz temiz.", - "emptyStateTitle": "Kötü Amaçlı Yazılım Tarayıcısı", - "emptyStateDescription": "Sisteminizi kötü amaçlı yazılım, reklam yazılımı, kripto madencileri ve şüpheli dosyalar için denetlemek üzere \"Tara\" seçeneğine tıklayın.", + "emptyStateTitle": "Zararlı Yazılım Tarayıcısı", + "emptyStateDescription": "Sisteminizi zararlı yazılım, reklam yazılımı, kripto madencileri ve şüpheli dosyalar açısından denetlemek için \"Tara\" seçeneğine tıklayın.", "detectedThreatsHeading": "Algılanan Tehditler", "detectedThreatsCount": "{{count}} tehdit", "detectedThreatsCountPlural": "{{count}} tehdit", @@ -50,37 +50,36 @@ "threatDetailSize": "Boyut", "threatDetailPath": "Yol", "confirmQuarantineTitle": "Tehditleri Karantinaya Al", - "confirmQuarantineDescription": "Bu işlem, algılanan {{count}} tehdit(ler)i karantinaya taşıyacaktır. Gerekirse dosyalar daha sonra geri yüklenebilir.", + "confirmQuarantineDescription": "Bu işlem, algılanan {{count}} tehdidi karantinaya taşıyacaktır. Gerekirse dosyalar daha sonra geri yüklenebilir.", "confirmQuarantineLabel": "Şimdi Karantinaya Al", "confirmDeleteTitle": "Tehditleri Sil", - "confirmDeleteDescription": "Bu işlem, algılanan {{count}} tehdit(ler)i kalıcı olarak silecektir. Bu işlem geri alınamaz.", + "confirmDeleteDescription": "Bu işlem, algılanan {{count}} tehdidi kalıcı olarak silecektir. Bu işlem geri alınamaz.", "confirmDeleteLabel": "Kalıcı Olarak Sil", - "toastScanFailed": "Kötü amaçlı yazılım taraması başarısız oldu", - "toastActionFailed": "Tehditler için {{action}} işlemi başarısız oldu", + "toastScanFailed": "Zararlı yazılım taraması başarısız oldu", + "toastActionFailed": "Tehditler {{action}} işlemi başarısız oldu", "toastActionFailedDescription": "Yönetici olarak çalıştırmayı deneyin", "errorOperationFailed": "İşlem başarısız oldu — yönetici olarak çalıştırmayı deneyin", "tabScanner": "Tarayıcı", "tabQuarantine": "Karantina", "tabDatabase": "Veritabanı", "dbTitle": "İmza Veritabanı", - "dbDescription": "Tarayıcı tarafından kullanılan YARA kötü amaçlı yazılım algılama kuralları", + "dbDescription": "Tarayıcı tarafından kullanılan YARA zararlı yazılım algılama kuralları", "dbFetchLatest": "Güncellemeleri Denetle", "dbUpdating": "Güncelleniyor...", "dbEngine": "Motor", "dbEngineYara": "Kudu Cloud Signatures", - "dbEngineRegex": "Regex Yedeği", + "dbEngineRegex": "Regex Yedek", "dbEngineCompiling": "Derleniyor...", "dbCompiling": "İmza kuralları derleniyor ({{loaded}}/{{total}})...", "dbRulesLoaded": "Yüklenen Kurallar", "dbVersion": "İmza Sürümü", "dbLastUpdated": "Son Güncelleme", - "dbNever": "Asla", + "dbNever": "Hiçbir zaman", "dbSource": "Kural Kaynağı", - "dbSourceCloud": "Cloud (önbelleğe alınmış)", - "dbSourceBundled": "Uygulamayla birlikte gelir", - "dbSourceNone": "Hiç kural yüklenmedi", + "dbSourceCloud": "Bulut (önbelleğe alınmış)", + "dbSourceNone": "Yüklenmiş kural yok", "dbRuleFiles": "Kural Dosyaları", - "dbRuleFilesCounts": "{{bundled}} paketle birlikte, {{cached}} Cloud'dan", + "dbRuleFilesCounts": "{{count}} Cloud'dan", "dbUpdateSuccess": "v{{version}} sürümüne güncellendi ({{count}} kural)", "dbAlreadyCurrent": "İmzalar zaten güncel", "dbUpdateFailed": "İmzalar güncellenemedi", @@ -99,10 +98,10 @@ "quarantineSelectAll": "Tümünü Seç", "quarantineDeselectAll": "Tüm Seçimi Kaldır", "confirmRestoreTitle": "Dosyaları Geri Yükle", - "confirmRestoreDescription": "Bu işlem, {{count}} dosya(lar)ı özgün konumlarına geri yükleyecektir. Yalnızca güvendiğiniz dosyaları geri yükleyin.", + "confirmRestoreDescription": "Bu işlem, {{count}} dosyayı özgün konumuna geri yükleyecektir. Yalnızca güvendiğiniz dosyaları geri yükleyin.", "confirmRestoreLabel": "Şimdi Geri Yükle", "confirmDeleteQuarantineTitle": "Kalıcı Olarak Sil", - "confirmDeleteQuarantineDescription": "Bu işlem, karantinadaki {{count}} dosya(lar)ı kalıcı olarak silecektir. Bu işlem geri alınamaz.", + "confirmDeleteQuarantineDescription": "Bu işlem, karantinadaki {{count}} dosyayı kalıcı olarak silecektir. Bu işlem geri alınamaz.", "confirmDeleteQuarantineLabel": "Kalıcı Olarak Sil", "quarantineLoading": "Karantina yükleniyor...", "quarantineRestoring": "Dosyalar geri yükleniyor...", diff --git a/src/renderer/src/locales/uk/malware.json b/src/renderer/src/locales/uk/malware.json index 99b4373f..6b815013 100644 --- a/src/renderer/src/locales/uk/malware.json +++ b/src/renderer/src/locales/uk/malware.json @@ -28,20 +28,20 @@ "scanStatEngines": "Рушії", "severityHeading": "Рівень небезпеки", "selectedHeading": "Вибрано", - "selectedOfThreats": "із {{count}} загроз", + "selectedOfThreats": "з {{count}} загроз", "selectAll": "Вибрати все", "deselectAll": "Зняти вибір з усього", "actingQuarantining": "Переміщення вибраних загроз до карантину...", "actingDeleting": "Видалення вибраних загроз...", "actionCompleteQuarantine": "Переміщення до карантину завершено", "actionCompleteDeletion": "Видалення завершено", - "actionResultQuarantined": "Переміщено до карантину: {{count}}", + "actionResultQuarantined": "До карантину переміщено: {{count}}", "actionResultDeleted": "Видалено: {{count}}", "actionResultFailed": "Не вдалося: {{count}}", "noThreatsDetectedTitle": "Загроз не виявлено", - "noThreatsDetectedDescription": "Проскановано {{filesScanned}} файлів за допомогою {{engineCount}} рушіїв за {{duration}} с — ваша система чиста.", + "noThreatsDetectedDescription": "Проскановано {{filesScanned}} файлів у {{engineCount}} рушіях за {{duration}} с — ваша система чиста.", "emptyStateTitle": "Сканер шкідливого ПЗ", - "emptyStateDescription": "Натисніть \"Сканувати\", щоб перевірити систему на наявність шкідливого ПЗ, рекламного ПЗ, криптомайнерів і підозрілих файлів.", + "emptyStateDescription": "Натисніть «Сканувати», щоб перевірити систему на шкідливе ПЗ, рекламне ПЗ, криптомайнери та підозрілі файли.", "detectedThreatsHeading": "Виявлені загрози", "detectedThreatsCount": "{{count}} загроза", "detectedThreatsCountPlural": "{{count}} загроз", @@ -53,12 +53,12 @@ "confirmQuarantineDescription": "Буде переміщено {{count}} виявлених загроз(и) до карантину. За потреби файли можна буде відновити пізніше.", "confirmQuarantineLabel": "Перемістити до карантину", "confirmDeleteTitle": "Видалити загрози", - "confirmDeleteDescription": "Буде остаточно видалено {{count}} виявлених загроз(и). Цю дію неможливо скасувати.", - "confirmDeleteLabel": "Видалити остаточно", + "confirmDeleteDescription": "Буде назавжди видалено {{count}} виявлених загроз(и). Цю дію неможливо скасувати.", + "confirmDeleteLabel": "Видалити назавжди", "toastScanFailed": "Не вдалося виконати сканування на шкідливе ПЗ", "toastActionFailed": "Не вдалося {{action}} загрози", "toastActionFailedDescription": "Спробуйте запустити від імені адміністратора", - "errorOperationFailed": "Операцію не вдалося виконати — спробуйте запустити від імені адміністратора", + "errorOperationFailed": "Операцію не виконано — спробуйте запустити від імені адміністратора", "tabScanner": "Сканер", "tabQuarantine": "Карантин", "tabDatabase": "База даних", @@ -67,7 +67,7 @@ "dbFetchLatest": "Перевірити наявність оновлень", "dbUpdating": "Оновлення...", "dbEngine": "Рушій", - "dbEngineYara": "Kudu Cloud Signatures", + "dbEngineYara": "Хмарні сигнатури Kudu", "dbEngineRegex": "Резервний Regex", "dbEngineCompiling": "Компіляція...", "dbCompiling": "Компіляція правил сигнатур ({{loaded}}/{{total}})...", @@ -77,15 +77,14 @@ "dbNever": "Ніколи", "dbSource": "Джерело правил", "dbSourceCloud": "Хмара (кешовано)", - "dbSourceBundled": "У комплекті з програмою", "dbSourceNone": "Правила не завантажено", "dbRuleFiles": "Файли правил", - "dbRuleFilesCounts": "{{bundled}} у комплекті, {{cached}} з хмари", + "dbRuleFilesCounts": "{{count}} з хмари", "dbUpdateSuccess": "Оновлено до v{{version}} (правил: {{count}})", "dbAlreadyCurrent": "Сигнатури вже актуальні", "dbUpdateFailed": "Не вдалося оновити сигнатури", - "quarantineEmptyTitle": "Немає елементів у карантині", - "quarantineEmptyDescription": "Файли, переміщені до карантину, з’являться тут. Ви зможете відновити їх або остаточно видалити.", + "quarantineEmptyTitle": "Елементів у карантині немає", + "quarantineEmptyDescription": "Файли, переміщені до карантину, з’являться тут. Ви зможете відновити їх або видалити назавжди.", "quarantineHeading": "Файли в карантині", "quarantineCount": "{{count}} файл", "quarantineCountPlural": "{{count}} файлів", @@ -95,20 +94,20 @@ "quarantineColumnOriginal": "Початкове розташування", "quarantineOriginalUnknown": "Невідомо", "quarantineRestoreButton": "Відновити", - "quarantineDeleteButton": "Видалити остаточно", + "quarantineDeleteButton": "Видалити назавжди", "quarantineSelectAll": "Вибрати все", "quarantineDeselectAll": "Зняти вибір з усього", "confirmRestoreTitle": "Відновити файли", "confirmRestoreDescription": "Буде відновлено {{count}} файл(ів) до початкового розташування. Відновлюйте лише ті файли, яким довіряєте.", "confirmRestoreLabel": "Відновити зараз", - "confirmDeleteQuarantineTitle": "Остаточно видалити", - "confirmDeleteQuarantineDescription": "Буде остаточно видалено {{count}} файл(ів) із карантину. Цю дію неможливо скасувати.", - "confirmDeleteQuarantineLabel": "Видалити остаточно", + "confirmDeleteQuarantineTitle": "Видалити назавжди", + "confirmDeleteQuarantineDescription": "Буде назавжди видалено {{count}} файл(ів) із карантину. Цю дію неможливо скасувати.", + "confirmDeleteQuarantineLabel": "Видалити назавжди", "quarantineLoading": "Завантаження карантину...", "quarantineRestoring": "Відновлення файлів...", "quarantineDeleting": "Видалення файлів...", "toastRestoreSuccess": "Відновлено файл(ів): {{count}}", "toastRestoreFailed": "Не вдалося відновити деякі файли", - "toastDeleteQuarantineSuccess": "Остаточно видалено файл(ів): {{count}}", - "toastRestoreNoOriginal": "Неможливо відновити — початкове розташування невідоме" + "toastDeleteQuarantineSuccess": "Назавжди видалено файл(ів): {{count}}", + "toastRestoreNoOriginal": "Не вдалося відновити — початкове розташування невідоме" } diff --git a/src/renderer/src/locales/vi/malware.json b/src/renderer/src/locales/vi/malware.json index 26d0e3c4..2d6ac393 100644 --- a/src/renderer/src/locales/vi/malware.json +++ b/src/renderer/src/locales/vi/malware.json @@ -39,7 +39,7 @@ "actionResultDeleted": "Đã xóa {{count}}", "actionResultFailed": "{{count}} thất bại", "noThreatsDetectedTitle": "Không phát hiện mối đe dọa", - "noThreatsDetectedDescription": "Đã quét {{filesScanned}} tệp bằng {{engineCount}} công cụ trong {{duration}} giây — hệ thống của bạn sạch.", + "noThreatsDetectedDescription": "Đã quét {{filesScanned}} tệp trên {{engineCount}} công cụ trong {{duration}} giây — hệ thống của bạn sạch.", "emptyStateTitle": "Trình quét phần mềm độc hại", "emptyStateDescription": "Nhấp vào \"Quét\" để kiểm tra hệ thống của bạn tìm phần mềm độc hại, phần mềm quảng cáo, trình đào tiền mã hóa và các tệp đáng ngờ.", "detectedThreatsHeading": "Các mối đe dọa đã phát hiện", @@ -50,10 +50,10 @@ "threatDetailSize": "Kích thước", "threatDetailPath": "Đường dẫn", "confirmQuarantineTitle": "Cách ly mối đe dọa", - "confirmQuarantineDescription": "Thao tác này sẽ chuyển {{count}} mối đe dọa đã phát hiện vào khu vực cách ly. Có thể khôi phục tệp sau nếu cần.", + "confirmQuarantineDescription": "Thao tác này sẽ chuyển {{count}} mối đe dọa đã phát hiện vào vùng cách ly. Có thể khôi phục tệp sau nếu cần.", "confirmQuarantineLabel": "Cách ly ngay", "confirmDeleteTitle": "Xóa mối đe dọa", - "confirmDeleteDescription": "Thao tác này sẽ xóa vĩnh viễn {{count}} mối đe dọa đã phát hiện. Không thể hoàn tác hành động này.", + "confirmDeleteDescription": "Thao tác này sẽ xóa vĩnh viễn {{count}} mối đe dọa đã phát hiện. Hành động này không thể hoàn tác.", "confirmDeleteLabel": "Xóa vĩnh viễn", "toastScanFailed": "Quét phần mềm độc hại thất bại", "toastActionFailed": "Không thể {{action}} các mối đe dọa", @@ -76,17 +76,16 @@ "dbLastUpdated": "Cập nhật lần cuối", "dbNever": "Chưa bao giờ", "dbSource": "Nguồn quy tắc", - "dbSourceCloud": "Cloud (đã lưu đệm)", - "dbSourceBundled": "Đi kèm ứng dụng", + "dbSourceCloud": "Đám mây (đã lưu đệm)", "dbSourceNone": "Chưa tải quy tắc nào", "dbRuleFiles": "Tệp quy tắc", - "dbRuleFilesCounts": "{{bundled}} đi kèm, {{cached}} từ cloud", + "dbRuleFilesCounts": "{{count}} từ cloud", "dbUpdateSuccess": "Đã cập nhật lên v{{version}} ({{count}} quy tắc)", "dbAlreadyCurrent": "Các chữ ký đã được cập nhật mới nhất", "dbUpdateFailed": "Không thể cập nhật chữ ký", - "quarantineEmptyTitle": "Không có mục nào trong khu vực cách ly", - "quarantineEmptyDescription": "Các tệp được chuyển vào khu vực cách ly sẽ xuất hiện ở đây. Bạn có thể khôi phục hoặc xóa vĩnh viễn chúng.", - "quarantineHeading": "Các tệp đã cách ly", + "quarantineEmptyTitle": "Không có mục nào trong vùng cách ly", + "quarantineEmptyDescription": "Các tệp được chuyển vào vùng cách ly sẽ xuất hiện tại đây. Bạn có thể khôi phục hoặc xóa vĩnh viễn chúng.", + "quarantineHeading": "Các tệp bị cách ly", "quarantineCount": "{{count}} tệp", "quarantineCountPlural": "{{count}} tệp", "quarantineColumnFile": "Tệp", @@ -99,12 +98,12 @@ "quarantineSelectAll": "Chọn tất cả", "quarantineDeselectAll": "Bỏ chọn tất cả", "confirmRestoreTitle": "Khôi phục tệp", - "confirmRestoreDescription": "Thao tác này sẽ khôi phục {{count}} tệp về vị trí gốc của chúng. Chỉ khôi phục những tệp bạn tin cậy.", + "confirmRestoreDescription": "Thao tác này sẽ khôi phục {{count}} tệp về vị trí gốc của chúng. Chỉ khôi phục các tệp mà bạn tin cậy.", "confirmRestoreLabel": "Khôi phục ngay", "confirmDeleteQuarantineTitle": "Xóa vĩnh viễn", - "confirmDeleteQuarantineDescription": "Thao tác này sẽ xóa vĩnh viễn {{count}} tệp đã cách ly. Không thể hoàn tác hành động này.", + "confirmDeleteQuarantineDescription": "Thao tác này sẽ xóa vĩnh viễn {{count}} tệp bị cách ly. Hành động này không thể hoàn tác.", "confirmDeleteQuarantineLabel": "Xóa vĩnh viễn", - "quarantineLoading": "Đang tải khu vực cách ly...", + "quarantineLoading": "Đang tải vùng cách ly...", "quarantineRestoring": "Đang khôi phục tệp...", "quarantineDeleting": "Đang xóa tệp...", "toastRestoreSuccess": "Đã khôi phục {{count}} tệp", diff --git a/src/renderer/src/locales/zh-CN/malware.json b/src/renderer/src/locales/zh-CN/malware.json index 1daca481..d6e82bef 100644 --- a/src/renderer/src/locales/zh-CN/malware.json +++ b/src/renderer/src/locales/zh-CN/malware.json @@ -37,7 +37,7 @@ "actionCompleteDeletion": "删除完成", "actionResultQuarantined": "已隔离 {{count}} 个", "actionResultDeleted": "已删除 {{count}} 个", - "actionResultFailed": "{{count}} 个失败", + "actionResultFailed": "失败 {{count}} 个", "noThreatsDetectedTitle": "未检测到威胁", "noThreatsDetectedDescription": "已通过 {{engineCount}} 个引擎在 {{duration}} 秒内扫描 {{filesScanned}} 个文件——您的系统很干净。", "emptyStateTitle": "恶意软件扫描器", @@ -50,7 +50,7 @@ "threatDetailSize": "大小", "threatDetailPath": "路径", "confirmQuarantineTitle": "隔离威胁", - "confirmQuarantineDescription": "这将把检测到的 {{count}} 个威胁移至隔离区。如有需要,稍后可以恢复这些文件。", + "confirmQuarantineDescription": "这将把检测到的 {{count}} 个威胁移至隔离区。如有需要,稍后可恢复这些文件。", "confirmQuarantineLabel": "立即隔离", "confirmDeleteTitle": "删除威胁", "confirmDeleteDescription": "这将永久删除检测到的 {{count}} 个威胁。此操作无法撤销。", @@ -67,20 +67,19 @@ "dbFetchLatest": "检查更新", "dbUpdating": "正在更新...", "dbEngine": "引擎", - "dbEngineYara": "Kudu Cloud Signatures", + "dbEngineYara": "Kudu 云签名", "dbEngineRegex": "Regex 回退", "dbEngineCompiling": "正在编译...", "dbCompiling": "正在编译签名规则 ({{loaded}}/{{total}})...", "dbRulesLoaded": "已加载规则", "dbVersion": "签名版本", - "dbLastUpdated": "上次更新", + "dbLastUpdated": "上次更新时间", "dbNever": "从未", "dbSource": "规则来源", "dbSourceCloud": "云端(已缓存)", - "dbSourceBundled": "随应用附带", "dbSourceNone": "未加载规则", "dbRuleFiles": "规则文件", - "dbRuleFilesCounts": "{{bundled}} 个内置,{{cached}} 个来自云端", + "dbRuleFilesCounts": "{{count}} 个来自云端", "dbUpdateSuccess": "已更新到 v{{version}}({{count}} 条规则)", "dbAlreadyCurrent": "签名已是最新", "dbUpdateFailed": "更新签名失败", @@ -99,7 +98,7 @@ "quarantineSelectAll": "全选", "quarantineDeselectAll": "取消全选", "confirmRestoreTitle": "恢复文件", - "confirmRestoreDescription": "这将把 {{count}} 个文件恢复到其原始位置。仅恢复您信任的文件。", + "confirmRestoreDescription": "这将把 {{count}} 个文件恢复到其原始位置。请仅恢复您信任的文件。", "confirmRestoreLabel": "立即恢复", "confirmDeleteQuarantineTitle": "永久删除", "confirmDeleteQuarantineDescription": "这将永久删除 {{count}} 个已隔离文件。此操作无法撤销。", diff --git a/src/renderer/src/locales/zh-TW/malware.json b/src/renderer/src/locales/zh-TW/malware.json index d4f93840..f6a6ea52 100644 --- a/src/renderer/src/locales/zh-TW/malware.json +++ b/src/renderer/src/locales/zh-TW/malware.json @@ -1,6 +1,6 @@ { "pageTitle": "惡意軟體掃描器", - "pageDescription": "多引擎威脅偵測 — 特徵碼、啟發式分析、指令碼分析、系統完整性與持續性掃描", + "pageDescription": "多引擎威脅偵測 — 簽章、啟發式分析、指令碼分析、系統完整性與持續性掃描", "scanButtonScanning": "掃描中...", "scanButton": "掃描", "quarantineButton": "隔離", @@ -13,14 +13,14 @@ "sourceDefenderMac": "程式碼簽署", "sourceDefenderLinux": "ClamAV", "sourceHeuristic": "啟發式分析", - "sourceSignature": "已知特徵碼", + "sourceSignature": "已知簽章", "initializingScanEngines": "正在初始化掃描引擎...", "filesScanned": "已掃描 {{count}} 個檔案", "threatCount": "{{count}} 個威脅", "threatCountPlural": "{{count}} 個威脅", "threatFound": "找到 {{count}} 個", "scanCategoryClean": "乾淨", - "scanCategoryNA": "不適用", + "scanCategoryNA": "N/A", "scanSummarySystemClean": "系統乾淨", "scanSummaryThreatsDetected": "已偵測到 {{count}} 個威脅", "scanStatFiles": "檔案", @@ -31,17 +31,17 @@ "selectedOfThreats": "共 {{count}} 個威脅", "selectAll": "全選", "deselectAll": "取消全選", - "actingQuarantining": "正在隔離所選威脅...", - "actingDeleting": "正在刪除所選威脅...", + "actingQuarantining": "正在隔離選取的威脅...", + "actingDeleting": "正在刪除選取的威脅...", "actionCompleteQuarantine": "隔離完成", "actionCompleteDeletion": "刪除完成", "actionResultQuarantined": "已隔離 {{count}} 個", "actionResultDeleted": "已刪除 {{count}} 個", "actionResultFailed": "{{count}} 個失敗", "noThreatsDetectedTitle": "未偵測到威脅", - "noThreatsDetectedDescription": "已在 {{duration}} 秒內使用 {{engineCount}} 個引擎掃描 {{filesScanned}} 個檔案 — 您的系統是乾淨的。", + "noThreatsDetectedDescription": "已在 {{duration}} 秒內使用 {{engineCount}} 個引擎掃描 {{filesScanned}} 個檔案 — 您的系統很乾淨。", "emptyStateTitle": "惡意軟體掃描器", - "emptyStateDescription": "按一下「掃描」以檢查您的系統是否有惡意軟體、廣告軟體、加密貨幣挖礦程式與可疑檔案。", + "emptyStateDescription": "按一下「掃描」以檢查系統中的惡意軟體、廣告軟體、加密貨幣挖礦程式與可疑檔案。", "detectedThreatsHeading": "已偵測到的威脅", "detectedThreatsCount": "{{count}} 個威脅", "detectedThreatsCountPlural": "{{count}} 個威脅", @@ -50,10 +50,10 @@ "threatDetailSize": "大小", "threatDetailPath": "路徑", "confirmQuarantineTitle": "隔離威脅", - "confirmQuarantineDescription": "這將把偵測到的 {{count}} 個威脅移至隔離區。如有需要,之後可還原檔案。", + "confirmQuarantineDescription": "這會將偵測到的 {{count}} 個威脅移至隔離區。如有需要,之後可還原檔案。", "confirmQuarantineLabel": "立即隔離", "confirmDeleteTitle": "刪除威脅", - "confirmDeleteDescription": "這將永久刪除偵測到的 {{count}} 個威脅。此動作無法復原。", + "confirmDeleteDescription": "這會永久刪除偵測到的 {{count}} 個威脅。此動作無法復原。", "confirmDeleteLabel": "永久刪除", "toastScanFailed": "惡意軟體掃描失敗", "toastActionFailed": "無法{{action}}威脅", @@ -62,7 +62,7 @@ "tabScanner": "掃描器", "tabQuarantine": "隔離區", "tabDatabase": "資料庫", - "dbTitle": "特徵碼資料庫", + "dbTitle": "簽章資料庫", "dbDescription": "掃描器使用的 YARA 惡意軟體偵測規則", "dbFetchLatest": "檢查更新", "dbUpdating": "更新中...", @@ -70,20 +70,19 @@ "dbEngineYara": "Kudu Cloud Signatures", "dbEngineRegex": "Regex 備援", "dbEngineCompiling": "編譯中...", - "dbCompiling": "正在編譯特徵碼規則 ({{loaded}}/{{total}})...", + "dbCompiling": "正在編譯簽章規則 ({{loaded}}/{{total}})...", "dbRulesLoaded": "已載入規則", - "dbVersion": "特徵碼版本", + "dbVersion": "簽章版本", "dbLastUpdated": "上次更新", "dbNever": "從未", "dbSource": "規則來源", "dbSourceCloud": "雲端(已快取)", - "dbSourceBundled": "隨應用程式提供", "dbSourceNone": "未載入任何規則", "dbRuleFiles": "規則檔案", - "dbRuleFilesCounts": "{{bundled}} 個隨附,{{cached}} 個來自雲端", + "dbRuleFilesCounts": "{{count}} 個來自雲端", "dbUpdateSuccess": "已更新至 v{{version}}({{count}} 條規則)", - "dbAlreadyCurrent": "特徵碼已是最新版本", - "dbUpdateFailed": "更新特徵碼失敗", + "dbAlreadyCurrent": "簽章已是最新版本", + "dbUpdateFailed": "更新簽章失敗", "quarantineEmptyTitle": "沒有已隔離的項目", "quarantineEmptyDescription": "移至隔離區的檔案會顯示在這裡。您可以還原或永久刪除它們。", "quarantineHeading": "已隔離的檔案", @@ -99,10 +98,10 @@ "quarantineSelectAll": "全選", "quarantineDeselectAll": "取消全選", "confirmRestoreTitle": "還原檔案", - "confirmRestoreDescription": "這將把 {{count}} 個檔案還原至其原始位置。請僅還原您信任的檔案。", + "confirmRestoreDescription": "這會將 {{count}} 個檔案還原至其原始位置。請僅還原您信任的檔案。", "confirmRestoreLabel": "立即還原", "confirmDeleteQuarantineTitle": "永久刪除", - "confirmDeleteQuarantineDescription": "這將永久刪除 {{count}} 個已隔離的檔案。此動作無法復原。", + "confirmDeleteQuarantineDescription": "這會永久刪除 {{count}} 個已隔離的檔案。此動作無法復原。", "confirmDeleteQuarantineLabel": "永久刪除", "quarantineLoading": "正在載入隔離區...", "quarantineRestoring": "正在還原檔案...", diff --git a/src/renderer/src/pages/MalwareScannerPage.tsx b/src/renderer/src/pages/MalwareScannerPage.tsx index 2a55c66b..20b6fbd9 100644 --- a/src/renderer/src/pages/MalwareScannerPage.tsx +++ b/src/renderer/src/pages/MalwareScannerPage.tsx @@ -1226,7 +1226,7 @@ export function MalwareScannerPage() {

{t('dbSource')}

- {yaraInfo.source === 'cloud' ? t('dbSourceCloud') : yaraInfo.source === 'bundled' ? t('dbSourceBundled') : t('dbSourceNone')} + {yaraInfo.source === 'cloud' ? t('dbSourceCloud') : t('dbSourceNone')}
@@ -1234,7 +1234,7 @@ export function MalwareScannerPage() {

{t('dbRuleFiles')}

- {t('dbRuleFilesCounts', { bundled: yaraInfo.bundledRules, cached: yaraInfo.cachedRules })} + {t('dbRuleFilesCounts', { count: yaraInfo.cachedRules })}
diff --git a/src/shared/types.ts b/src/shared/types.ts index 4ed18c4a..056194b7 100644 --- a/src/shared/types.ts +++ b/src/shared/types.ts @@ -299,12 +299,11 @@ export interface QuarantinedItem { export interface YaraRulesInfo { available: boolean - engine: 'yara' | 'regex-fallback' | 'compiling' + engine: 'yara' | 'pending' | 'compiling' rulesLoaded: number version: string | null updatedAt: string | null - source: 'cloud' | 'bundled' | 'none' - bundledRules: number + source: 'cloud' | 'none' cachedRules: number compileProgress: { loaded: number; total: number } | null }