75 Commits
Author SHA1 Message Date
iamdoubz ad3e839b6c Merge pull request 'Feat model quant' (#27) from feat_model_quant into main
Reviewed-on: #27
2026-07-17 08:00:52 -05:00
iamdoubz f9b2695dfc chore(release): bump tauri.conf.json to 0.7.5 2026-07-17 07:59:08 -05:00
iamdoubz a63a7d22e3 chore(release): bump whispassist Cargo.lock entry to 0.7.5 2026-07-17 07:59:06 -05:00
iamdoubz 1d6c2cc7f8 chore(release): bump Cargo.toml to 0.7.5 2026-07-17 07:59:05 -05:00
iamdoubz 64b1e50d17 chore(release): bump package.json to 0.7.5 2026-07-17 07:59:04 -05:00
iamdoubz afb1ffaa3e feat(i18n): ur strings for unencrypted padlock and encrypt action 2026-07-16 23:07:14 -05:00
iamdoubz 8f56509c16 feat(i18n): ar strings for unencrypted padlock and encrypt action 2026-07-16 23:07:13 -05:00
iamdoubz 618e8e1f40 feat(i18n): si strings for unencrypted padlock and encrypt action 2026-07-16 23:07:12 -05:00
iamdoubz a1f066d361 feat(i18n): ta strings for unencrypted padlock and encrypt action 2026-07-16 23:07:10 -05:00
iamdoubz c3f874418b feat(i18n): bn strings for unencrypted padlock and encrypt action 2026-07-16 23:07:09 -05:00
iamdoubz f49288ddf1 feat(i18n): hi strings for unencrypted padlock and encrypt action 2026-07-16 23:07:08 -05:00
iamdoubz 78a5c09ea4 feat(i18n): ko strings for unencrypted padlock and encrypt action 2026-07-16 23:07:07 -05:00
iamdoubz 1ff31c188f feat(i18n): zh-CN strings for unencrypted padlock and encrypt action 2026-07-16 23:07:05 -05:00
iamdoubz fb380fb11d feat(i18n): fi strings for unencrypted padlock and encrypt action 2026-07-16 23:07:04 -05:00
iamdoubz b67e1e3748 feat(i18n): nb strings for unencrypted padlock and encrypt action 2026-07-16 23:07:03 -05:00
iamdoubz 6f31bc3907 feat(i18n): sv strings for unencrypted padlock and encrypt action 2026-07-16 23:07:02 -05:00
iamdoubz 2205367925 feat(i18n): ru strings for unencrypted padlock and encrypt action 2026-07-16 23:07:00 -05:00
iamdoubz 5507ad48db feat(i18n): pt-BR strings for unencrypted padlock and encrypt action 2026-07-16 23:06:59 -05:00
iamdoubz 2419059eea feat(i18n): pt-PT strings for unencrypted padlock and encrypt action 2026-07-16 23:06:58 -05:00
iamdoubz 010649b1d1 feat(i18n): fr-CA strings for unencrypted padlock and encrypt action 2026-07-16 23:06:57 -05:00
iamdoubz 058082824d feat(i18n): fr-FR strings for unencrypted padlock and encrypt action 2026-07-16 23:06:55 -05:00
iamdoubz 7ba27c079f feat(i18n): es-MX strings for unencrypted padlock and encrypt action 2026-07-16 23:06:54 -05:00
iamdoubz c1146bb76f feat(i18n): es-ES strings for unencrypted padlock and encrypt action 2026-07-16 23:06:53 -05:00
iamdoubz f5f25e9f86 feat(i18n): de strings for unencrypted padlock and encrypt action 2026-07-16 23:06:52 -05:00
iamdoubz c546b567e0 feat(i18n): en strings for unencrypted padlock and encrypt action 2026-07-16 23:06:50 -05:00
iamdoubz ce14a7bd06 feat(vault): refresh meeting padlocks after vault enable/unlock/lock 2026-07-16 23:06:49 -05:00
iamdoubz fa15a105fd feat(vault): open-padlock marker + Encrypt action per meeting (FR-SEC-3) 2026-07-16 23:06:48 -05:00
iamdoubz e104dfd5fe feat(vault): meetings store tracks unencrypted ids, vault unlock, encrypt action 2026-07-16 23:06:47 -05:00
iamdoubz 2b2c500432 feat(vault): api bindings for unencrypted-meeting list and encrypt_meeting 2026-07-16 23:06:45 -05:00
iamdoubz 691456552d chore(lint): run i18n parity check first so prettier drift can't mask it 2026-07-16 23:06:44 -05:00
iamdoubz 785b4dce50 feat(vault): register unencrypted-list and encrypt-meeting commands 2026-07-16 23:01:26 -05:00
iamdoubz 39f71ab266 feat(vault): list_unencrypted_meetings + encrypt_meeting seal-in-place commands (FR-SEC-3) 2026-07-16 23:01:25 -05:00
iamdoubz 06bf067fdb chore(lint): run i18n parity check in npm run lint 2026-07-16 22:58:52 -05:00
iamdoubz f3197ffc53 chore(i18n): key-parity + placeholder check script, catches untranslated keys 2026-07-16 22:58:50 -05:00
iamdoubz ddc3dd4262 fix(i18n): ur backfill 53 untranslated keys, drop dead import.requires_1-3 2026-07-16 21:24:46 -05:00
iamdoubz d4f0a93420 fix(i18n): ar backfill 53 untranslated keys, drop dead import.requires_1-3 2026-07-16 21:24:45 -05:00
iamdoubz 8ff00da0b4 fix(i18n): si backfill 53 untranslated keys, drop dead import.requires_1-3 2026-07-16 21:24:44 -05:00
iamdoubz 7fd52c9a62 fix(i18n): ta backfill 53 untranslated keys, drop dead import.requires_1-3 2026-07-16 21:24:43 -05:00
iamdoubz 91354cb45d fix(i18n): bn backfill 53 untranslated keys, drop dead import.requires_1-3 2026-07-16 21:24:42 -05:00
iamdoubz f39814cd95 fix(i18n): hi backfill 53 untranslated keys, drop dead import.requires_1-3 2026-07-16 21:24:41 -05:00
iamdoubz e9e6677756 fix(i18n): ko backfill 53 untranslated keys, drop dead import.requires_1-3 2026-07-16 21:24:40 -05:00
iamdoubz 167a53e897 fix(i18n): zh-CN backfill 53 untranslated keys, drop dead import.requires_1-3 2026-07-16 21:24:39 -05:00
iamdoubz 0598f4d8e2 fix(i18n): fi backfill 53 untranslated keys, drop dead import.requires_1-3 2026-07-16 21:24:38 -05:00
iamdoubz a2daf3aa02 fix(i18n): nb backfill 53 untranslated keys, drop dead import.requires_1-3 2026-07-16 21:24:37 -05:00
iamdoubz b41a8f666f fix(i18n): sv backfill 53 untranslated keys, drop dead import.requires_1-3 2026-07-16 21:24:35 -05:00
iamdoubz 31bdf0e39c fix(i18n): ru backfill 53 untranslated keys, drop dead import.requires_1-3 2026-07-16 21:24:34 -05:00
iamdoubz 5731e2df68 fix(i18n): pt-BR backfill 53 untranslated keys, drop dead import.requires_1-3 2026-07-16 21:24:33 -05:00
iamdoubz 04244196bb fix(i18n): pt-PT backfill 53 untranslated keys, drop dead import.requires_1-3 2026-07-16 21:24:32 -05:00
iamdoubz 28b9816162 fix(i18n): fr-CA backfill 53 untranslated keys, drop dead import.requires_1-3 2026-07-16 21:24:31 -05:00
iamdoubz a7d38b39dc fix(i18n): fr-FR backfill 53 untranslated keys, drop dead import.requires_1-3 2026-07-16 21:24:30 -05:00
iamdoubz 804b0a8598 fix(i18n): es-MX backfill 53 untranslated keys, drop dead import.requires_1-3 2026-07-16 21:24:29 -05:00
iamdoubz 804e3b6fa6 fix(i18n): es-ES backfill 53 untranslated keys, drop dead import.requires_1-3 2026-07-16 21:24:28 -05:00
iamdoubz 1525645ace fix(i18n): de backfill 53 untranslated keys, drop dead import.requires_1-3 2026-07-16 21:24:27 -05:00
iamdoubz d49f375a13 feat(i18n): ur strings for model quantization picker 2026-07-16 21:10:14 -05:00
iamdoubz 0f8b5500c2 feat(i18n): ar strings for model quantization picker 2026-07-16 21:10:13 -05:00
iamdoubz 9c349bb84d feat(i18n): si strings for model quantization picker 2026-07-16 21:10:12 -05:00
iamdoubz 5d2aa9840a feat(i18n): ta strings for model quantization picker 2026-07-16 21:10:11 -05:00
iamdoubz 204a507de7 feat(i18n): bn strings for model quantization picker 2026-07-16 21:10:10 -05:00
iamdoubz 4e167082ac feat(i18n): hi strings for model quantization picker 2026-07-16 21:10:08 -05:00
iamdoubz ee5c0ea7bc feat(i18n): ko strings for model quantization picker 2026-07-16 21:10:07 -05:00
iamdoubz 9311909a58 feat(i18n): zh-CN strings for model quantization picker 2026-07-16 21:10:06 -05:00
iamdoubz ec42d89f66 feat(i18n): fi strings for model quantization picker 2026-07-16 21:10:05 -05:00
iamdoubz c00da29f06 feat(i18n): nb strings for model quantization picker 2026-07-16 21:10:03 -05:00
iamdoubz 66b35c3a6c feat(i18n): sv strings for model quantization picker 2026-07-16 21:10:02 -05:00
iamdoubz 1a27fa0a1a feat(i18n): ru strings for model quantization picker 2026-07-16 21:10:01 -05:00
iamdoubz 8998863bb0 feat(i18n): pt-BR strings for model quantization picker 2026-07-16 21:09:59 -05:00
iamdoubz 94443dcd35 feat(i18n): pt-PT strings for model quantization picker 2026-07-16 21:09:58 -05:00
iamdoubz d3f4aeef14 feat(i18n): fr-CA strings for model quantization picker 2026-07-16 21:09:57 -05:00
iamdoubz 4bbaed7b0c feat(i18n): fr-FR strings for model quantization picker 2026-07-16 21:09:56 -05:00
iamdoubz b55bd5175f feat(i18n): es-MX strings for model quantization picker 2026-07-16 21:09:55 -05:00
iamdoubz d1b951e9ea feat(i18n): es-ES strings for model quantization picker 2026-07-16 21:09:54 -05:00
iamdoubz e2ec141d75 feat(i18n): de strings for model quantization picker 2026-07-16 21:09:53 -05:00
iamdoubz 90c12cb070 feat(i18n): en strings for model quantization picker 2026-07-16 21:09:51 -05:00
iamdoubz 88adce152b feat(ui): group whisper models per family with quantization dropdown (FR-MODEL-1) 2026-07-16 21:09:50 -05:00
iamdoubz 9e3f6327b7 feat(models): add Q8_0 variants + large-v3-turbo q5_0/q8_0 to catalog (FR-MODEL-1) 2026-07-16 21:06:35 -05:00
32 changed files with 1587 additions and 97 deletions
+2 -2
View File
@@ -1,7 +1,7 @@
{ {
"name": "whispassist", "name": "whispassist",
"private": true, "private": true,
"version": "0.7.4", "version": "0.7.5",
"type": "module", "type": "module",
"description": "Privacy-first, fully local Windows meeting assistant.", "description": "Privacy-first, fully local Windows meeting assistant.",
"license": "MIT OR Apache-2.0", "license": "MIT OR Apache-2.0",
@@ -11,7 +11,7 @@
"preview": "vite preview", "preview": "vite preview",
"check": "svelte-check --tsconfig ./tsconfig.json", "check": "svelte-check --tsconfig ./tsconfig.json",
"tauri": "tauri", "tauri": "tauri",
"lint": "prettier --check . && eslint .", "lint": "node scripts/check-i18n.mjs && prettier --check . && eslint .",
"format": "prettier --write ." "format": "prettier --write ."
}, },
"devDependencies": { "devDependencies": {
+32
View File
@@ -0,0 +1,32 @@
// i18n key-parity check: every locale file must have exactly en.json's keys,
// and every translation must use the same {placeholders} as its English
// source. Runs as part of `npm run lint` — English fallback otherwise hides
// missing translations silently (they shipped untranslated for months once).
import { readFileSync, readdirSync } from "node:fs";
const DIR = new URL("../src/lib/i18n/", import.meta.url);
const en = JSON.parse(readFileSync(new URL("en.json", DIR), "utf8"));
const placeholders = (s) =>
[...s.matchAll(/\{(\w+)\}/g)]
.map((m) => m[1])
.sort()
.join(",");
let failed = false;
for (const file of readdirSync(DIR).filter((f) => f.endsWith(".json") && f !== "en.json")) {
const dict = JSON.parse(readFileSync(new URL(file, DIR), "utf8"));
const missing = Object.keys(en).filter((k) => !(k in dict));
const extra = Object.keys(dict).filter((k) => !(k in en));
const badVars = Object.keys(dict).filter(
(k) => k in en && placeholders(dict[k]) !== placeholders(en[k]),
);
for (const k of missing) console.error(`${file}: missing "${k}"`);
for (const k of extra) console.error(`${file}: extra "${k}" (not in en.json)`);
for (const k of badVars) console.error(`${file}: "${k}" placeholders differ from en.json`);
if (missing.length || extra.length || badVars.length) failed = true;
}
if (failed) {
console.error("\ni18n parity check FAILED — keep every locale in lockstep with en.json.");
process.exit(1);
}
console.log("i18n parity OK");
+1 -1
View File
@@ -6088,7 +6088,7 @@ dependencies = [
[[package]] [[package]]
name = "whispassist" name = "whispassist"
version = "0.7.4" version = "0.7.5"
dependencies = [ dependencies = [
"argon2", "argon2",
"async-trait", "async-trait",
+1 -1
View File
@@ -1,6 +1,6 @@
[package] [package]
name = "whispassist" name = "whispassist"
version = "0.7.4" version = "0.7.5"
description = "Privacy-first, fully local Windows meeting assistant" description = "Privacy-first, fully local Windows meeting assistant"
authors = ["WhispAssist contributors"] authors = ["WhispAssist contributors"]
license = "MIT OR Apache-2.0" license = "MIT OR Apache-2.0"
+136
View File
@@ -4785,6 +4785,121 @@ pub async fn change_vault_password(args: ChangeVaultPasswordArgs) -> WaResult<()
.map_err(|e| WaError::new("vault", e.to_string())) .map_err(|e| WaError::new("vault", e.to_string()))
} }
/// Every file in a meeting dir the vault should seal, recursing into subdirs
/// (`briefs/`). Excludes transient files: the old player's plaintext temp,
/// in-flight downloads, and our own seal-in-progress temps (a crashed
/// `encrypt_meeting` may leave a stray `.enc-tmp` behind — harmless, since
/// nothing reads them and the next run rewrites from the original).
fn sealable_meeting_files(dir: &Path) -> Vec<PathBuf> {
let mut out = Vec::new();
let mut stack = vec![dir.to_path_buf()];
while let Some(d) = stack.pop() {
let Ok(entries) = std::fs::read_dir(&d) else {
continue;
};
for entry in entries.flatten() {
let p = entry.path();
let name = entry.file_name().to_string_lossy().into_owned();
if p.is_dir() {
if name != "import-tmp" {
stack.push(p);
}
} else if name != "audio.play.wav"
&& !name.ends_with(".part")
&& !name.ends_with(".enc-tmp")
{
out.push(p);
}
}
}
out
}
/// True if any sealable artifact in the meeting dir is plaintext (no vault
/// magic header) — a cheap 4-byte head read per file, never a full read.
fn has_plaintext_artifact(dir: &Path) -> bool {
sealable_meeting_files(dir).iter().any(|p| {
let mut head = [0u8; 4];
match std::fs::File::open(p).and_then(|mut f| {
use std::io::Read;
f.read(&mut head)
}) {
Ok(n) => !crate::vault::is_sealed(&head[..n]),
Err(_) => false,
}
})
}
/// Ids of meetings that still have at least one plaintext artifact on disk
/// (FR-SEC-3) — drives the "unencrypted" padlock in the meetings list. Empty
/// when the vault isn't set up, where the distinction would be noise.
#[tauri::command]
pub async fn list_unencrypted_meetings() -> WaResult<Vec<String>> {
if !crate::vault::is_enabled() {
return Ok(Vec::new());
}
tauri::async_runtime::spawn_blocking(|| {
let mut ids = Vec::new();
if let Ok(entries) = std::fs::read_dir(crate::paths::meetings_dir()) {
for entry in entries.flatten() {
let p = entry.path();
if p.is_dir() && has_plaintext_artifact(&p) {
if let Some(name) = p.file_name().and_then(|n| n.to_str()) {
ids.push(name.to_string());
}
}
}
}
ids
})
.await
.map_err(|e| WaError::new("vault", e.to_string()))
}
/// Seal a meeting's on-disk artifacts in place (FR-SEC-3) — the "convert to
/// encrypted" action for meetings recorded before the vault existed or while
/// it was locked. Requires the vault to be unlocked; already-sealed files are
/// left untouched, and every reader is vault-aware, so this is transparent.
#[tauri::command]
pub async fn encrypt_meeting(state: State<'_, AppState>, meeting_id: MeetingId) -> WaResult<()> {
if !crate::vault::is_unlocked() {
return Err(WaError::new(
"vault",
"unlock the vault to encrypt meetings",
));
}
let guard = state.session.lock().await;
if guard.as_ref().is_some_and(|s| s.meeting_id == meeting_id) {
return Err(WaError::new(
"vault",
"cannot encrypt a meeting that is currently recording",
));
}
drop(guard);
tauri::async_runtime::spawn_blocking(move || {
let dir = meeting_dir(&meeting_id);
if !dir.exists() {
return Ok(()); // no artifacts on disk — nothing to seal
}
for path in sealable_meeting_files(&dir) {
let bytes = std::fs::read(&path).map_err(|e| WaError::new("vault", e.to_string()))?;
if crate::vault::is_sealed(&bytes) {
continue;
}
let sealed = crate::vault::ensure_sealed(&bytes)
.map_err(|e| WaError::new("vault", e.to_string()))?;
// Write-then-rename so a crash mid-seal never truncates an artifact.
let name = path.file_name().map(|n| n.to_string_lossy().into_owned());
let tmp = path.with_file_name(format!("{}.enc-tmp", name.unwrap_or_default()));
std::fs::write(&tmp, &sealed).map_err(|e| WaError::new("vault", e.to_string()))?;
std::fs::rename(&tmp, &path).map_err(|e| WaError::new("vault", e.to_string()))?;
}
Ok(())
})
.await
.map_err(|e| WaError::new("vault", e.to_string()))?
}
// ---- Sync durable queue (T9.5) ---- // ---- Sync durable queue (T9.5) ----
/// Give up auto-retrying after this many failures; the job stays `failed` with /// Give up auto-retrying after this many failures; the job stays `failed` with
@@ -5512,6 +5627,27 @@ pub async fn privacy_self_check(state: State<'_, AppState>) -> WaResult<serde_js
mod tests { mod tests {
use super::*; use super::*;
#[test]
fn plaintext_detection_spots_unsealed_artifacts_and_skips_temps() {
let dir = std::env::temp_dir().join(format!("wa-enc-test-{}", uuid::Uuid::new_v4()));
let briefs = dir.join("briefs");
std::fs::create_dir_all(&briefs).unwrap();
// Sealed artifacts start with the vault magic; content doesn't matter
// for detection, only the header.
std::fs::write(dir.join("transcript.json"), b"WEC1sealedbytes").unwrap();
std::fs::write(briefs.join("brief.json"), b"WEC1sealedbytes").unwrap();
// Transient files must never count as plaintext artifacts.
std::fs::write(dir.join("audio.play.wav"), b"RIFF").unwrap();
std::fs::write(dir.join("notes.md.enc-tmp"), b"half-written").unwrap();
assert!(!has_plaintext_artifact(&dir), "all-sealed dir flagged");
std::fs::write(dir.join("audio.wav"), b"RIFF plaintext wav").unwrap();
assert!(has_plaintext_artifact(&dir), "plaintext wav not flagged");
let files = sealable_meeting_files(&dir);
assert_eq!(files.len(), 3, "expected audio.wav + transcript + brief");
std::fs::remove_dir_all(&dir).ok();
}
fn row(backend: &str, model: &str, rtf: f64) -> StressResult { fn row(backend: &str, model: &str, rtf: f64) -> StressResult {
StressResult { StressResult {
backend: backend.into(), backend: backend.into(),
+2
View File
@@ -455,6 +455,8 @@ pub fn run() {
commands::unlock_vault, commands::unlock_vault,
commands::lock_vault, commands::lock_vault,
commands::change_vault_password, commands::change_vault_password,
commands::list_unencrypted_meetings,
commands::encrypt_meeting,
]) ])
.run(tauri::generate_context!()) .run(tauri::generate_context!())
.expect("error while running WhispAssist"); .expect("error while running WhispAssist");
+103 -7
View File
@@ -20,6 +20,12 @@ struct Catalog {
multilingual: bool, multilingual: bool,
} }
// Each size ships two quantizations: a q5 variant (recommended — smaller,
// near-identical quality) and q8_0 (less quantized, larger). The UI groups
// the pair into one row with a quantization dropdown, relying on the q5
// variant being listed first within its family. Labels are intentionally
// identical across a family's variants so the row label doesn't change when
// the dropdown flips; the id/size carry the quantization difference.
const CATALOG: &[Catalog] = &[ const CATALOG: &[Catalog] = &[
Catalog { Catalog {
id: "tiny.en-q5_1", id: "tiny.en-q5_1",
@@ -27,51 +33,112 @@ const CATALOG: &[Catalog] = &[
size_mb: 32, size_mb: 32,
multilingual: false, multilingual: false,
}, },
Catalog {
id: "tiny.en-q8_0",
label: "Tiny (English, quantized) — fastest, least accurate",
size_mb: 42,
multilingual: false,
},
Catalog { Catalog {
id: "base.en-q5_1", id: "base.en-q5_1",
label: "Base (English, quantized) — balanced default", label: "Base (English, quantized) — balanced default",
size_mb: 60, size_mb: 60,
multilingual: false, multilingual: false,
}, },
Catalog {
id: "base.en-q8_0",
label: "Base (English, quantized) — balanced default",
size_mb: 78,
multilingual: false,
},
Catalog { Catalog {
id: "small.en-q5_1", id: "small.en-q5_1",
label: "Small (English, quantized) — more accurate, slower", label: "Small (English, quantized) — more accurate, slower",
size_mb: 190, size_mb: 190,
multilingual: false, multilingual: false,
}, },
Catalog {
id: "small.en-q8_0",
label: "Small (English, quantized) — more accurate, slower",
size_mb: 252,
multilingual: false,
},
Catalog { Catalog {
// ggerganov/whisper.cpp only ships a q5_0 quantization for medium // ggerganov/whisper.cpp only ships a q5_0 quantization for medium
// (q5_1 doesn't exist upstream for this size) — q5_1 here 404s. // (q5_1 doesn't exist upstream for this size) — q5_1 here 404s.
id: "medium.en-q5_0", id: "medium.en-q5_0",
label: "Medium (English, quantized) — best accuracy, slowest", label: "Medium (English, quantized) — high accuracy, slowest",
size_mb: 540, size_mb: 540,
multilingual: false, multilingual: false,
}, },
Catalog {
id: "medium.en-q8_0",
label: "Medium (English, quantized) — high accuracy, slowest",
size_mb: 785,
multilingual: false,
},
Catalog { Catalog {
id: "tiny-q5_1", id: "tiny-q5_1",
label: "Tiny (multilingual, quantized) — fastest, least accurate", label: "Tiny (multilingual, quantized) — fastest, least accurate",
size_mb: 32, size_mb: 32,
multilingual: true, multilingual: true,
}, },
Catalog {
id: "tiny-q8_0",
label: "Tiny (multilingual, quantized) — fastest, least accurate",
size_mb: 42,
multilingual: true,
},
Catalog { Catalog {
id: "base-q5_1", id: "base-q5_1",
label: "Base (multilingual, quantized) — balanced default", label: "Base (multilingual, quantized) — balanced default",
size_mb: 60, size_mb: 60,
multilingual: true, multilingual: true,
}, },
Catalog {
id: "base-q8_0",
label: "Base (multilingual, quantized) — balanced default",
size_mb: 78,
multilingual: true,
},
Catalog { Catalog {
id: "small-q5_1", id: "small-q5_1",
label: "Small (multilingual, quantized) — more accurate, slower", label: "Small (multilingual, quantized) — more accurate, slower",
size_mb: 190, size_mb: 190,
multilingual: true, multilingual: true,
}, },
Catalog {
id: "small-q8_0",
label: "Small (multilingual, quantized) — more accurate, slower",
size_mb: 252,
multilingual: true,
},
Catalog { Catalog {
// Same upstream-availability caveat as medium.en above. // Same upstream-availability caveat as medium.en above.
id: "medium-q5_0", id: "medium-q5_0",
label: "Medium (multilingual, quantized) — best accuracy, slowest", label: "Medium (multilingual, quantized) — high accuracy, slowest",
size_mb: 540, size_mb: 540,
multilingual: true, multilingual: true,
}, },
Catalog {
id: "medium-q8_0",
label: "Medium (multilingual, quantized) — high accuracy, slowest",
size_mb: 785,
multilingual: true,
},
// large-v3-turbo has no `.en` variant upstream — multilingual only.
Catalog {
id: "large-v3-turbo-q5_0",
label: "Large v3 Turbo (multilingual, quantized) — most accurate",
size_mb: 547,
multilingual: true,
},
Catalog {
id: "large-v3-turbo-q8_0",
label: "Large v3 Turbo (multilingual, quantized) — most accurate",
size_mb: 833,
multilingual: true,
},
]; ];
fn model_url(id: &str) -> String { fn model_url(id: &str) -> String {
@@ -199,18 +266,47 @@ mod tests {
// T8.7/M4.2: every `.en` model must have a same-size multilingual // T8.7/M4.2: every `.en` model must have a same-size multilingual
// sibling so the Settings picker always has a language-capable // sibling so the Settings picker always has a language-capable
// option at whatever accuracy/speed tier the user already chose. // option at whatever accuracy/speed tier the user already chose.
let en_only: Vec<_> = CATALOG.iter().filter(|m| !m.multilingual).collect(); // (The reverse doesn't hold: large-v3-turbo is multilingual-only.)
let multilingual: Vec<_> = CATALOG.iter().filter(|m| m.multilingual).collect(); for en in CATALOG.iter().filter(|m| !m.multilingual) {
assert_eq!(en_only.len(), multilingual.len());
for en in &en_only {
assert!( assert!(
multilingual.iter().any(|m| m.size_mb == en.size_mb), CATALOG
.iter()
.any(|m| m.multilingual && m.size_mb == en.size_mb),
"no multilingual sibling for {}", "no multilingual sibling for {}",
en.id en.id
); );
} }
} }
#[test]
fn every_family_lists_q5_then_q8() {
// The Settings UI groups the catalog into one row per family
// (id minus the `-q*` suffix) with a quantization dropdown, and
// treats the family's FIRST variant as the recommended default —
// so each family must be exactly [q5, q8_0], in that order.
let mut families: Vec<(&str, Vec<&str>)> = Vec::new();
for m in CATALOG {
let (family, _) = m.id.rsplit_once("-q").unwrap();
match families.iter_mut().find(|(f, _)| *f == family) {
Some((_, ids)) => ids.push(m.id),
None => families.push((family, vec![m.id])),
}
}
for (family, ids) in &families {
assert_eq!(ids.len(), 2, "family {family} must have exactly 2 variants");
assert!(
ids[0].contains("-q5_"),
"family {family} must list its q5 variant first, got {}",
ids[0]
);
assert!(
ids[1].ends_with("-q8_0"),
"family {family} must list q8_0 second, got {}",
ids[1]
);
}
}
#[test] #[test]
fn is_multilingual_matches_the_catalog_flag() { fn is_multilingual_matches_the_catalog_flag() {
assert!(!is_multilingual("base.en-q5_1")); assert!(!is_multilingual("base.en-q5_1"));
+1 -1
View File
@@ -1,7 +1,7 @@
{ {
"$schema": "https://schema.tauri.app/config/2", "$schema": "https://schema.tauri.app/config/2",
"productName": "WhispAssist", "productName": "WhispAssist",
"version": "0.7.4", "version": "0.7.5",
"identifier": "bet.dou.whispassist", "identifier": "bet.dou.whispassist",
"build": { "build": {
"frontendDist": "../dist", "frontendDist": "../dist",
+9 -6
View File
@@ -621,6 +621,11 @@ export const api = {
lockVault: () => invoke<void>("lock_vault"), lockVault: () => invoke<void>("lock_vault"),
changeVaultPassword: (oldPassword: string, newPassword: string) => changeVaultPassword: (oldPassword: string, newPassword: string) =>
invoke<void>("change_vault_password", { args: { oldPassword, newPassword } }), invoke<void>("change_vault_password", { args: { oldPassword, newPassword } }),
/** Meetings with at least one plaintext artifact on disk (empty when the
* vault isn't set up) — drives the "unencrypted" padlock in the list. */
listUnencryptedMeetings: () => invoke<MeetingId[]>("list_unencrypted_meetings"),
/** Seal a meeting's artifacts in place; requires the vault to be unlocked. */
encryptMeeting: (meetingId: MeetingId) => invoke<void>("encrypt_meeting", { meetingId }),
}; };
// ---- Events (Rust → UI) ---- // ---- Events (Rust → UI) ----
@@ -636,9 +641,8 @@ export const events = {
cb: (p: { meetingId: string; recovered: boolean; message: string }) => void, cb: (p: { meetingId: string; recovered: boolean; message: string }) => void,
): Promise<UnlistenFn> => listen("recording://device", (e) => cb(e.payload as never)), ): Promise<UnlistenFn> => listen("recording://device", (e) => cb(e.payload as never)),
// Mic mute toggled for the active recording (FR-CAP-7). // Mic mute toggled for the active recording (FR-CAP-7).
onMicMuted: ( onMicMuted: (cb: (p: { meetingId: string; muted: boolean }) => void): Promise<UnlistenFn> =>
cb: (p: { meetingId: string; muted: boolean }) => void, listen("recording://mic", (e) => cb(e.payload as never)),
): Promise<UnlistenFn> => listen("recording://mic", (e) => cb(e.payload as never)),
onSegment: ( onSegment: (
cb: (p: { meetingId: string; segment: TranscriptSegment }) => void, cb: (p: { meetingId: string; segment: TranscriptSegment }) => void,
): Promise<UnlistenFn> => listen("transcript://segment", (e) => cb(e.payload as never)), ): Promise<UnlistenFn> => listen("transcript://segment", (e) => cb(e.payload as never)),
@@ -669,9 +673,8 @@ export const events = {
cb: (p: { kind: string; rms?: number; peak?: number; done?: boolean }) => void, cb: (p: { kind: string; rms?: number; peak?: number; done?: boolean }) => void,
): Promise<UnlistenFn> => listen("device://level", (e) => cb(e.payload as never)), ): Promise<UnlistenFn> => listen("device://level", (e) => cb(e.payload as never)),
// Per-(backend, model) progress ticks during the quick stress test. // Per-(backend, model) progress ticks during the quick stress test.
onStressProgress: ( onStressProgress: (cb: (p: { backend: string; model: string }) => void): Promise<UnlistenFn> =>
cb: (p: { backend: string; model: string }) => void, listen("stress://progress", (e) => cb(e.payload as never)),
): Promise<UnlistenFn> => listen("stress://progress", (e) => cb(e.payload as never)),
onNpuDownload: ( onNpuDownload: (
cb: (p: { cb: (p: {
stage: "model" | "runtime" | "done"; stage: "model" | "runtime" | "done";
+61 -4
View File
@@ -24,6 +24,25 @@
"settings.transcription.switch_multilingual": "بدّل إلى نموذج متعدد اللغات في الأعلى لاختيار لغة.", "settings.transcription.switch_multilingual": "بدّل إلى نموذج متعدد اللغات في الأعلى لاختيار لغة.",
"settings.hardware.title": "العتاد", "settings.hardware.title": "العتاد",
"settings.hardware.refresh": "تحديث",
"settings.hardware.test_output": "اختبار",
"settings.hardware.test_mic": "اختبار",
"settings.hardware.testing": "يستمع…",
"settings.hardware.play_tone": "تشغيل نغمة",
"settings.hardware.stress_title": "اختبار إجهاد سريع",
"settings.hardware.stress_hint": "يقيس أداء النماذج المثبّتة على كل خلفية متاحة ويوصي بالأدق منها الذي يواكب الكلام المباشر. يستغرق لحظات.",
"settings.hardware.stress_run": "تشغيل اختبار الإجهاد",
"settings.hardware.stress_running": "قيد التشغيل…",
"settings.hardware.stress_progress": "جارٍ قياس {pair}…",
"settings.hardware.stress_recommend": "الموصى به: {backend} + {model}",
"settings.hardware.stress_apply": "تطبيق",
"settings.hardware.stress_none": "لا يوجد نموذج مثبّت يواكب الكلام المباشر على هذا الجهاز — جرّب نموذجاً أصغر.",
"settings.hardware.stress_backend": "الخلفية",
"settings.hardware.stress_model": "النموذج",
"settings.hardware.stress_rtf": "السرعة (×الزمن الفعلي)",
"settings.hardware.stress_realtime": "مباشر؟",
"settings.hardware.stress_yes": "نعم",
"settings.hardware.stress_no": "لا",
"settings.hardware.active_backend": "الخلفية النشطة", "settings.hardware.active_backend": "الخلفية النشطة",
"settings.hardware.model_meta": "· نموذج {size}", "settings.hardware.model_meta": "· نموذج {size}",
"settings.hardware.preferred_backend": "الخلفية المفضلة", "settings.hardware.preferred_backend": "الخلفية المفضلة",
@@ -56,6 +75,9 @@
"settings.hardware.downloading_model": "جارٍ تنزيل {name}", "settings.hardware.downloading_model": "جارٍ تنزيل {name}",
"settings.hardware.active_badge": "نشط", "settings.hardware.active_badge": "نشط",
"settings.hardware.installed": "مثبّت", "settings.hardware.installed": "مثبّت",
"settings.hardware.quantization_for": "التكميم لـ {name}",
"settings.hardware.quant_recommended": "{quant} · موصى به",
"settings.hardware.quant_higher": "{quant} · جودة أعلى، أكبر حجماً",
"settings.hardware.use": "استخدام", "settings.hardware.use": "استخدام",
"settings.hardware.remove": "إزالة", "settings.hardware.remove": "إزالة",
"settings.hardware.cant_remove_active": "لا يمكن إزالة النموذج النشط", "settings.hardware.cant_remove_active": "لا يمكن إزالة النموذج النشط",
@@ -88,6 +110,7 @@
"settings.calendar.title": "التقويم وOutlook ‏.pst", "settings.calendar.title": "التقويم وOutlook ‏.pst",
"settings.calendar.intro_1": "استورد الأحداث والحضور من نسخة Outlook الاحتياطية المحلية", "settings.calendar.intro_1": "استورد الأحداث والحضور من نسخة Outlook الاحتياطية المحلية",
"settings.calendar.intro_2": "— للقراءة فقط، لا يُكتب أي شيء مرة أخرى في الملف. لا يغادر أي شيء هذا الجهاز.", "settings.calendar.intro_2": "— للقراءة فقط، لا يُكتب أي شيء مرة أخرى في الملف. لا يغادر أي شيء هذا الجهاز.",
"settings.calendar.requires": "يتطلب وجود هذا في PATH لديك (غير مضمّن):",
"settings.calendar.pst_file": "ملف ‏.pst", "settings.calendar.pst_file": "ملف ‏.pst",
"settings.calendar.no_file": "لم يتم اختيار ملف", "settings.calendar.no_file": "لم يتم اختيار ملف",
"settings.calendar.browse": "استعراض…", "settings.calendar.browse": "استعراض…",
@@ -278,6 +301,7 @@
"settings.privacy.locked_word": "مقفلة", "settings.privacy.locked_word": "مقفلة",
"settings.privacy.vault_locked_2": ". افتح القفل لقراءة الاجتماعات المشفّرة.", "settings.privacy.vault_locked_2": ". افتح القفل لقراءة الاجتماعات المشفّرة.",
"settings.privacy.password": "كلمة المرور", "settings.privacy.password": "كلمة المرور",
"settings.privacy.show_password": "إظهار كلمة المرور",
"settings.privacy.unlock": "فتح القفل", "settings.privacy.unlock": "فتح القفل",
"settings.privacy.vault_unlocked_1": "الخزنة ", "settings.privacy.vault_unlocked_1": "الخزنة ",
"settings.privacy.unlocked_word": "مفتوحة", "settings.privacy.unlocked_word": "مفتوحة",
@@ -320,12 +344,23 @@
"import.optional": "اختياري", "import.optional": "اختياري",
"import.title_placeholder": "افتراضيًا اسم الملف", "import.title_placeholder": "افتراضيًا اسم الملف",
"import.filter_av": "صوت / فيديو", "import.filter_av": "صوت / فيديو",
"import.requires_1": "يتطلب", "import.model_label": "نموذج التفريغ",
"import.requires_2": "مثبّتًا وفي PATH لديك (بالإضافة إلى", "import.model_hint": "يُسجَّل مع الاجتماع لتعرف النموذج الذي استُخدم في التفريغ.",
"import.requires_3": "للعناوين URL). لا يرفق WhispAssist بهما.", "import.requires": "يتطلب وجود هذه في PATH لديك (غير مضمّنة):",
"import.background_note": "يعمل في الخلفية — تابع تقدمه في القائمة.",
"import.importing": "جارٍ الاستيراد… قد يستغرق هذا بعض الوقت", "import.importing": "جارٍ الاستيراد… قد يستغرق هذا بعض الوقت",
"import.import": "استيراد", "import.import": "استيراد",
"import.cancel": "إلغاء", "import.cancel": "إلغاء",
"import.tracker.label": "تقدم الاستيراد",
"import.tracker.running": "جارٍ الاستيراد…",
"import.tracker.done": "اكتمل الاستيراد",
"import.tracker.failed": "فشل الاستيراد",
"import.tracker.working": "جارٍ العمل…",
"import.tracker.stopped": "متوقف",
"import.phase.prepare": "تحويل الترميز",
"import.phase.transcribe": "التفريغ",
"import.phase.diarize": "تمييز المتحدثين",
"import.phase.finalize": "الإنهاء",
"tagchip.filter": "تصفية الاجتماعات الموسومة بـ «{tag}»", "tagchip.filter": "تصفية الاجتماعات الموسومة بـ «{tag}»",
"tagchip.remove": "إزالة الوسم {tag}", "tagchip.remove": "إزالة الوسم {tag}",
@@ -345,6 +380,10 @@
"app.cancel": "إلغاء", "app.cancel": "إلغاء",
"app.cancel_title": "تجاهل هذا التسجيل وحذفه", "app.cancel_title": "تجاهل هذا التسجيل وحذفه",
"app.recording": "جارٍ التسجيل…", "app.recording": "جارٍ التسجيل…",
"app.mute": "كتم الميكروفون",
"app.unmute": "إلغاء كتم الميكروفون",
"app.mute_title": "كتم الميكروفون (M)",
"app.unmute_title": "إلغاء كتم الميكروفون (M)",
"app.backend_title": "خلفية النسخ النشطة", "app.backend_title": "خلفية النسخ النشطة",
"app.retention_title": "حفظ الصوت كـ ‏.wav لهذا الاجتماع", "app.retention_title": "حفظ الصوت كـ ‏.wav لهذا الاجتماع",
"app.saving": "جارٍ الحفظ", "app.saving": "جارٍ الحفظ",
@@ -393,10 +432,15 @@
"meetings.status.error": "خطأ", "meetings.status.error": "خطأ",
"meetings.resume": "استئناف النسخ", "meetings.resume": "استئناف النسخ",
"meetings.delete_aria": "حذف الاجتماع", "meetings.delete_aria": "حذف الاجتماع",
"meetings.not_encrypted": "غير مشفّر",
"meetings.encrypt": "تشفير",
"meetings.encrypting": "جارٍ التشفير…",
"meetings.encrypt_title": "تشفير ملفات هذا الاجتماع بالخزنة",
"meetings.delete_confirm": "حذف هذا الاجتماع؟ يؤدي ذلك إلى إزالة تسجيله ونسخه وملاحظاته.", "meetings.delete_confirm": "حذف هذا الاجتماع؟ يؤدي ذلك إلى إزالة تسجيله ونسخه وملاحظاته.",
"transcript.heading": "النسخ", "transcript.heading": "النسخ",
"transcript.title_aria": "عنوان الاجتماع", "transcript.title_aria": "عنوان الاجتماع",
"transcript.transcribed_with": "فُرّغ باستخدام",
"transcript.lang_title": "لغة النسخ", "transcript.lang_title": "لغة النسخ",
"transcript.lang_auto": "جارٍ الكشف…", "transcript.lang_auto": "جارٍ الكشف…",
"transcript.show": "إظهار النسخ", "transcript.show": "إظهار النسخ",
@@ -428,9 +472,18 @@
"notes.italic": "مائل", "notes.italic": "مائل",
"notes.h1": "عنوان 1", "notes.h1": "عنوان 1",
"notes.h2": "عنوان 2", "notes.h2": "عنوان 2",
"notes.h3": "عنوان 3",
"notes.bullet": "قائمة نقطية", "notes.bullet": "قائمة نقطية",
"notes.numbered": "قائمة مرقّمة",
"notes.quote": "اقتباس",
"notes.divider": "فاصل",
"notes.checkbox_title": "مربع اختيار", "notes.checkbox_title": "مربع اختيار",
"notes.checkbox_aria": "عنصر قائمة بمربع اختيار", "notes.checkbox_aria": "عنصر قائمة بمربع اختيار",
"notes.enhance": "تحسين",
"notes.enhancing": "جارٍ التحسين…",
"notes.enhance_title": "توسيع هذه الملاحظات إلى Markdown منظّم بالاستناد إلى التفريغ (ذكاء اصطناعي)",
"notes.enhanced_note": "حُسِّنت الملاحظات استناداً إلى التفريغ.",
"notes.undo_enhance": "تراجع",
"notes.edit_raw": "تحرير markdown الخام", "notes.edit_raw": "تحرير markdown الخام",
"notes.render": "عرض markdown", "notes.render": "عرض markdown",
"notes.editor": "المحرر", "notes.editor": "المحرر",
@@ -527,5 +580,9 @@
"settings.recording.consent_ack": "مُقرّة", "settings.recording.consent_ack": "مُقرّة",
"settings.recording.consent_not": "لم تُقرّ بعد", "settings.recording.consent_not": "لم تُقرّ بعد",
"settings.recording.auto_label": "بدء التسجيل تلقائيًا عند بدء حدث تقويم", "settings.recording.auto_label": "بدء التسجيل تلقائيًا عند بدء حدث تقويم",
"settings.recording.auto_hint": "فقط أثناء فتح WhispAssist. عند حلول وقت بدء حدث تقويم مستورد، يبدأ التسجيل تلقائيًا (باستخدام إعداد الاحتفاظ الافتراضي أعلاه). لا شيء يعمل في الخلفية — يُسلَّح المؤقّت فقط أثناء تشغيل التطبيق. استورد الأحداث من الإعدادات → التقويم." "settings.recording.auto_hint": "فقط أثناء فتح WhispAssist. عند حلول وقت بدء حدث تقويم مستورد، يبدأ التسجيل تلقائيًا (باستخدام إعداد الاحتفاظ الافتراضي أعلاه). لا شيء يعمل في الخلفية — يُسلَّح المؤقّت فقط أثناء تشغيل التطبيق. استورد الأحداث من الإعدادات → التقويم.",
"settings.recording.autostart_label": "تشغيل WhispAssist عند تسجيل الدخول",
"settings.recording.autostart_hint": "يبدأ WhispAssist تلقائياً عند تسجيل دخولك إلى Windows. معطّل افتراضياً؛ يثبّت إدخال بدء تشغيل خاصاً بالمستخدم (بلا صلاحيات مسؤول) ولا يبدأ التسجيل من تلقاء نفسه.",
"settings.recording.close_tray_label": "الإغلاق إلى علبة النظام",
"settings.recording.close_tray_hint": "إغلاق النافذة يُبقي WhispAssist يعمل في الخلفية بدلاً من الخروج. أعد فتحه من أيقونة علبة النظام؛ ولإنهائه تماماً استخدم «خروج» من قائمة العلبة. مفعّل افتراضياً."
} }
+61 -4
View File
@@ -24,6 +24,25 @@
"settings.transcription.switch_multilingual": "একটি ভাষা বেছে নিতে উপরে একটি বহুভাষিক মডেলে স্যুইচ করুন।", "settings.transcription.switch_multilingual": "একটি ভাষা বেছে নিতে উপরে একটি বহুভাষিক মডেলে স্যুইচ করুন।",
"settings.hardware.title": "হার্ডওয়্যার", "settings.hardware.title": "হার্ডওয়্যার",
"settings.hardware.refresh": "রিফ্রেশ",
"settings.hardware.test_output": "পরীক্ষা",
"settings.hardware.test_mic": "পরীক্ষা",
"settings.hardware.testing": "শুনছে…",
"settings.hardware.play_tone": "টোন বাজান",
"settings.hardware.stress_title": "দ্রুত স্ট্রেস টেস্ট",
"settings.hardware.stress_hint": "ইনস্টল করা মডেলগুলোকে প্রতিটি উপলব্ধ ব্যাকএন্ডে বেঞ্চমার্ক করে এবং লাইভ কথার গতি ধরে রাখতে পারে এমন সবচেয়ে নির্ভুল মডেলটি সুপারিশ করে। কিছুটা সময় লাগে।",
"settings.hardware.stress_run": "স্ট্রেস টেস্ট চালান",
"settings.hardware.stress_running": "চলছে…",
"settings.hardware.stress_progress": "{pair} বেঞ্চমার্ক হচ্ছে…",
"settings.hardware.stress_recommend": "সুপারিশ: {backend} + {model}",
"settings.hardware.stress_apply": "প্রয়োগ করুন",
"settings.hardware.stress_none": "এই হার্ডওয়্যারে ইনস্টল করা কোনো মডেলই লাইভ কথার গতি ধরে রাখতে পারছে না — ছোট কোনো মডেল চেষ্টা করুন।",
"settings.hardware.stress_backend": "ব্যাকএন্ড",
"settings.hardware.stress_model": "মডেল",
"settings.hardware.stress_rtf": "গতি (×রিয়েল-টাইম)",
"settings.hardware.stress_realtime": "লাইভ?",
"settings.hardware.stress_yes": "হ্যাঁ",
"settings.hardware.stress_no": "না",
"settings.hardware.active_backend": "সক্রিয় ব্যাকএন্ড", "settings.hardware.active_backend": "সক্রিয় ব্যাকএন্ড",
"settings.hardware.model_meta": "· মডেল {size}", "settings.hardware.model_meta": "· মডেল {size}",
"settings.hardware.preferred_backend": "পছন্দসই ব্যাকএন্ড", "settings.hardware.preferred_backend": "পছন্দসই ব্যাকএন্ড",
@@ -56,6 +75,9 @@
"settings.hardware.downloading_model": "{name} ডাউনলোড হচ্ছে", "settings.hardware.downloading_model": "{name} ডাউনলোড হচ্ছে",
"settings.hardware.active_badge": "সক্রিয়", "settings.hardware.active_badge": "সক্রিয়",
"settings.hardware.installed": "ইনস্টল করা হয়েছে", "settings.hardware.installed": "ইনস্টল করা হয়েছে",
"settings.hardware.quantization_for": "{name}-এর কোয়ান্টাইজেশন",
"settings.hardware.quant_recommended": "{quant} · প্রস্তাবিত",
"settings.hardware.quant_higher": "{quant} · উন্নত মান, বড়",
"settings.hardware.use": "ব্যবহার করুন", "settings.hardware.use": "ব্যবহার করুন",
"settings.hardware.remove": "সরান", "settings.hardware.remove": "সরান",
"settings.hardware.cant_remove_active": "সক্রিয় মডেল সরানো যায় না", "settings.hardware.cant_remove_active": "সক্রিয় মডেল সরানো যায় না",
@@ -88,6 +110,7 @@
"settings.calendar.title": "ক্যালেন্ডার ও Outlook .pst", "settings.calendar.title": "ক্যালেন্ডার ও Outlook .pst",
"settings.calendar.intro_1": "একটি স্থানীয় Outlook ব্যাকআপ থেকে ইভেন্ট ও অংশগ্রহণকারীদের আমদানি করুন", "settings.calendar.intro_1": "একটি স্থানীয় Outlook ব্যাকআপ থেকে ইভেন্ট ও অংশগ্রহণকারীদের আমদানি করুন",
"settings.calendar.intro_2": "— শুধু পড়া, ফাইলে কিছু ফিরে লেখা হয় না। এই ডিভাইস থেকে কিছুই বেরোয় না।", "settings.calendar.intro_2": "— শুধু পড়া, ফাইলে কিছু ফিরে লেখা হয় না। এই ডিভাইস থেকে কিছুই বেরোয় না।",
"settings.calendar.requires": "আপনার PATH-এ এটি থাকা দরকার (সাথে দেওয়া নেই):",
"settings.calendar.pst_file": ".pst ফাইল", "settings.calendar.pst_file": ".pst ফাইল",
"settings.calendar.no_file": "কোনো ফাইল নির্বাচিত নেই", "settings.calendar.no_file": "কোনো ফাইল নির্বাচিত নেই",
"settings.calendar.browse": "ব্রাউজ করুন…", "settings.calendar.browse": "ব্রাউজ করুন…",
@@ -278,6 +301,7 @@
"settings.privacy.locked_word": "লক করা", "settings.privacy.locked_word": "লক করা",
"settings.privacy.vault_locked_2": "। এনক্রিপ্ট করা মিটিং পড়তে আনলক করুন।", "settings.privacy.vault_locked_2": "। এনক্রিপ্ট করা মিটিং পড়তে আনলক করুন।",
"settings.privacy.password": "পাসওয়ার্ড", "settings.privacy.password": "পাসওয়ার্ড",
"settings.privacy.show_password": "পাসওয়ার্ড দেখান",
"settings.privacy.unlock": "আনলক করুন", "settings.privacy.unlock": "আনলক করুন",
"settings.privacy.vault_unlocked_1": "ভল্ট ", "settings.privacy.vault_unlocked_1": "ভল্ট ",
"settings.privacy.unlocked_word": "আনলক করা", "settings.privacy.unlocked_word": "আনলক করা",
@@ -320,12 +344,23 @@
"import.optional": "ঐচ্ছিক", "import.optional": "ঐচ্ছিক",
"import.title_placeholder": "ডিফল্টভাবে ফাইলের নাম", "import.title_placeholder": "ডিফল্টভাবে ফাইলের নাম",
"import.filter_av": "অডিও / ভিডিও", "import.filter_av": "অডিও / ভিডিও",
"import.requires_1": "প্রয়োজন", "import.model_label": "ট্রান্সক্রিপশন মডেল",
"import.requires_2": "ইনস্টল করা এবং আপনার PATH-এ (সাথে", "import.model_hint": "মিটিংয়ের সাথে সংরক্ষিত হয়, যাতে দেখা যায় কীসে ট্রান্সক্রাইব হয়েছে।",
"import.requires_3": "URL-এর জন্য)। WhispAssist এগুলি বান্ডল করে না।", "import.requires": "আপনার PATH-এ এগুলো থাকা দরকার (সাথে দেওয়া নেই):",
"import.background_note": "পটভূমিতে চলে — তালিকায় অগ্রগতি দেখুন।",
"import.importing": "আমদানি হচ্ছে… এতে কিছু সময় লাগতে পারে", "import.importing": "আমদানি হচ্ছে… এতে কিছু সময় লাগতে পারে",
"import.import": "আমদানি করুন", "import.import": "আমদানি করুন",
"import.cancel": "বাতিল করুন", "import.cancel": "বাতিল করুন",
"import.tracker.label": "আমদানির অগ্রগতি",
"import.tracker.running": "আমদানি হচ্ছে…",
"import.tracker.done": "আমদানি সম্পূর্ণ",
"import.tracker.failed": "আমদানি ব্যর্থ",
"import.tracker.working": "কাজ চলছে…",
"import.tracker.stopped": "থামানো হয়েছে",
"import.phase.prepare": "ট্রান্সকোড",
"import.phase.transcribe": "ট্রান্সক্রাইব",
"import.phase.diarize": "বক্তা শনাক্তকরণ",
"import.phase.finalize": "চূড়ান্ত করা",
"tagchip.filter": "“{tag}” ট্যাগযুক্ত মিটিং ফিল্টার করুন", "tagchip.filter": "“{tag}” ট্যাগযুক্ত মিটিং ফিল্টার করুন",
"tagchip.remove": "ট্যাগ {tag} সরান", "tagchip.remove": "ট্যাগ {tag} সরান",
@@ -345,6 +380,10 @@
"app.cancel": "বাতিল করুন", "app.cancel": "বাতিল করুন",
"app.cancel_title": "এই রেকর্ডিং বাতিল করে মুছুন", "app.cancel_title": "এই রেকর্ডিং বাতিল করে মুছুন",
"app.recording": "রেকর্ড হচ্ছে…", "app.recording": "রেকর্ড হচ্ছে…",
"app.mute": "মাইক্রোফোন নিঃশব্দ করুন",
"app.unmute": "মাইক্রোফোন সশব্দ করুন",
"app.mute_title": "মাইক্রোফোন নিঃশব্দ করুন (M)",
"app.unmute_title": "মাইক্রোফোন সশব্দ করুন (M)",
"app.backend_title": "সক্রিয় ট্রান্সক্রিপশন ব্যাকএন্ড", "app.backend_title": "সক্রিয় ট্রান্সক্রিপশন ব্যাকএন্ড",
"app.retention_title": "এই মিটিংয়ের জন্য অডিও .wav হিসেবে সংরক্ষণ করুন", "app.retention_title": "এই মিটিংয়ের জন্য অডিও .wav হিসেবে সংরক্ষণ করুন",
"app.saving": "সংরক্ষণ হচ্ছে", "app.saving": "সংরক্ষণ হচ্ছে",
@@ -393,10 +432,15 @@
"meetings.status.error": "ত্রুটি", "meetings.status.error": "ত্রুটি",
"meetings.resume": "ট্রান্সক্রিপশন পুনরায় শুরু করুন", "meetings.resume": "ট্রান্সক্রিপশন পুনরায় শুরু করুন",
"meetings.delete_aria": "মিটিং মুছুন", "meetings.delete_aria": "মিটিং মুছুন",
"meetings.not_encrypted": "এনক্রিপ্ট করা নয়",
"meetings.encrypt": "এনক্রিপ্ট করুন",
"meetings.encrypting": "এনক্রিপ্ট হচ্ছে…",
"meetings.encrypt_title": "ভল্ট দিয়ে এই মিটিংয়ের ফাইল এনক্রিপ্ট করুন",
"meetings.delete_confirm": "এই মিটিং মুছবেন? এটি এর রেকর্ডিং, ট্রান্সক্রিপ্ট এবং নোট সরিয়ে ফেলে।", "meetings.delete_confirm": "এই মিটিং মুছবেন? এটি এর রেকর্ডিং, ট্রান্সক্রিপ্ট এবং নোট সরিয়ে ফেলে।",
"transcript.heading": "ট্রান্সক্রিপ্ট", "transcript.heading": "ট্রান্সক্রিপ্ট",
"transcript.title_aria": "মিটিং শিরোনাম", "transcript.title_aria": "মিটিং শিরোনাম",
"transcript.transcribed_with": "যা দিয়ে ট্রান্সক্রাইব হয়েছে:",
"transcript.lang_title": "ট্রান্সক্রিপশন ভাষা", "transcript.lang_title": "ট্রান্সক্রিপশন ভাষা",
"transcript.lang_auto": "শনাক্ত হচ্ছে…", "transcript.lang_auto": "শনাক্ত হচ্ছে…",
"transcript.show": "ট্রান্সক্রিপ্ট দেখান", "transcript.show": "ট্রান্সক্রিপ্ট দেখান",
@@ -428,9 +472,18 @@
"notes.italic": "তির্যক", "notes.italic": "তির্যক",
"notes.h1": "শিরোনাম ১", "notes.h1": "শিরোনাম ১",
"notes.h2": "শিরোনাম ২", "notes.h2": "শিরোনাম ২",
"notes.h3": "শিরোনাম ৩",
"notes.bullet": "বুলেট তালিকা", "notes.bullet": "বুলেট তালিকা",
"notes.numbered": "সংখ্যাযুক্ত তালিকা",
"notes.quote": "উদ্ধৃতি",
"notes.divider": "বিভাজক",
"notes.checkbox_title": "চেকবক্স", "notes.checkbox_title": "চেকবক্স",
"notes.checkbox_aria": "চেকবক্স তালিকা আইটেম", "notes.checkbox_aria": "চেকবক্স তালিকা আইটেম",
"notes.enhance": "উন্নত করুন",
"notes.enhancing": "উন্নত করা হচ্ছে…",
"notes.enhance_title": "ট্রান্সক্রিপ্ট ব্যবহার করে এই নোটগুলোকে কাঠামোবদ্ধ Markdown-এ সম্প্রসারিত করুন (AI)",
"notes.enhanced_note": "ট্রান্সক্রিপ্ট থেকে নোট উন্নত করা হয়েছে।",
"notes.undo_enhance": "পূর্বাবস্থা",
"notes.edit_raw": "কাঁচা markdown সম্পাদনা করুন", "notes.edit_raw": "কাঁচা markdown সম্পাদনা করুন",
"notes.render": "markdown রেন্ডার করুন", "notes.render": "markdown রেন্ডার করুন",
"notes.editor": "সম্পাদক", "notes.editor": "সম্পাদক",
@@ -527,5 +580,9 @@
"settings.recording.consent_ack": "স্বীকৃত", "settings.recording.consent_ack": "স্বীকৃত",
"settings.recording.consent_not": "এখনও স্বীকৃত নয়", "settings.recording.consent_not": "এখনও স্বীকৃত নয়",
"settings.recording.auto_label": "কোনো ক্যালেন্ডার ইভেন্ট শুরু হলে স্বয়ংক্রিয়ভাবে রেকর্ডিং শুরু করুন", "settings.recording.auto_label": "কোনো ক্যালেন্ডার ইভেন্ট শুরু হলে স্বয়ংক্রিয়ভাবে রেকর্ডিং শুরু করুন",
"settings.recording.auto_hint": "শুধু WhispAssist খোলা থাকাকালীন। কোনো আমদানি করা ক্যালেন্ডার ইভেন্টের শুরুর সময় এলে, একটি রেকর্ডিং স্বয়ংক্রিয়ভাবে শুরু হয় (উপরের আপনার ডিফল্ট ধারণ সেটিং ব্যবহার করে)। পটভূমিতে কিছুই চলে না — টাইমার শুধু অ্যাপ চলাকালীন সক্রিয় থাকে। সেটিংস → ক্যালেন্ডার-এর অধীনে ইভেন্ট আমদানি করুন।" "settings.recording.auto_hint": "শুধু WhispAssist খোলা থাকাকালীন। কোনো আমদানি করা ক্যালেন্ডার ইভেন্টের শুরুর সময় এলে, একটি রেকর্ডিং স্বয়ংক্রিয়ভাবে শুরু হয় (উপরের আপনার ডিফল্ট ধারণ সেটিং ব্যবহার করে)। পটভূমিতে কিছুই চলে না — টাইমার শুধু অ্যাপ চলাকালীন সক্রিয় থাকে। সেটিংস → ক্যালেন্ডার-এর অধীনে ইভেন্ট আমদানি করুন।",
"settings.recording.autostart_label": "লগইনে WhispAssist চালু করুন",
"settings.recording.autostart_hint": "Windows-এ সাইন ইন করলে WhispAssist স্বয়ংক্রিয়ভাবে চালু হয়। ডিফল্টে বন্ধ; ব্যবহারকারী-প্রতি স্টার্টআপ এন্ট্রি যোগ করে (অ্যাডমিন লাগে না) এবং নিজে থেকে রেকর্ডিং শুরু করে না।",
"settings.recording.close_tray_label": "সিস্টেম ট্রেতে বন্ধ করুন",
"settings.recording.close_tray_hint": "উইন্ডো বন্ধ করলে WhispAssist বন্ধ না হয়ে পটভূমিতে চলতে থাকে। ট্রে আইকন থেকে আবার খুলুন; পুরোপুরি বন্ধ করতে ট্রের 'প্রস্থান' ব্যবহার করুন। ডিফল্টে চালু।"
} }
+61 -4
View File
@@ -24,6 +24,25 @@
"settings.transcription.switch_multilingual": "Wechseln Sie oben zu einem mehrsprachigen Modell, um eine Sprache zu wählen.", "settings.transcription.switch_multilingual": "Wechseln Sie oben zu einem mehrsprachigen Modell, um eine Sprache zu wählen.",
"settings.hardware.title": "Hardware", "settings.hardware.title": "Hardware",
"settings.hardware.refresh": "Aktualisieren",
"settings.hardware.test_output": "Testen",
"settings.hardware.test_mic": "Testen",
"settings.hardware.testing": "Höre zu…",
"settings.hardware.play_tone": "Ton abspielen",
"settings.hardware.stress_title": "Schneller Belastungstest",
"settings.hardware.stress_hint": "Misst die installierten Modelle auf jedem verfügbaren Backend und empfiehlt das genaueste, das mit Live-Sprache Schritt hält. Dauert einen Moment.",
"settings.hardware.stress_run": "Belastungstest starten",
"settings.hardware.stress_running": "Läuft…",
"settings.hardware.stress_progress": "Benchmark für {pair}…",
"settings.hardware.stress_recommend": "Empfohlen: {backend} + {model}",
"settings.hardware.stress_apply": "Übernehmen",
"settings.hardware.stress_none": "Kein installiertes Modell hält auf dieser Hardware mit Live-Sprache Schritt — versuchen Sie ein kleineres Modell.",
"settings.hardware.stress_backend": "Backend",
"settings.hardware.stress_model": "Modell",
"settings.hardware.stress_rtf": "Geschwindigkeit (×Echtzeit)",
"settings.hardware.stress_realtime": "Live?",
"settings.hardware.stress_yes": "Ja",
"settings.hardware.stress_no": "Nein",
"settings.hardware.active_backend": "Aktives Backend", "settings.hardware.active_backend": "Aktives Backend",
"settings.hardware.model_meta": "· Modell {size}", "settings.hardware.model_meta": "· Modell {size}",
"settings.hardware.preferred_backend": "Bevorzugtes Backend", "settings.hardware.preferred_backend": "Bevorzugtes Backend",
@@ -56,6 +75,9 @@
"settings.hardware.downloading_model": "{name} wird heruntergeladen", "settings.hardware.downloading_model": "{name} wird heruntergeladen",
"settings.hardware.active_badge": "Aktiv", "settings.hardware.active_badge": "Aktiv",
"settings.hardware.installed": "Installiert", "settings.hardware.installed": "Installiert",
"settings.hardware.quantization_for": "Quantisierung für {name}",
"settings.hardware.quant_recommended": "{quant} · empfohlen",
"settings.hardware.quant_higher": "{quant} · höhere Qualität, größer",
"settings.hardware.use": "Verwenden", "settings.hardware.use": "Verwenden",
"settings.hardware.remove": "Entfernen", "settings.hardware.remove": "Entfernen",
"settings.hardware.cant_remove_active": "Das aktive Modell kann nicht entfernt werden", "settings.hardware.cant_remove_active": "Das aktive Modell kann nicht entfernt werden",
@@ -88,6 +110,7 @@
"settings.calendar.title": "Kalender & Outlook .pst", "settings.calendar.title": "Kalender & Outlook .pst",
"settings.calendar.intro_1": "Importieren Sie Termine und Teilnehmer aus einem lokalen Outlook-", "settings.calendar.intro_1": "Importieren Sie Termine und Teilnehmer aus einem lokalen Outlook-",
"settings.calendar.intro_2": "Backup — schreibgeschützt, es wird nichts in die Datei zurückgeschrieben. Nichts verlässt dieses Gerät.", "settings.calendar.intro_2": "Backup — schreibgeschützt, es wird nichts in die Datei zurückgeschrieben. Nichts verlässt dieses Gerät.",
"settings.calendar.requires": "Benötigt dies in Ihrem PATH (nicht mitgeliefert):",
"settings.calendar.pst_file": ".pst-Datei", "settings.calendar.pst_file": ".pst-Datei",
"settings.calendar.no_file": "Keine Datei ausgewählt", "settings.calendar.no_file": "Keine Datei ausgewählt",
"settings.calendar.browse": "Durchsuchen…", "settings.calendar.browse": "Durchsuchen…",
@@ -278,6 +301,7 @@
"settings.privacy.locked_word": "gesperrt", "settings.privacy.locked_word": "gesperrt",
"settings.privacy.vault_locked_2": ". Entsperren Sie, um verschlüsselte Meetings zu lesen.", "settings.privacy.vault_locked_2": ". Entsperren Sie, um verschlüsselte Meetings zu lesen.",
"settings.privacy.password": "Passwort", "settings.privacy.password": "Passwort",
"settings.privacy.show_password": "Passwort anzeigen",
"settings.privacy.unlock": "Entsperren", "settings.privacy.unlock": "Entsperren",
"settings.privacy.vault_unlocked_1": "Der Tresor ist ", "settings.privacy.vault_unlocked_1": "Der Tresor ist ",
"settings.privacy.unlocked_word": "entsperrt", "settings.privacy.unlocked_word": "entsperrt",
@@ -320,12 +344,23 @@
"import.optional": "optional", "import.optional": "optional",
"import.title_placeholder": "Standardmäßig der Dateiname", "import.title_placeholder": "Standardmäßig der Dateiname",
"import.filter_av": "Audio / Video", "import.filter_av": "Audio / Video",
"import.requires_1": "Erfordert", "import.model_label": "Transkriptionsmodell",
"import.requires_2": "installiert und in Ihrem PATH (plus", "import.model_hint": "Wird mit dem Meeting gespeichert, damit Sie sehen, womit es transkribiert wurde.",
"import.requires_3": "für URLs). WhispAssist liefert sie nicht mit.", "import.requires": "Benötigt diese in Ihrem PATH (nicht mitgeliefert):",
"import.background_note": "Läuft im Hintergrund — verfolgen Sie den Fortschritt in der Liste.",
"import.importing": "Wird importiert… das kann eine Weile dauern", "import.importing": "Wird importiert… das kann eine Weile dauern",
"import.import": "Importieren", "import.import": "Importieren",
"import.cancel": "Abbrechen", "import.cancel": "Abbrechen",
"import.tracker.label": "Importfortschritt",
"import.tracker.running": "Importiere…",
"import.tracker.done": "Import abgeschlossen",
"import.tracker.failed": "Import fehlgeschlagen",
"import.tracker.working": "arbeitet…",
"import.tracker.stopped": "gestoppt",
"import.phase.prepare": "Transkodieren",
"import.phase.transcribe": "Transkribieren",
"import.phase.diarize": "Sprecher erkennen",
"import.phase.finalize": "Abschließen",
"tagchip.filter": "Meetings mit dem Tag „{tag}“ filtern", "tagchip.filter": "Meetings mit dem Tag „{tag}“ filtern",
"tagchip.remove": "Tag {tag} entfernen", "tagchip.remove": "Tag {tag} entfernen",
@@ -345,6 +380,10 @@
"app.cancel": "Abbrechen", "app.cancel": "Abbrechen",
"app.cancel_title": "Diese Aufnahme verwerfen und löschen", "app.cancel_title": "Diese Aufnahme verwerfen und löschen",
"app.recording": "Aufnahme läuft…", "app.recording": "Aufnahme läuft…",
"app.mute": "Mikrofon stummschalten",
"app.unmute": "Stummschaltung aufheben",
"app.mute_title": "Mikrofon stummschalten (M)",
"app.unmute_title": "Stummschaltung aufheben (M)",
"app.backend_title": "Aktives Transkriptions-Backend", "app.backend_title": "Aktives Transkriptions-Backend",
"app.retention_title": "Audio als .wav für dieses Meeting speichern", "app.retention_title": "Audio als .wav für dieses Meeting speichern",
"app.saving": "wird gespeichert", "app.saving": "wird gespeichert",
@@ -393,10 +432,15 @@
"meetings.status.error": "Fehler", "meetings.status.error": "Fehler",
"meetings.resume": "Transkription fortsetzen", "meetings.resume": "Transkription fortsetzen",
"meetings.delete_aria": "Meeting löschen", "meetings.delete_aria": "Meeting löschen",
"meetings.not_encrypted": "Nicht verschlüsselt",
"meetings.encrypt": "Verschlüsseln",
"meetings.encrypting": "Wird verschlüsselt…",
"meetings.encrypt_title": "Die Dateien dieses Meetings mit dem Tresor verschlüsseln",
"meetings.delete_confirm": "Dieses Meeting löschen? Dadurch werden seine Aufnahme, sein Transkript und seine Notizen entfernt.", "meetings.delete_confirm": "Dieses Meeting löschen? Dadurch werden seine Aufnahme, sein Transkript und seine Notizen entfernt.",
"transcript.heading": "Transkript", "transcript.heading": "Transkript",
"transcript.title_aria": "Meetingtitel", "transcript.title_aria": "Meetingtitel",
"transcript.transcribed_with": "Transkribiert mit",
"transcript.lang_title": "Transkriptionssprache", "transcript.lang_title": "Transkriptionssprache",
"transcript.lang_auto": "wird erkannt…", "transcript.lang_auto": "wird erkannt…",
"transcript.show": "Transkript anzeigen", "transcript.show": "Transkript anzeigen",
@@ -428,9 +472,18 @@
"notes.italic": "Kursiv", "notes.italic": "Kursiv",
"notes.h1": "Überschrift 1", "notes.h1": "Überschrift 1",
"notes.h2": "Überschrift 2", "notes.h2": "Überschrift 2",
"notes.h3": "Überschrift 3",
"notes.bullet": "Aufzählungsliste", "notes.bullet": "Aufzählungsliste",
"notes.numbered": "Nummerierte Liste",
"notes.quote": "Zitat",
"notes.divider": "Trennlinie",
"notes.checkbox_title": "Kontrollkästchen", "notes.checkbox_title": "Kontrollkästchen",
"notes.checkbox_aria": "Kontrollkästchen-Listenelement", "notes.checkbox_aria": "Kontrollkästchen-Listenelement",
"notes.enhance": "Aufbereiten",
"notes.enhancing": "Wird aufbereitet…",
"notes.enhance_title": "Diese Notizen mithilfe des Transkripts zu strukturiertem Markdown erweitern (KI)",
"notes.enhanced_note": "Notizen aus dem Transkript aufbereitet.",
"notes.undo_enhance": "Rückgängig",
"notes.edit_raw": "Rohes Markdown bearbeiten", "notes.edit_raw": "Rohes Markdown bearbeiten",
"notes.render": "Markdown rendern", "notes.render": "Markdown rendern",
"notes.editor": "Editor", "notes.editor": "Editor",
@@ -527,5 +580,9 @@
"settings.recording.consent_ack": "bestätigt", "settings.recording.consent_ack": "bestätigt",
"settings.recording.consent_not": "noch nicht bestätigt", "settings.recording.consent_not": "noch nicht bestätigt",
"settings.recording.auto_label": "Aufnahme automatisch starten, wenn ein Kalendertermin beginnt", "settings.recording.auto_label": "Aufnahme automatisch starten, wenn ein Kalendertermin beginnt",
"settings.recording.auto_hint": "Nur während WhispAssist geöffnet ist. Wenn die Startzeit eines importierten Kalendertermins erreicht ist, beginnt automatisch eine Aufnahme (mit Ihrer obigen Standard-Aufbewahrungseinstellung). Nichts läuft im Hintergrund — der Timer ist nur aktiv, während die App läuft. Importieren Sie Termine unter Einstellungen → Kalender." "settings.recording.auto_hint": "Nur während WhispAssist geöffnet ist. Wenn die Startzeit eines importierten Kalendertermins erreicht ist, beginnt automatisch eine Aufnahme (mit Ihrer obigen Standard-Aufbewahrungseinstellung). Nichts läuft im Hintergrund — der Timer ist nur aktiv, während die App läuft. Importieren Sie Termine unter Einstellungen → Kalender.",
"settings.recording.autostart_label": "WhispAssist bei der Anmeldung starten",
"settings.recording.autostart_hint": "Startet WhispAssist automatisch, wenn Sie sich bei Windows anmelden. Standardmäßig aus; legt einen Autostart-Eintrag pro Benutzer an (keine Adminrechte nötig) und beginnt nicht von selbst mit der Aufnahme.",
"settings.recording.close_tray_label": "In den Infobereich schließen",
"settings.recording.close_tray_hint": "Beim Schließen des Fensters läuft WhispAssist im Hintergrund weiter, statt zu beenden. Über das Tray-Symbol wieder öffnen; zum vollständigen Beenden dort „Beenden“ wählen. Standardmäßig an."
} }
+7
View File
@@ -75,6 +75,9 @@
"settings.hardware.downloading_model": "Downloading {name}", "settings.hardware.downloading_model": "Downloading {name}",
"settings.hardware.active_badge": "Active", "settings.hardware.active_badge": "Active",
"settings.hardware.installed": "Installed", "settings.hardware.installed": "Installed",
"settings.hardware.quantization_for": "Quantization for {name}",
"settings.hardware.quant_recommended": "{quant} · recommended",
"settings.hardware.quant_higher": "{quant} · higher quality, larger",
"settings.hardware.use": "Use", "settings.hardware.use": "Use",
"settings.hardware.remove": "Remove", "settings.hardware.remove": "Remove",
"settings.hardware.cant_remove_active": "Can't remove the active model", "settings.hardware.cant_remove_active": "Can't remove the active model",
@@ -429,6 +432,10 @@
"meetings.status.error": "error", "meetings.status.error": "error",
"meetings.resume": "Resume transcription", "meetings.resume": "Resume transcription",
"meetings.delete_aria": "Delete meeting", "meetings.delete_aria": "Delete meeting",
"meetings.not_encrypted": "Not encrypted",
"meetings.encrypt": "Encrypt",
"meetings.encrypting": "Encrypting…",
"meetings.encrypt_title": "Encrypt this meeting's files with the vault",
"meetings.delete_confirm": "Delete this meeting? This removes its recording, transcript, and notes.", "meetings.delete_confirm": "Delete this meeting? This removes its recording, transcript, and notes.",
"transcript.heading": "Transcript", "transcript.heading": "Transcript",
+61 -4
View File
@@ -24,6 +24,25 @@
"settings.transcription.switch_multilingual": "Cambia a un modelo multilingüe arriba para elegir un idioma.", "settings.transcription.switch_multilingual": "Cambia a un modelo multilingüe arriba para elegir un idioma.",
"settings.hardware.title": "Hardware", "settings.hardware.title": "Hardware",
"settings.hardware.refresh": "Actualizar",
"settings.hardware.test_output": "Probar",
"settings.hardware.test_mic": "Probar",
"settings.hardware.testing": "Escuchando…",
"settings.hardware.play_tone": "Reproducir tono",
"settings.hardware.stress_title": "Prueba rápida de rendimiento",
"settings.hardware.stress_hint": "Evalúa los modelos instalados en cada backend disponible y recomienda el más preciso que siga el ritmo del habla en directo. Tarda un momento.",
"settings.hardware.stress_run": "Ejecutar prueba",
"settings.hardware.stress_running": "Ejecutando…",
"settings.hardware.stress_progress": "Evaluando {pair}…",
"settings.hardware.stress_recommend": "Recomendado: {backend} + {model}",
"settings.hardware.stress_apply": "Aplicar",
"settings.hardware.stress_none": "Ningún modelo instalado sigue el ritmo del habla en directo en este hardware — prueba con un modelo más pequeño.",
"settings.hardware.stress_backend": "Backend",
"settings.hardware.stress_model": "Modelo",
"settings.hardware.stress_rtf": "Velocidad (×tiempo real)",
"settings.hardware.stress_realtime": "¿En directo?",
"settings.hardware.stress_yes": "Sí",
"settings.hardware.stress_no": "No",
"settings.hardware.active_backend": "Backend activo", "settings.hardware.active_backend": "Backend activo",
"settings.hardware.model_meta": "· modelo {size}", "settings.hardware.model_meta": "· modelo {size}",
"settings.hardware.preferred_backend": "Backend preferido", "settings.hardware.preferred_backend": "Backend preferido",
@@ -56,6 +75,9 @@
"settings.hardware.downloading_model": "Descargando {name}", "settings.hardware.downloading_model": "Descargando {name}",
"settings.hardware.active_badge": "Activo", "settings.hardware.active_badge": "Activo",
"settings.hardware.installed": "Instalado", "settings.hardware.installed": "Instalado",
"settings.hardware.quantization_for": "Cuantización de {name}",
"settings.hardware.quant_recommended": "{quant} · recomendado",
"settings.hardware.quant_higher": "{quant} · mayor calidad, más grande",
"settings.hardware.use": "Usar", "settings.hardware.use": "Usar",
"settings.hardware.remove": "Eliminar", "settings.hardware.remove": "Eliminar",
"settings.hardware.cant_remove_active": "No se puede eliminar el modelo activo", "settings.hardware.cant_remove_active": "No se puede eliminar el modelo activo",
@@ -88,6 +110,7 @@
"settings.calendar.title": "Calendario y Outlook .pst", "settings.calendar.title": "Calendario y Outlook .pst",
"settings.calendar.intro_1": "Importa eventos y asistentes desde una copia de seguridad local de Outlook", "settings.calendar.intro_1": "Importa eventos y asistentes desde una copia de seguridad local de Outlook",
"settings.calendar.intro_2": "— solo lectura, no se escribe nada de vuelta en el archivo. Nada sale de este dispositivo.", "settings.calendar.intro_2": "— solo lectura, no se escribe nada de vuelta en el archivo. Nada sale de este dispositivo.",
"settings.calendar.requires": "Necesita esto en tu PATH (no incluido):",
"settings.calendar.pst_file": "Archivo .pst", "settings.calendar.pst_file": "Archivo .pst",
"settings.calendar.no_file": "Ningún archivo seleccionado", "settings.calendar.no_file": "Ningún archivo seleccionado",
"settings.calendar.browse": "Examinar…", "settings.calendar.browse": "Examinar…",
@@ -278,6 +301,7 @@
"settings.privacy.locked_word": "bloqueada", "settings.privacy.locked_word": "bloqueada",
"settings.privacy.vault_locked_2": ". Desbloquéala para leer las reuniones cifradas.", "settings.privacy.vault_locked_2": ". Desbloquéala para leer las reuniones cifradas.",
"settings.privacy.password": "Contraseña", "settings.privacy.password": "Contraseña",
"settings.privacy.show_password": "Mostrar contraseña",
"settings.privacy.unlock": "Desbloquear", "settings.privacy.unlock": "Desbloquear",
"settings.privacy.vault_unlocked_1": "La bóveda está ", "settings.privacy.vault_unlocked_1": "La bóveda está ",
"settings.privacy.unlocked_word": "desbloqueada", "settings.privacy.unlocked_word": "desbloqueada",
@@ -320,12 +344,23 @@
"import.optional": "opcional", "import.optional": "opcional",
"import.title_placeholder": "Por defecto, el nombre del archivo", "import.title_placeholder": "Por defecto, el nombre del archivo",
"import.filter_av": "Audio / vídeo", "import.filter_av": "Audio / vídeo",
"import.requires_1": "Requiere", "import.model_label": "Modelo de transcripción",
"import.requires_2": "instalado y en tu PATH (además de", "import.model_hint": "Se guarda con la reunión para que veas cómo se transcribió.",
"import.requires_3": "para las URL). WhispAssist no los incluye.", "import.requires": "Necesita estos en tu PATH (no incluidos):",
"import.background_note": "Se ejecuta en segundo plano — síguelo en la lista.",
"import.importing": "Importando… esto puede tardar un rato", "import.importing": "Importando… esto puede tardar un rato",
"import.import": "Importar", "import.import": "Importar",
"import.cancel": "Cancelar", "import.cancel": "Cancelar",
"import.tracker.label": "Progreso de la importación",
"import.tracker.running": "Importando…",
"import.tracker.done": "Importación completada",
"import.tracker.failed": "Importación fallida",
"import.tracker.working": "trabajando…",
"import.tracker.stopped": "detenido",
"import.phase.prepare": "Transcodificar",
"import.phase.transcribe": "Transcribir",
"import.phase.diarize": "Identificar hablantes",
"import.phase.finalize": "Finalizar",
"tagchip.filter": "Filtrar reuniones etiquetadas con «{tag}»", "tagchip.filter": "Filtrar reuniones etiquetadas con «{tag}»",
"tagchip.remove": "Eliminar etiqueta {tag}", "tagchip.remove": "Eliminar etiqueta {tag}",
@@ -345,6 +380,10 @@
"app.cancel": "Cancelar", "app.cancel": "Cancelar",
"app.cancel_title": "Descartar esta grabación y eliminarla", "app.cancel_title": "Descartar esta grabación y eliminarla",
"app.recording": "Grabando…", "app.recording": "Grabando…",
"app.mute": "Silenciar micrófono",
"app.unmute": "Activar micrófono",
"app.mute_title": "Silenciar micrófono (M)",
"app.unmute_title": "Activar micrófono (M)",
"app.backend_title": "Backend de transcripción activo", "app.backend_title": "Backend de transcripción activo",
"app.retention_title": "Guardar el audio como .wav para esta reunión", "app.retention_title": "Guardar el audio como .wav para esta reunión",
"app.saving": "guardando", "app.saving": "guardando",
@@ -393,10 +432,15 @@
"meetings.status.error": "error", "meetings.status.error": "error",
"meetings.resume": "Reanudar transcripción", "meetings.resume": "Reanudar transcripción",
"meetings.delete_aria": "Eliminar reunión", "meetings.delete_aria": "Eliminar reunión",
"meetings.not_encrypted": "Sin cifrar",
"meetings.encrypt": "Cifrar",
"meetings.encrypting": "Cifrando…",
"meetings.encrypt_title": "Cifrar los archivos de esta reunión con la caja fuerte",
"meetings.delete_confirm": "¿Eliminar esta reunión? Se eliminarán su grabación, transcripción y notas.", "meetings.delete_confirm": "¿Eliminar esta reunión? Se eliminarán su grabación, transcripción y notas.",
"transcript.heading": "Transcripción", "transcript.heading": "Transcripción",
"transcript.title_aria": "Título de la reunión", "transcript.title_aria": "Título de la reunión",
"transcript.transcribed_with": "Transcrito con",
"transcript.lang_title": "Idioma de transcripción", "transcript.lang_title": "Idioma de transcripción",
"transcript.lang_auto": "detectando…", "transcript.lang_auto": "detectando…",
"transcript.show": "Mostrar transcripción", "transcript.show": "Mostrar transcripción",
@@ -428,9 +472,18 @@
"notes.italic": "Cursiva", "notes.italic": "Cursiva",
"notes.h1": "Encabezado 1", "notes.h1": "Encabezado 1",
"notes.h2": "Encabezado 2", "notes.h2": "Encabezado 2",
"notes.h3": "Encabezado 3",
"notes.bullet": "Lista con viñetas", "notes.bullet": "Lista con viñetas",
"notes.numbered": "Lista numerada",
"notes.quote": "Cita",
"notes.divider": "Separador",
"notes.checkbox_title": "Casilla de verificación", "notes.checkbox_title": "Casilla de verificación",
"notes.checkbox_aria": "Elemento de lista con casilla", "notes.checkbox_aria": "Elemento de lista con casilla",
"notes.enhance": "Mejorar",
"notes.enhancing": "Mejorando…",
"notes.enhance_title": "Ampliar estas notas a Markdown estructurado usando la transcripción (IA)",
"notes.enhanced_note": "Notas mejoradas a partir de la transcripción.",
"notes.undo_enhance": "Deshacer",
"notes.edit_raw": "Editar el markdown en bruto", "notes.edit_raw": "Editar el markdown en bruto",
"notes.render": "Renderizar el markdown", "notes.render": "Renderizar el markdown",
"notes.editor": "Editor", "notes.editor": "Editor",
@@ -527,5 +580,9 @@
"settings.recording.consent_ack": "reconocido", "settings.recording.consent_ack": "reconocido",
"settings.recording.consent_not": "aún no reconocido", "settings.recording.consent_not": "aún no reconocido",
"settings.recording.auto_label": "Iniciar la grabación automáticamente cuando comience un evento del calendario", "settings.recording.auto_label": "Iniciar la grabación automáticamente cuando comience un evento del calendario",
"settings.recording.auto_hint": "Solo mientras WhispAssist esté abierto. Cuando llega la hora de inicio de un evento del calendario importado, comienza una grabación automáticamente (usando tu ajuste de retención predeterminado de arriba). Nada se ejecuta en segundo plano — el temporizador solo se arma mientras la aplicación está en ejecución. Importa eventos en Ajustes → Calendario." "settings.recording.auto_hint": "Solo mientras WhispAssist esté abierto. Cuando llega la hora de inicio de un evento del calendario importado, comienza una grabación automáticamente (usando tu ajuste de retención predeterminado de arriba). Nada se ejecuta en segundo plano — el temporizador solo se arma mientras la aplicación está en ejecución. Importa eventos en Ajustes → Calendario.",
"settings.recording.autostart_label": "Iniciar WhispAssist al iniciar sesión",
"settings.recording.autostart_hint": "Inicia WhispAssist automáticamente al iniciar sesión en Windows. Desactivado por defecto; instala una entrada de inicio por usuario (sin permisos de administrador) y no empieza a grabar por sí solo.",
"settings.recording.close_tray_label": "Cerrar a la bandeja del sistema",
"settings.recording.close_tray_hint": "Al cerrar la ventana, WhispAssist sigue ejecutándose en segundo plano en lugar de salir. Vuelve a abrirlo desde el icono de la bandeja; usa Salir en la bandeja para cerrarlo del todo. Activado por defecto."
} }
+61 -4
View File
@@ -24,6 +24,25 @@
"settings.transcription.switch_multilingual": "Cambia a un modelo multilingüe arriba para elegir un idioma.", "settings.transcription.switch_multilingual": "Cambia a un modelo multilingüe arriba para elegir un idioma.",
"settings.hardware.title": "Hardware", "settings.hardware.title": "Hardware",
"settings.hardware.refresh": "Actualizar",
"settings.hardware.test_output": "Probar",
"settings.hardware.test_mic": "Probar",
"settings.hardware.testing": "Escuchando…",
"settings.hardware.play_tone": "Reproducir tono",
"settings.hardware.stress_title": "Prueba rápida de rendimiento",
"settings.hardware.stress_hint": "Evalúa los modelos instalados en cada backend disponible y recomienda el más preciso que siga el ritmo del habla en vivo. Tarda un momento.",
"settings.hardware.stress_run": "Ejecutar prueba",
"settings.hardware.stress_running": "Ejecutando…",
"settings.hardware.stress_progress": "Evaluando {pair}…",
"settings.hardware.stress_recommend": "Recomendado: {backend} + {model}",
"settings.hardware.stress_apply": "Aplicar",
"settings.hardware.stress_none": "Ningún modelo instalado sigue el ritmo del habla en vivo en este hardware — prueba con un modelo más pequeño.",
"settings.hardware.stress_backend": "Backend",
"settings.hardware.stress_model": "Modelo",
"settings.hardware.stress_rtf": "Velocidad (×tiempo real)",
"settings.hardware.stress_realtime": "¿En vivo?",
"settings.hardware.stress_yes": "Sí",
"settings.hardware.stress_no": "No",
"settings.hardware.active_backend": "Backend activo", "settings.hardware.active_backend": "Backend activo",
"settings.hardware.model_meta": "· modelo {size}", "settings.hardware.model_meta": "· modelo {size}",
"settings.hardware.preferred_backend": "Backend preferido", "settings.hardware.preferred_backend": "Backend preferido",
@@ -56,6 +75,9 @@
"settings.hardware.downloading_model": "Descargando {name}", "settings.hardware.downloading_model": "Descargando {name}",
"settings.hardware.active_badge": "Activo", "settings.hardware.active_badge": "Activo",
"settings.hardware.installed": "Instalado", "settings.hardware.installed": "Instalado",
"settings.hardware.quantization_for": "Cuantización de {name}",
"settings.hardware.quant_recommended": "{quant} · recomendado",
"settings.hardware.quant_higher": "{quant} · mayor calidad, más grande",
"settings.hardware.use": "Usar", "settings.hardware.use": "Usar",
"settings.hardware.remove": "Quitar", "settings.hardware.remove": "Quitar",
"settings.hardware.cant_remove_active": "No se puede quitar el modelo activo", "settings.hardware.cant_remove_active": "No se puede quitar el modelo activo",
@@ -88,6 +110,7 @@
"settings.calendar.title": "Calendario y Outlook .pst", "settings.calendar.title": "Calendario y Outlook .pst",
"settings.calendar.intro_1": "Importa eventos y asistentes desde un respaldo local de Outlook", "settings.calendar.intro_1": "Importa eventos y asistentes desde un respaldo local de Outlook",
"settings.calendar.intro_2": "— solo lectura, no se escribe nada de vuelta en el archivo. Nada sale de este dispositivo.", "settings.calendar.intro_2": "— solo lectura, no se escribe nada de vuelta en el archivo. Nada sale de este dispositivo.",
"settings.calendar.requires": "Necesita esto en tu PATH (no incluido):",
"settings.calendar.pst_file": "Archivo .pst", "settings.calendar.pst_file": "Archivo .pst",
"settings.calendar.no_file": "Ningún archivo seleccionado", "settings.calendar.no_file": "Ningún archivo seleccionado",
"settings.calendar.browse": "Examinar…", "settings.calendar.browse": "Examinar…",
@@ -278,6 +301,7 @@
"settings.privacy.locked_word": "bloqueada", "settings.privacy.locked_word": "bloqueada",
"settings.privacy.vault_locked_2": ". Desbloquéala para leer las reuniones cifradas.", "settings.privacy.vault_locked_2": ". Desbloquéala para leer las reuniones cifradas.",
"settings.privacy.password": "Contraseña", "settings.privacy.password": "Contraseña",
"settings.privacy.show_password": "Mostrar contraseña",
"settings.privacy.unlock": "Desbloquear", "settings.privacy.unlock": "Desbloquear",
"settings.privacy.vault_unlocked_1": "La bóveda está ", "settings.privacy.vault_unlocked_1": "La bóveda está ",
"settings.privacy.unlocked_word": "desbloqueada", "settings.privacy.unlocked_word": "desbloqueada",
@@ -320,12 +344,23 @@
"import.optional": "opcional", "import.optional": "opcional",
"import.title_placeholder": "Por defecto, el nombre del archivo", "import.title_placeholder": "Por defecto, el nombre del archivo",
"import.filter_av": "Audio / video", "import.filter_av": "Audio / video",
"import.requires_1": "Requiere", "import.model_label": "Modelo de transcripción",
"import.requires_2": "instalado y en tu PATH (además de", "import.model_hint": "Se guarda con la reunión para que veas cómo se transcribió.",
"import.requires_3": "para las URL). WhispAssist no los incluye.", "import.requires": "Necesita estos en tu PATH (no incluidos):",
"import.background_note": "Se ejecuta en segundo plano — síguelo en la lista.",
"import.importing": "Importando… esto puede tardar un rato", "import.importing": "Importando… esto puede tardar un rato",
"import.import": "Importar", "import.import": "Importar",
"import.cancel": "Cancelar", "import.cancel": "Cancelar",
"import.tracker.label": "Progreso de la importación",
"import.tracker.running": "Importando…",
"import.tracker.done": "Importación completada",
"import.tracker.failed": "Importación fallida",
"import.tracker.working": "trabajando…",
"import.tracker.stopped": "detenido",
"import.phase.prepare": "Transcodificar",
"import.phase.transcribe": "Transcribir",
"import.phase.diarize": "Identificar hablantes",
"import.phase.finalize": "Finalizar",
"tagchip.filter": "Filtrar reuniones etiquetadas con «{tag}»", "tagchip.filter": "Filtrar reuniones etiquetadas con «{tag}»",
"tagchip.remove": "Quitar etiqueta {tag}", "tagchip.remove": "Quitar etiqueta {tag}",
@@ -345,6 +380,10 @@
"app.cancel": "Cancelar", "app.cancel": "Cancelar",
"app.cancel_title": "Descartar esta grabación y eliminarla", "app.cancel_title": "Descartar esta grabación y eliminarla",
"app.recording": "Grabando…", "app.recording": "Grabando…",
"app.mute": "Silenciar micrófono",
"app.unmute": "Activar micrófono",
"app.mute_title": "Silenciar micrófono (M)",
"app.unmute_title": "Activar micrófono (M)",
"app.backend_title": "Backend de transcripción activo", "app.backend_title": "Backend de transcripción activo",
"app.retention_title": "Guardar el audio como .wav para esta reunión", "app.retention_title": "Guardar el audio como .wav para esta reunión",
"app.saving": "guardando", "app.saving": "guardando",
@@ -393,10 +432,15 @@
"meetings.status.error": "error", "meetings.status.error": "error",
"meetings.resume": "Reanudar transcripción", "meetings.resume": "Reanudar transcripción",
"meetings.delete_aria": "Eliminar reunión", "meetings.delete_aria": "Eliminar reunión",
"meetings.not_encrypted": "Sin cifrar",
"meetings.encrypt": "Cifrar",
"meetings.encrypting": "Cifrando…",
"meetings.encrypt_title": "Cifrar los archivos de esta reunión con la bóveda",
"meetings.delete_confirm": "¿Eliminar esta reunión? Se eliminarán su grabación, transcripción y notas.", "meetings.delete_confirm": "¿Eliminar esta reunión? Se eliminarán su grabación, transcripción y notas.",
"transcript.heading": "Transcripción", "transcript.heading": "Transcripción",
"transcript.title_aria": "Título de la reunión", "transcript.title_aria": "Título de la reunión",
"transcript.transcribed_with": "Transcrito con",
"transcript.lang_title": "Idioma de transcripción", "transcript.lang_title": "Idioma de transcripción",
"transcript.lang_auto": "detectando…", "transcript.lang_auto": "detectando…",
"transcript.show": "Mostrar transcripción", "transcript.show": "Mostrar transcripción",
@@ -428,9 +472,18 @@
"notes.italic": "Cursiva", "notes.italic": "Cursiva",
"notes.h1": "Encabezado 1", "notes.h1": "Encabezado 1",
"notes.h2": "Encabezado 2", "notes.h2": "Encabezado 2",
"notes.h3": "Encabezado 3",
"notes.bullet": "Lista con viñetas", "notes.bullet": "Lista con viñetas",
"notes.numbered": "Lista numerada",
"notes.quote": "Cita",
"notes.divider": "Separador",
"notes.checkbox_title": "Casilla de verificación", "notes.checkbox_title": "Casilla de verificación",
"notes.checkbox_aria": "Elemento de lista con casilla", "notes.checkbox_aria": "Elemento de lista con casilla",
"notes.enhance": "Mejorar",
"notes.enhancing": "Mejorando…",
"notes.enhance_title": "Ampliar estas notas a Markdown estructurado usando la transcripción (IA)",
"notes.enhanced_note": "Notas mejoradas a partir de la transcripción.",
"notes.undo_enhance": "Deshacer",
"notes.edit_raw": "Editar el markdown en bruto", "notes.edit_raw": "Editar el markdown en bruto",
"notes.render": "Renderizar el markdown", "notes.render": "Renderizar el markdown",
"notes.editor": "Editor", "notes.editor": "Editor",
@@ -527,5 +580,9 @@
"settings.recording.consent_ack": "reconocido", "settings.recording.consent_ack": "reconocido",
"settings.recording.consent_not": "aún no reconocido", "settings.recording.consent_not": "aún no reconocido",
"settings.recording.auto_label": "Iniciar la grabación automáticamente cuando comience un evento del calendario", "settings.recording.auto_label": "Iniciar la grabación automáticamente cuando comience un evento del calendario",
"settings.recording.auto_hint": "Solo mientras WhispAssist esté abierto. Cuando llega la hora de inicio de un evento del calendario importado, comienza una grabación automáticamente (usando tu configuración de retención predeterminada de arriba). Nada se ejecuta en segundo plano — el temporizador solo se arma mientras la aplicación está en ejecución. Importa eventos en Configuración → Calendario." "settings.recording.auto_hint": "Solo mientras WhispAssist esté abierto. Cuando llega la hora de inicio de un evento del calendario importado, comienza una grabación automáticamente (usando tu configuración de retención predeterminada de arriba). Nada se ejecuta en segundo plano — el temporizador solo se arma mientras la aplicación está en ejecución. Importa eventos en Configuración → Calendario.",
"settings.recording.autostart_label": "Iniciar WhispAssist al iniciar sesión",
"settings.recording.autostart_hint": "Inicia WhispAssist automáticamente al iniciar sesión en Windows. Desactivado por defecto; instala una entrada de inicio por usuario (sin permisos de administrador) y no empieza a grabar por sí solo.",
"settings.recording.close_tray_label": "Cerrar a la bandeja del sistema",
"settings.recording.close_tray_hint": "Al cerrar la ventana, WhispAssist sigue ejecutándose en segundo plano en lugar de salir. Vuelve a abrirlo desde el ícono de la bandeja; usa Salir en la bandeja para cerrarlo por completo. Activado por defecto."
} }
+61 -4
View File
@@ -24,6 +24,25 @@
"settings.transcription.switch_multilingual": "Vaihda yllä monikieliseen malliin valitaksesi kielen.", "settings.transcription.switch_multilingual": "Vaihda yllä monikieliseen malliin valitaksesi kielen.",
"settings.hardware.title": "Laitteisto", "settings.hardware.title": "Laitteisto",
"settings.hardware.refresh": "Päivitä",
"settings.hardware.test_output": "Testaa",
"settings.hardware.test_mic": "Testaa",
"settings.hardware.testing": "Kuunnellaan…",
"settings.hardware.play_tone": "Toista ääni",
"settings.hardware.stress_title": "Pikainen rasitustesti",
"settings.hardware.stress_hint": "Mittaa asennetut mallit jokaisella käytettävissä olevalla taustajärjestelmällä ja suosittelee tarkinta, joka pysyy puheen tahdissa. Kestää hetken.",
"settings.hardware.stress_run": "Suorita rasitustesti",
"settings.hardware.stress_running": "Suoritetaan…",
"settings.hardware.stress_progress": "Mitataan {pair}…",
"settings.hardware.stress_recommend": "Suositus: {backend} + {model}",
"settings.hardware.stress_apply": "Käytä",
"settings.hardware.stress_none": "Mikään asennettu malli ei pysy puheen tahdissa tällä laitteistolla — kokeile pienempää mallia.",
"settings.hardware.stress_backend": "Taustajärjestelmä",
"settings.hardware.stress_model": "Malli",
"settings.hardware.stress_rtf": "Nopeus (×reaaliaika)",
"settings.hardware.stress_realtime": "Reaaliaikainen?",
"settings.hardware.stress_yes": "Kyllä",
"settings.hardware.stress_no": "Ei",
"settings.hardware.active_backend": "Aktiivinen taustajärjestelmä", "settings.hardware.active_backend": "Aktiivinen taustajärjestelmä",
"settings.hardware.model_meta": "· malli {size}", "settings.hardware.model_meta": "· malli {size}",
"settings.hardware.preferred_backend": "Ensisijainen taustajärjestelmä", "settings.hardware.preferred_backend": "Ensisijainen taustajärjestelmä",
@@ -56,6 +75,9 @@
"settings.hardware.downloading_model": "Ladataan {name}", "settings.hardware.downloading_model": "Ladataan {name}",
"settings.hardware.active_badge": "Aktiivinen", "settings.hardware.active_badge": "Aktiivinen",
"settings.hardware.installed": "Asennettu", "settings.hardware.installed": "Asennettu",
"settings.hardware.quantization_for": "Kvantisointi: {name}",
"settings.hardware.quant_recommended": "{quant} · suositeltu",
"settings.hardware.quant_higher": "{quant} · parempi laatu, suurempi",
"settings.hardware.use": "Käytä", "settings.hardware.use": "Käytä",
"settings.hardware.remove": "Poista", "settings.hardware.remove": "Poista",
"settings.hardware.cant_remove_active": "Aktiivista mallia ei voi poistaa", "settings.hardware.cant_remove_active": "Aktiivista mallia ei voi poistaa",
@@ -88,6 +110,7 @@
"settings.calendar.title": "Kalenteri ja Outlook .pst", "settings.calendar.title": "Kalenteri ja Outlook .pst",
"settings.calendar.intro_1": "Tuo tapahtumia ja osallistujia paikallisesta Outlook-", "settings.calendar.intro_1": "Tuo tapahtumia ja osallistujia paikallisesta Outlook-",
"settings.calendar.intro_2": "varmuuskopiosta — vain luku, mitään ei kirjoiteta takaisin tiedostoon. Mikään ei poistu tältä laitteelta.", "settings.calendar.intro_2": "varmuuskopiosta — vain luku, mitään ei kirjoiteta takaisin tiedostoon. Mikään ei poistu tältä laitteelta.",
"settings.calendar.requires": "Vaatii tämän PATH-polusta (ei sisälly):",
"settings.calendar.pst_file": ".pst-tiedosto", "settings.calendar.pst_file": ".pst-tiedosto",
"settings.calendar.no_file": "Ei valittua tiedostoa", "settings.calendar.no_file": "Ei valittua tiedostoa",
"settings.calendar.browse": "Selaa…", "settings.calendar.browse": "Selaa…",
@@ -278,6 +301,7 @@
"settings.privacy.locked_word": "lukittu", "settings.privacy.locked_word": "lukittu",
"settings.privacy.vault_locked_2": ". Avaa lukitus lukeaksesi salatut kokoukset.", "settings.privacy.vault_locked_2": ". Avaa lukitus lukeaksesi salatut kokoukset.",
"settings.privacy.password": "Salasana", "settings.privacy.password": "Salasana",
"settings.privacy.show_password": "Näytä salasana",
"settings.privacy.unlock": "Avaa lukitus", "settings.privacy.unlock": "Avaa lukitus",
"settings.privacy.vault_unlocked_1": "Holvi on ", "settings.privacy.vault_unlocked_1": "Holvi on ",
"settings.privacy.unlocked_word": "avattu", "settings.privacy.unlocked_word": "avattu",
@@ -320,12 +344,23 @@
"import.optional": "valinnainen", "import.optional": "valinnainen",
"import.title_placeholder": "Oletuksena tiedoston nimi", "import.title_placeholder": "Oletuksena tiedoston nimi",
"import.filter_av": "Ääni / video", "import.filter_av": "Ääni / video",
"import.requires_1": "Vaatii", "import.model_label": "Transkriptiomalli",
"import.requires_2": "asennettuna ja PATH:issasi (sekä", "import.model_hint": "Tallennetaan kokouksen mukana, jotta näet millä se litteroitiin.",
"import.requires_3": "URL-osoitteille). WhispAssist ei sisällä niitä.", "import.requires": "Vaatii nämä PATH-polusta (eivät sisälly):",
"import.background_note": "Suoritetaan taustalla — seuraa etenemistä listasta.",
"import.importing": "Tuodaan… tämä voi kestää hetken", "import.importing": "Tuodaan… tämä voi kestää hetken",
"import.import": "Tuo", "import.import": "Tuo",
"import.cancel": "Peruuta", "import.cancel": "Peruuta",
"import.tracker.label": "Tuonnin eteneminen",
"import.tracker.running": "Tuodaan…",
"import.tracker.done": "Tuonti valmis",
"import.tracker.failed": "Tuonti epäonnistui",
"import.tracker.working": "työskentelee…",
"import.tracker.stopped": "pysäytetty",
"import.phase.prepare": "Transkoodaus",
"import.phase.transcribe": "Litterointi",
"import.phase.diarize": "Puhujien tunnistus",
"import.phase.finalize": "Viimeistely",
"tagchip.filter": "Suodata kokoukset, joilla on tunniste ”{tag}”", "tagchip.filter": "Suodata kokoukset, joilla on tunniste ”{tag}”",
"tagchip.remove": "Poista tunniste {tag}", "tagchip.remove": "Poista tunniste {tag}",
@@ -345,6 +380,10 @@
"app.cancel": "Peruuta", "app.cancel": "Peruuta",
"app.cancel_title": "Hylkää tämä tallennus ja poista se", "app.cancel_title": "Hylkää tämä tallennus ja poista se",
"app.recording": "Tallennetaan…", "app.recording": "Tallennetaan…",
"app.mute": "Mykistä mikrofoni",
"app.unmute": "Poista mykistys",
"app.mute_title": "Mykistä mikrofoni (M)",
"app.unmute_title": "Poista mykistys (M)",
"app.backend_title": "Aktiivinen litteroinnin taustajärjestelmä", "app.backend_title": "Aktiivinen litteroinnin taustajärjestelmä",
"app.retention_title": "Tallenna ääni .wav-muodossa tälle kokoukselle", "app.retention_title": "Tallenna ääni .wav-muodossa tälle kokoukselle",
"app.saving": "tallennetaan", "app.saving": "tallennetaan",
@@ -393,10 +432,15 @@
"meetings.status.error": "virhe", "meetings.status.error": "virhe",
"meetings.resume": "Jatka litterointia", "meetings.resume": "Jatka litterointia",
"meetings.delete_aria": "Poista kokous", "meetings.delete_aria": "Poista kokous",
"meetings.not_encrypted": "Salaamaton",
"meetings.encrypt": "Salaa",
"meetings.encrypting": "Salataan…",
"meetings.encrypt_title": "Salaa tämän kokouksen tiedostot holvilla",
"meetings.delete_confirm": "Poistetaanko tämä kokous? Tämä poistaa sen tallennuksen, litteroinnin ja muistiinpanot.", "meetings.delete_confirm": "Poistetaanko tämä kokous? Tämä poistaa sen tallennuksen, litteroinnin ja muistiinpanot.",
"transcript.heading": "Litterointi", "transcript.heading": "Litterointi",
"transcript.title_aria": "Kokouksen otsikko", "transcript.title_aria": "Kokouksen otsikko",
"transcript.transcribed_with": "Litteroitu mallilla",
"transcript.lang_title": "Litterointikieli", "transcript.lang_title": "Litterointikieli",
"transcript.lang_auto": "tunnistetaan…", "transcript.lang_auto": "tunnistetaan…",
"transcript.show": "Näytä litterointi", "transcript.show": "Näytä litterointi",
@@ -428,9 +472,18 @@
"notes.italic": "Kursivointi", "notes.italic": "Kursivointi",
"notes.h1": "Otsikko 1", "notes.h1": "Otsikko 1",
"notes.h2": "Otsikko 2", "notes.h2": "Otsikko 2",
"notes.h3": "Otsikko 3",
"notes.bullet": "Luettelomerkitty lista", "notes.bullet": "Luettelomerkitty lista",
"notes.numbered": "Numeroitu luettelo",
"notes.quote": "Lainaus",
"notes.divider": "Erotin",
"notes.checkbox_title": "Valintaruutu", "notes.checkbox_title": "Valintaruutu",
"notes.checkbox_aria": "Valintaruutulistan kohde", "notes.checkbox_aria": "Valintaruutulistan kohde",
"notes.enhance": "Paranna",
"notes.enhancing": "Parannetaan…",
"notes.enhance_title": "Laajenna muistiinpanot jäsennellyksi Markdowniksi transkription avulla (tekoäly)",
"notes.enhanced_note": "Muistiinpanot paranneltu transkription pohjalta.",
"notes.undo_enhance": "Kumoa",
"notes.edit_raw": "Muokkaa raakaa markdownia", "notes.edit_raw": "Muokkaa raakaa markdownia",
"notes.render": "Renderöi markdown", "notes.render": "Renderöi markdown",
"notes.editor": "Editori", "notes.editor": "Editori",
@@ -527,5 +580,9 @@
"settings.recording.consent_ack": "vahvistettu", "settings.recording.consent_ack": "vahvistettu",
"settings.recording.consent_not": "ei vielä vahvistettu", "settings.recording.consent_not": "ei vielä vahvistettu",
"settings.recording.auto_label": "Aloita tallennus automaattisesti, kun kalenteritapahtuma alkaa", "settings.recording.auto_label": "Aloita tallennus automaattisesti, kun kalenteritapahtuma alkaa",
"settings.recording.auto_hint": "Vain kun WhispAssist on auki. Kun tuodun kalenteritapahtuman alkamisaika koittaa, tallennus alkaa automaattisesti (käyttäen yllä olevaa oletussäilytysasetustasi). Mikään ei suoritu taustalla — ajastin on viritetty vain sovelluksen ollessa käynnissä. Tuo tapahtumia kohdasta Asetukset → Kalenteri." "settings.recording.auto_hint": "Vain kun WhispAssist on auki. Kun tuodun kalenteritapahtuman alkamisaika koittaa, tallennus alkaa automaattisesti (käyttäen yllä olevaa oletussäilytysasetustasi). Mikään ei suoritu taustalla — ajastin on viritetty vain sovelluksen ollessa käynnissä. Tuo tapahtumia kohdasta Asetukset → Kalenteri.",
"settings.recording.autostart_label": "Käynnistä WhispAssist kirjautuessa",
"settings.recording.autostart_hint": "Käynnistää WhispAssistin automaattisesti, kun kirjaudut Windowsiin. Oletuksena pois; asentaa käyttäjäkohtaisen käynnistysmerkinnän (ei vaadi järjestelmänvalvojaa) eikä aloita tallennusta itsestään.",
"settings.recording.close_tray_label": "Sulje ilmaisinalueelle",
"settings.recording.close_tray_hint": "Ikkunan sulkeminen jättää WhispAssistin käyntiin taustalle sulkemisen sijaan. Avaa uudelleen ilmaisinalueen kuvakkeesta; lopeta kokonaan valitsemalla sieltä Lopeta. Oletuksena päällä."
} }
+61 -4
View File
@@ -24,6 +24,25 @@
"settings.transcription.switch_multilingual": "Passez à un modèle multilingue ci-dessus pour choisir une langue.", "settings.transcription.switch_multilingual": "Passez à un modèle multilingue ci-dessus pour choisir une langue.",
"settings.hardware.title": "Matériel", "settings.hardware.title": "Matériel",
"settings.hardware.refresh": "Actualiser",
"settings.hardware.test_output": "Tester",
"settings.hardware.test_mic": "Tester",
"settings.hardware.testing": "Écoute…",
"settings.hardware.play_tone": "Jouer un son",
"settings.hardware.stress_title": "Test de charge rapide",
"settings.hardware.stress_hint": "Évalue les modèles installés sur chaque backend disponible et recommande le plus précis qui suit la parole en direct. Prend un instant.",
"settings.hardware.stress_run": "Lancer le test",
"settings.hardware.stress_running": "En cours…",
"settings.hardware.stress_progress": "Évaluation de {pair}…",
"settings.hardware.stress_recommend": "Recommandé : {backend} + {model}",
"settings.hardware.stress_apply": "Appliquer",
"settings.hardware.stress_none": "Aucun modèle installé ne suit la parole en direct sur ce matériel — essayez un modèle plus petit.",
"settings.hardware.stress_backend": "Backend",
"settings.hardware.stress_model": "Modèle",
"settings.hardware.stress_rtf": "Vitesse (×temps réel)",
"settings.hardware.stress_realtime": "En direct?",
"settings.hardware.stress_yes": "Oui",
"settings.hardware.stress_no": "Non",
"settings.hardware.active_backend": "Moteur actif", "settings.hardware.active_backend": "Moteur actif",
"settings.hardware.model_meta": "· modèle {size}", "settings.hardware.model_meta": "· modèle {size}",
"settings.hardware.preferred_backend": "Moteur préféré", "settings.hardware.preferred_backend": "Moteur préféré",
@@ -56,6 +75,9 @@
"settings.hardware.downloading_model": "Téléchargement de {name}", "settings.hardware.downloading_model": "Téléchargement de {name}",
"settings.hardware.active_badge": "Actif", "settings.hardware.active_badge": "Actif",
"settings.hardware.installed": "Installé", "settings.hardware.installed": "Installé",
"settings.hardware.quantization_for": "Quantification de {name}",
"settings.hardware.quant_recommended": "{quant} · recommandé",
"settings.hardware.quant_higher": "{quant} · meilleure qualité, plus volumineux",
"settings.hardware.use": "Utiliser", "settings.hardware.use": "Utiliser",
"settings.hardware.remove": "Supprimer", "settings.hardware.remove": "Supprimer",
"settings.hardware.cant_remove_active": "Impossible de supprimer le modèle actif", "settings.hardware.cant_remove_active": "Impossible de supprimer le modèle actif",
@@ -88,6 +110,7 @@
"settings.calendar.title": "Calendrier et Outlook .pst", "settings.calendar.title": "Calendrier et Outlook .pst",
"settings.calendar.intro_1": "Importez des événements et des participants depuis une sauvegarde Outlook locale", "settings.calendar.intro_1": "Importez des événements et des participants depuis une sauvegarde Outlook locale",
"settings.calendar.intro_2": "— en lecture seule, rien n'est réécrit dans le fichier. Rien ne quitte cet appareil.", "settings.calendar.intro_2": "— en lecture seule, rien n'est réécrit dans le fichier. Rien ne quitte cet appareil.",
"settings.calendar.requires": "Nécessite ceci dans votre PATH (non fourni) :",
"settings.calendar.pst_file": "Fichier .pst", "settings.calendar.pst_file": "Fichier .pst",
"settings.calendar.no_file": "Aucun fichier sélectionné", "settings.calendar.no_file": "Aucun fichier sélectionné",
"settings.calendar.browse": "Parcourir…", "settings.calendar.browse": "Parcourir…",
@@ -278,6 +301,7 @@
"settings.privacy.locked_word": "verrouillé", "settings.privacy.locked_word": "verrouillé",
"settings.privacy.vault_locked_2": ". Déverrouillez pour lire les réunions chiffrées.", "settings.privacy.vault_locked_2": ". Déverrouillez pour lire les réunions chiffrées.",
"settings.privacy.password": "Mot de passe", "settings.privacy.password": "Mot de passe",
"settings.privacy.show_password": "Afficher le mot de passe",
"settings.privacy.unlock": "Déverrouiller", "settings.privacy.unlock": "Déverrouiller",
"settings.privacy.vault_unlocked_1": "Le coffre est ", "settings.privacy.vault_unlocked_1": "Le coffre est ",
"settings.privacy.unlocked_word": "déverrouillé", "settings.privacy.unlocked_word": "déverrouillé",
@@ -320,12 +344,23 @@
"import.optional": "facultatif", "import.optional": "facultatif",
"import.title_placeholder": "Par défaut, le nom du fichier", "import.title_placeholder": "Par défaut, le nom du fichier",
"import.filter_av": "Audio / vidéo", "import.filter_av": "Audio / vidéo",
"import.requires_1": "Nécessite", "import.model_label": "Modèle de transcription",
"import.requires_2": "installé et dans votre PATH (plus", "import.model_hint": "Enregistré avec la réunion pour voir comment elle a été transcrite.",
"import.requires_3": "pour les URL). WhispAssist ne les inclut pas.", "import.requires": "Nécessite ceux-ci dans votre PATH (non fournis) :",
"import.background_note": "S'exécute en arrière-plan — suivez-le dans la liste.",
"import.importing": "Importation… cela peut prendre un moment", "import.importing": "Importation… cela peut prendre un moment",
"import.import": "Importer", "import.import": "Importer",
"import.cancel": "Annuler", "import.cancel": "Annuler",
"import.tracker.label": "Progression de l'importation",
"import.tracker.running": "Importation en cours…",
"import.tracker.done": "Importation terminée",
"import.tracker.failed": "Échec de l'importation",
"import.tracker.working": "en cours…",
"import.tracker.stopped": "arrêté",
"import.phase.prepare": "Transcodage",
"import.phase.transcribe": "Transcription",
"import.phase.diarize": "Identification des locuteurs",
"import.phase.finalize": "Finalisation",
"tagchip.filter": "Filtrer les réunions marquées « {tag} »", "tagchip.filter": "Filtrer les réunions marquées « {tag} »",
"tagchip.remove": "Supprimer l'étiquette {tag}", "tagchip.remove": "Supprimer l'étiquette {tag}",
@@ -345,6 +380,10 @@
"app.cancel": "Annuler", "app.cancel": "Annuler",
"app.cancel_title": "Abandonner cet enregistrement et le supprimer", "app.cancel_title": "Abandonner cet enregistrement et le supprimer",
"app.recording": "Enregistrement…", "app.recording": "Enregistrement…",
"app.mute": "Couper le micro",
"app.unmute": "Réactiver le micro",
"app.mute_title": "Couper le micro (M)",
"app.unmute_title": "Réactiver le micro (M)",
"app.backend_title": "Moteur de transcription actif", "app.backend_title": "Moteur de transcription actif",
"app.retention_title": "Enregistrer l'audio en .wav pour cette réunion", "app.retention_title": "Enregistrer l'audio en .wav pour cette réunion",
"app.saving": "enregistrement", "app.saving": "enregistrement",
@@ -393,10 +432,15 @@
"meetings.status.error": "erreur", "meetings.status.error": "erreur",
"meetings.resume": "Reprendre la transcription", "meetings.resume": "Reprendre la transcription",
"meetings.delete_aria": "Supprimer la réunion", "meetings.delete_aria": "Supprimer la réunion",
"meetings.not_encrypted": "Non chiffré",
"meetings.encrypt": "Chiffrer",
"meetings.encrypting": "Chiffrement…",
"meetings.encrypt_title": "Chiffrer les fichiers de cette réunion avec le coffre",
"meetings.delete_confirm": "Supprimer cette réunion ? Cela supprime son enregistrement, sa transcription et ses notes.", "meetings.delete_confirm": "Supprimer cette réunion ? Cela supprime son enregistrement, sa transcription et ses notes.",
"transcript.heading": "Transcription", "transcript.heading": "Transcription",
"transcript.title_aria": "Titre de la réunion", "transcript.title_aria": "Titre de la réunion",
"transcript.transcribed_with": "Transcrit avec",
"transcript.lang_title": "Langue de transcription", "transcript.lang_title": "Langue de transcription",
"transcript.lang_auto": "détection en cours…", "transcript.lang_auto": "détection en cours…",
"transcript.show": "Afficher la transcription", "transcript.show": "Afficher la transcription",
@@ -428,9 +472,18 @@
"notes.italic": "Italique", "notes.italic": "Italique",
"notes.h1": "Titre 1", "notes.h1": "Titre 1",
"notes.h2": "Titre 2", "notes.h2": "Titre 2",
"notes.h3": "Titre 3",
"notes.bullet": "Liste à puces", "notes.bullet": "Liste à puces",
"notes.numbered": "Liste numérotée",
"notes.quote": "Citation",
"notes.divider": "Séparateur",
"notes.checkbox_title": "Case à cocher", "notes.checkbox_title": "Case à cocher",
"notes.checkbox_aria": "Élément de liste à cocher", "notes.checkbox_aria": "Élément de liste à cocher",
"notes.enhance": "Enrichir",
"notes.enhancing": "Enrichissement…",
"notes.enhance_title": "Développer ces notes en Markdown structuré à partir de la transcription (IA)",
"notes.enhanced_note": "Notes enrichies à partir de la transcription.",
"notes.undo_enhance": "Annuler",
"notes.edit_raw": "Modifier le markdown brut", "notes.edit_raw": "Modifier le markdown brut",
"notes.render": "Afficher le markdown", "notes.render": "Afficher le markdown",
"notes.editor": "Éditeur", "notes.editor": "Éditeur",
@@ -527,5 +580,9 @@
"settings.recording.consent_ack": "accepté", "settings.recording.consent_ack": "accepté",
"settings.recording.consent_not": "pas encore accepté", "settings.recording.consent_not": "pas encore accepté",
"settings.recording.auto_label": "Démarrer automatiquement l'enregistrement au début d'un événement du calendrier", "settings.recording.auto_label": "Démarrer automatiquement l'enregistrement au début d'un événement du calendrier",
"settings.recording.auto_hint": "Uniquement lorsque WhispAssist est ouvert. Lorsque l'heure de début d'un événement de calendrier importé arrive, un enregistrement commence automatiquement (en utilisant votre réglage de conservation par défaut ci-dessus). Rien ne s'exécute en arrière-plan — la minuterie n'est armée que pendant que l'application est en cours d'exécution. Importez des événements sous Paramètres → Calendrier." "settings.recording.auto_hint": "Uniquement lorsque WhispAssist est ouvert. Lorsque l'heure de début d'un événement de calendrier importé arrive, un enregistrement commence automatiquement (en utilisant votre réglage de conservation par défaut ci-dessus). Rien ne s'exécute en arrière-plan — la minuterie n'est armée que pendant que l'application est en cours d'exécution. Importez des événements sous Paramètres → Calendrier.",
"settings.recording.autostart_label": "Lancer WhispAssist à l'ouverture de session",
"settings.recording.autostart_hint": "Démarre WhispAssist automatiquement à l'ouverture de session Windows. Désactivé par défaut; installe une entrée de démarrage par utilisateur (aucun droit administrateur requis) et ne commence jamais à enregistrer de lui-même.",
"settings.recording.close_tray_label": "Fermer vers la zone de notification",
"settings.recording.close_tray_hint": "Fermer la fenêtre laisse WhispAssist tourner en arrière-plan au lieu de quitter. Rouvrez-le depuis l'icône de la zone de notification; utilisez Quitter dans son menu pour fermer complètement. Activé par défaut."
} }
+61 -4
View File
@@ -24,6 +24,25 @@
"settings.transcription.switch_multilingual": "Passez à un modèle multilingue ci-dessus pour choisir une langue.", "settings.transcription.switch_multilingual": "Passez à un modèle multilingue ci-dessus pour choisir une langue.",
"settings.hardware.title": "Matériel", "settings.hardware.title": "Matériel",
"settings.hardware.refresh": "Actualiser",
"settings.hardware.test_output": "Tester",
"settings.hardware.test_mic": "Tester",
"settings.hardware.testing": "Écoute…",
"settings.hardware.play_tone": "Jouer un son",
"settings.hardware.stress_title": "Test de charge rapide",
"settings.hardware.stress_hint": "Évalue les modèles installés sur chaque backend disponible et recommande le plus précis qui suit la parole en direct. Prend un instant.",
"settings.hardware.stress_run": "Lancer le test",
"settings.hardware.stress_running": "En cours…",
"settings.hardware.stress_progress": "Évaluation de {pair}…",
"settings.hardware.stress_recommend": "Recommandé : {backend} + {model}",
"settings.hardware.stress_apply": "Appliquer",
"settings.hardware.stress_none": "Aucun modèle installé ne suit la parole en direct sur ce matériel — essayez un modèle plus petit.",
"settings.hardware.stress_backend": "Backend",
"settings.hardware.stress_model": "Modèle",
"settings.hardware.stress_rtf": "Vitesse (×temps réel)",
"settings.hardware.stress_realtime": "En direct ?",
"settings.hardware.stress_yes": "Oui",
"settings.hardware.stress_no": "Non",
"settings.hardware.active_backend": "Backend actif", "settings.hardware.active_backend": "Backend actif",
"settings.hardware.model_meta": "· modèle {size}", "settings.hardware.model_meta": "· modèle {size}",
"settings.hardware.preferred_backend": "Backend préféré", "settings.hardware.preferred_backend": "Backend préféré",
@@ -56,6 +75,9 @@
"settings.hardware.downloading_model": "Téléchargement de {name}", "settings.hardware.downloading_model": "Téléchargement de {name}",
"settings.hardware.active_badge": "Actif", "settings.hardware.active_badge": "Actif",
"settings.hardware.installed": "Installé", "settings.hardware.installed": "Installé",
"settings.hardware.quantization_for": "Quantification de {name}",
"settings.hardware.quant_recommended": "{quant} · recommandé",
"settings.hardware.quant_higher": "{quant} · meilleure qualité, plus volumineux",
"settings.hardware.use": "Utiliser", "settings.hardware.use": "Utiliser",
"settings.hardware.remove": "Supprimer", "settings.hardware.remove": "Supprimer",
"settings.hardware.cant_remove_active": "Impossible de supprimer le modèle actif", "settings.hardware.cant_remove_active": "Impossible de supprimer le modèle actif",
@@ -88,6 +110,7 @@
"settings.calendar.title": "Calendrier et Outlook .pst", "settings.calendar.title": "Calendrier et Outlook .pst",
"settings.calendar.intro_1": "Importez des événements et des participants depuis une sauvegarde Outlook locale", "settings.calendar.intro_1": "Importez des événements et des participants depuis une sauvegarde Outlook locale",
"settings.calendar.intro_2": "— en lecture seule, rien n'est réécrit dans le fichier. Rien ne quitte cet appareil.", "settings.calendar.intro_2": "— en lecture seule, rien n'est réécrit dans le fichier. Rien ne quitte cet appareil.",
"settings.calendar.requires": "Nécessite ceci dans votre PATH (non fourni) :",
"settings.calendar.pst_file": "Fichier .pst", "settings.calendar.pst_file": "Fichier .pst",
"settings.calendar.no_file": "Aucun fichier sélectionné", "settings.calendar.no_file": "Aucun fichier sélectionné",
"settings.calendar.browse": "Parcourir…", "settings.calendar.browse": "Parcourir…",
@@ -278,6 +301,7 @@
"settings.privacy.locked_word": "verrouillé", "settings.privacy.locked_word": "verrouillé",
"settings.privacy.vault_locked_2": ". Déverrouillez pour lire les réunions chiffrées.", "settings.privacy.vault_locked_2": ". Déverrouillez pour lire les réunions chiffrées.",
"settings.privacy.password": "Mot de passe", "settings.privacy.password": "Mot de passe",
"settings.privacy.show_password": "Afficher le mot de passe",
"settings.privacy.unlock": "Déverrouiller", "settings.privacy.unlock": "Déverrouiller",
"settings.privacy.vault_unlocked_1": "Le coffre est ", "settings.privacy.vault_unlocked_1": "Le coffre est ",
"settings.privacy.unlocked_word": "déverrouillé", "settings.privacy.unlocked_word": "déverrouillé",
@@ -320,12 +344,23 @@
"import.optional": "facultatif", "import.optional": "facultatif",
"import.title_placeholder": "Par défaut, le nom du fichier", "import.title_placeholder": "Par défaut, le nom du fichier",
"import.filter_av": "Audio / vidéo", "import.filter_av": "Audio / vidéo",
"import.requires_1": "Nécessite", "import.model_label": "Modèle de transcription",
"import.requires_2": "installé et dans votre PATH (plus", "import.model_hint": "Enregistré avec la réunion pour voir comment elle a été transcrite.",
"import.requires_3": "pour les URL). WhispAssist ne les inclut pas.", "import.requires": "Nécessite ceux-ci dans votre PATH (non fournis) :",
"import.background_note": "S'exécute en arrière-plan — suivez-le dans la liste.",
"import.importing": "Importation… cela peut prendre un moment", "import.importing": "Importation… cela peut prendre un moment",
"import.import": "Importer", "import.import": "Importer",
"import.cancel": "Annuler", "import.cancel": "Annuler",
"import.tracker.label": "Progression de l'import",
"import.tracker.running": "Import en cours…",
"import.tracker.done": "Import terminé",
"import.tracker.failed": "Échec de l'import",
"import.tracker.working": "en cours…",
"import.tracker.stopped": "arrêté",
"import.phase.prepare": "Transcodage",
"import.phase.transcribe": "Transcription",
"import.phase.diarize": "Identification des locuteurs",
"import.phase.finalize": "Finalisation",
"tagchip.filter": "Filtrer les réunions marquées « {tag} »", "tagchip.filter": "Filtrer les réunions marquées « {tag} »",
"tagchip.remove": "Supprimer l'étiquette {tag}", "tagchip.remove": "Supprimer l'étiquette {tag}",
@@ -345,6 +380,10 @@
"app.cancel": "Annuler", "app.cancel": "Annuler",
"app.cancel_title": "Abandonner cet enregistrement et le supprimer", "app.cancel_title": "Abandonner cet enregistrement et le supprimer",
"app.recording": "Enregistrement…", "app.recording": "Enregistrement…",
"app.mute": "Couper le micro",
"app.unmute": "Réactiver le micro",
"app.mute_title": "Couper le micro (M)",
"app.unmute_title": "Réactiver le micro (M)",
"app.backend_title": "Backend de transcription actif", "app.backend_title": "Backend de transcription actif",
"app.retention_title": "Enregistrer l'audio en .wav pour cette réunion", "app.retention_title": "Enregistrer l'audio en .wav pour cette réunion",
"app.saving": "enregistrement", "app.saving": "enregistrement",
@@ -393,10 +432,15 @@
"meetings.status.error": "erreur", "meetings.status.error": "erreur",
"meetings.resume": "Reprendre la transcription", "meetings.resume": "Reprendre la transcription",
"meetings.delete_aria": "Supprimer la réunion", "meetings.delete_aria": "Supprimer la réunion",
"meetings.not_encrypted": "Non chiffré",
"meetings.encrypt": "Chiffrer",
"meetings.encrypting": "Chiffrement…",
"meetings.encrypt_title": "Chiffrer les fichiers de cette réunion avec le coffre",
"meetings.delete_confirm": "Supprimer cette réunion ? Cela supprime son enregistrement, sa transcription et ses notes.", "meetings.delete_confirm": "Supprimer cette réunion ? Cela supprime son enregistrement, sa transcription et ses notes.",
"transcript.heading": "Transcription", "transcript.heading": "Transcription",
"transcript.title_aria": "Titre de la réunion", "transcript.title_aria": "Titre de la réunion",
"transcript.transcribed_with": "Transcrit avec",
"transcript.lang_title": "Langue de transcription", "transcript.lang_title": "Langue de transcription",
"transcript.lang_auto": "détection en cours…", "transcript.lang_auto": "détection en cours…",
"transcript.show": "Afficher la transcription", "transcript.show": "Afficher la transcription",
@@ -428,9 +472,18 @@
"notes.italic": "Italique", "notes.italic": "Italique",
"notes.h1": "Titre 1", "notes.h1": "Titre 1",
"notes.h2": "Titre 2", "notes.h2": "Titre 2",
"notes.h3": "Titre 3",
"notes.bullet": "Liste à puces", "notes.bullet": "Liste à puces",
"notes.numbered": "Liste numérotée",
"notes.quote": "Citation",
"notes.divider": "Séparateur",
"notes.checkbox_title": "Case à cocher", "notes.checkbox_title": "Case à cocher",
"notes.checkbox_aria": "Élément de liste à cocher", "notes.checkbox_aria": "Élément de liste à cocher",
"notes.enhance": "Enrichir",
"notes.enhancing": "Enrichissement…",
"notes.enhance_title": "Développer ces notes en Markdown structuré à partir de la transcription (IA)",
"notes.enhanced_note": "Notes enrichies à partir de la transcription.",
"notes.undo_enhance": "Annuler",
"notes.edit_raw": "Modifier le markdown brut", "notes.edit_raw": "Modifier le markdown brut",
"notes.render": "Afficher le markdown", "notes.render": "Afficher le markdown",
"notes.editor": "Éditeur", "notes.editor": "Éditeur",
@@ -527,5 +580,9 @@
"settings.recording.consent_ack": "accepté", "settings.recording.consent_ack": "accepté",
"settings.recording.consent_not": "pas encore accepté", "settings.recording.consent_not": "pas encore accepté",
"settings.recording.auto_label": "Démarrer automatiquement l'enregistrement au début d'un événement du calendrier", "settings.recording.auto_label": "Démarrer automatiquement l'enregistrement au début d'un événement du calendrier",
"settings.recording.auto_hint": "Uniquement lorsque WhispAssist est ouvert. Lorsque l'heure de début d'un événement de calendrier importé arrive, un enregistrement commence automatiquement (en utilisant votre réglage de conservation par défaut ci-dessus). Rien ne s'exécute en arrière-plan — la minuterie n'est armée que pendant que l'application est en cours d'exécution. Importez des événements sous Paramètres → Calendrier." "settings.recording.auto_hint": "Uniquement lorsque WhispAssist est ouvert. Lorsque l'heure de début d'un événement de calendrier importé arrive, un enregistrement commence automatiquement (en utilisant votre réglage de conservation par défaut ci-dessus). Rien ne s'exécute en arrière-plan — la minuterie n'est armée que pendant que l'application est en cours d'exécution. Importez des événements sous Paramètres → Calendrier.",
"settings.recording.autostart_label": "Lancer WhispAssist à la connexion",
"settings.recording.autostart_hint": "Démarre WhispAssist automatiquement à l'ouverture de session Windows. Désactivé par défaut ; installe une entrée de démarrage par utilisateur (aucun droit administrateur requis) et ne commence jamais à enregistrer de lui-même.",
"settings.recording.close_tray_label": "Fermer vers la zone de notification",
"settings.recording.close_tray_hint": "Fermer la fenêtre laisse WhispAssist tourner en arrière-plan au lieu de quitter. Rouvrez-le depuis l'icône de la zone de notification ; utilisez Quitter dans son menu pour fermer complètement. Activé par défaut."
} }
+61 -4
View File
@@ -24,6 +24,25 @@
"settings.transcription.switch_multilingual": "भाषा चुनने के लिए ऊपर किसी बहुभाषी मॉडल पर स्विच करें।", "settings.transcription.switch_multilingual": "भाषा चुनने के लिए ऊपर किसी बहुभाषी मॉडल पर स्विच करें।",
"settings.hardware.title": "हार्डवेयर", "settings.hardware.title": "हार्डवेयर",
"settings.hardware.refresh": "रीफ़्रेश करें",
"settings.hardware.test_output": "परखें",
"settings.hardware.test_mic": "परखें",
"settings.hardware.testing": "सुन रहा है…",
"settings.hardware.play_tone": "टोन बजाएँ",
"settings.hardware.stress_title": "त्वरित स्ट्रेस टेस्ट",
"settings.hardware.stress_hint": "इंस्टॉल किए गए मॉडलों को हर उपलब्ध बैकएंड पर बेंचमार्क करता है और सबसे सटीक मॉडल सुझाता है जो लाइव बोलचाल की रफ़्तार बनाए रखे। इसमें थोड़ा समय लगता है।",
"settings.hardware.stress_run": "स्ट्रेस टेस्ट चलाएँ",
"settings.hardware.stress_running": "चल रहा है…",
"settings.hardware.stress_progress": "{pair} का बेंचमार्क हो रहा है…",
"settings.hardware.stress_recommend": "अनुशंसित: {backend} + {model}",
"settings.hardware.stress_apply": "लागू करें",
"settings.hardware.stress_none": "इस हार्डवेयर पर कोई भी इंस्टॉल किया गया मॉडल लाइव बोलचाल की रफ़्तार नहीं बनाए रख पाता — कोई छोटा मॉडल आज़माएँ।",
"settings.hardware.stress_backend": "बैकएंड",
"settings.hardware.stress_model": "मॉडल",
"settings.hardware.stress_rtf": "गति (×रियल-टाइम)",
"settings.hardware.stress_realtime": "लाइव?",
"settings.hardware.stress_yes": "हाँ",
"settings.hardware.stress_no": "नहीं",
"settings.hardware.active_backend": "सक्रिय बैकएंड", "settings.hardware.active_backend": "सक्रिय बैकएंड",
"settings.hardware.model_meta": "· मॉडल {size}", "settings.hardware.model_meta": "· मॉडल {size}",
"settings.hardware.preferred_backend": "पसंदीदा बैकएंड", "settings.hardware.preferred_backend": "पसंदीदा बैकएंड",
@@ -56,6 +75,9 @@
"settings.hardware.downloading_model": "{name} डाउनलोड हो रहा है", "settings.hardware.downloading_model": "{name} डाउनलोड हो रहा है",
"settings.hardware.active_badge": "सक्रिय", "settings.hardware.active_badge": "सक्रिय",
"settings.hardware.installed": "इंस्टॉल किया गया", "settings.hardware.installed": "इंस्टॉल किया गया",
"settings.hardware.quantization_for": "{name} के लिए क्वांटाइज़ेशन",
"settings.hardware.quant_recommended": "{quant} · अनुशंसित",
"settings.hardware.quant_higher": "{quant} · बेहतर गुणवत्ता, बड़ा",
"settings.hardware.use": "उपयोग करें", "settings.hardware.use": "उपयोग करें",
"settings.hardware.remove": "हटाएँ", "settings.hardware.remove": "हटाएँ",
"settings.hardware.cant_remove_active": "सक्रिय मॉडल को नहीं हटाया जा सकता", "settings.hardware.cant_remove_active": "सक्रिय मॉडल को नहीं हटाया जा सकता",
@@ -88,6 +110,7 @@
"settings.calendar.title": "कैलेंडर और Outlook .pst", "settings.calendar.title": "कैलेंडर और Outlook .pst",
"settings.calendar.intro_1": "किसी स्थानीय Outlook बैकअप से ईवेंट और उपस्थित लोगों को आयात करें", "settings.calendar.intro_1": "किसी स्थानीय Outlook बैकअप से ईवेंट और उपस्थित लोगों को आयात करें",
"settings.calendar.intro_2": "— केवल पढ़ने योग्य, फ़ाइल में कुछ भी वापस नहीं लिखा जाता। इस डिवाइस से कुछ भी बाहर नहीं जाता।", "settings.calendar.intro_2": "— केवल पढ़ने योग्य, फ़ाइल में कुछ भी वापस नहीं लिखा जाता। इस डिवाइस से कुछ भी बाहर नहीं जाता।",
"settings.calendar.requires": "आपके PATH में यह होना ज़रूरी है (साथ में शामिल नहीं):",
"settings.calendar.pst_file": ".pst फ़ाइल", "settings.calendar.pst_file": ".pst फ़ाइल",
"settings.calendar.no_file": "कोई फ़ाइल चयनित नहीं", "settings.calendar.no_file": "कोई फ़ाइल चयनित नहीं",
"settings.calendar.browse": "ब्राउज़ करें…", "settings.calendar.browse": "ब्राउज़ करें…",
@@ -278,6 +301,7 @@
"settings.privacy.locked_word": "लॉक", "settings.privacy.locked_word": "लॉक",
"settings.privacy.vault_locked_2": " है। एन्क्रिप्ट की गई मीटिंग पढ़ने के लिए अनलॉक करें।", "settings.privacy.vault_locked_2": " है। एन्क्रिप्ट की गई मीटिंग पढ़ने के लिए अनलॉक करें।",
"settings.privacy.password": "पासवर्ड", "settings.privacy.password": "पासवर्ड",
"settings.privacy.show_password": "पासवर्ड दिखाएँ",
"settings.privacy.unlock": "अनलॉक करें", "settings.privacy.unlock": "अनलॉक करें",
"settings.privacy.vault_unlocked_1": "वॉल्ट ", "settings.privacy.vault_unlocked_1": "वॉल्ट ",
"settings.privacy.unlocked_word": "अनलॉक", "settings.privacy.unlocked_word": "अनलॉक",
@@ -320,12 +344,23 @@
"import.optional": "वैकल्पिक", "import.optional": "वैकल्पिक",
"import.title_placeholder": "डिफ़ॉल्ट रूप से फ़ाइल का नाम", "import.title_placeholder": "डिफ़ॉल्ट रूप से फ़ाइल का नाम",
"import.filter_av": "ऑडियो / वीडियो", "import.filter_av": "ऑडियो / वीडियो",
"import.requires_1": "आवश्यक है", "import.model_label": "ट्रांसक्रिप्शन मॉडल",
"import.requires_2": "इंस्टॉल किया गया और आपके PATH में (साथ ही", "import.model_hint": "मीटिंग के साथ दर्ज होता है ताकि आप देख सकें कि ट्रांसक्रिप्शन किससे हुआ।",
"import.requires_3": "URL के लिए)। WhispAssist उन्हें बंडल नहीं करता।", "import.requires": "आपके PATH में ये होने ज़रूरी हैं (साथ में शामिल नहीं):",
"import.background_note": "बैकग्राउंड में चलता है — सूची में इसकी प्रगति देखें।",
"import.importing": "आयात हो रहा है… इसमें कुछ समय लग सकता है", "import.importing": "आयात हो रहा है… इसमें कुछ समय लग सकता है",
"import.import": "आयात करें", "import.import": "आयात करें",
"import.cancel": "रद्द करें", "import.cancel": "रद्द करें",
"import.tracker.label": "आयात प्रगति",
"import.tracker.running": "आयात हो रहा है…",
"import.tracker.done": "आयात पूर्ण",
"import.tracker.failed": "आयात विफल",
"import.tracker.working": "काम जारी…",
"import.tracker.stopped": "रोका गया",
"import.phase.prepare": "ट्रांसकोड",
"import.phase.transcribe": "ट्रांसक्राइब",
"import.phase.diarize": "वक्ताओं की पहचान",
"import.phase.finalize": "अंतिम रूप देना",
"tagchip.filter": "“{tag}” टैग वाली मीटिंग फ़िल्टर करें", "tagchip.filter": "“{tag}” टैग वाली मीटिंग फ़िल्टर करें",
"tagchip.remove": "टैग {tag} हटाएँ", "tagchip.remove": "टैग {tag} हटाएँ",
@@ -345,6 +380,10 @@
"app.cancel": "रद्द करें", "app.cancel": "रद्द करें",
"app.cancel_title": "इस रिकॉर्डिंग को छोड़ें और हटाएँ", "app.cancel_title": "इस रिकॉर्डिंग को छोड़ें और हटाएँ",
"app.recording": "रिकॉर्ड हो रहा है…", "app.recording": "रिकॉर्ड हो रहा है…",
"app.mute": "माइक्रोफ़ोन म्यूट करें",
"app.unmute": "माइक्रोफ़ोन अनम्यूट करें",
"app.mute_title": "माइक्रोफ़ोन म्यूट करें (M)",
"app.unmute_title": "माइक्रोफ़ोन अनम्यूट करें (M)",
"app.backend_title": "सक्रिय ट्रांसक्रिप्शन बैकएंड", "app.backend_title": "सक्रिय ट्रांसक्रिप्शन बैकएंड",
"app.retention_title": "इस मीटिंग के लिए ऑडियो को .wav के रूप में सहेजें", "app.retention_title": "इस मीटिंग के लिए ऑडियो को .wav के रूप में सहेजें",
"app.saving": "सहेजा जा रहा है", "app.saving": "सहेजा जा रहा है",
@@ -393,10 +432,15 @@
"meetings.status.error": "त्रुटि", "meetings.status.error": "त्रुटि",
"meetings.resume": "ट्रांसक्रिप्शन फिर से शुरू करें", "meetings.resume": "ट्रांसक्रिप्शन फिर से शुरू करें",
"meetings.delete_aria": "मीटिंग हटाएँ", "meetings.delete_aria": "मीटिंग हटाएँ",
"meetings.not_encrypted": "एन्क्रिप्ट नहीं है",
"meetings.encrypt": "एन्क्रिप्ट करें",
"meetings.encrypting": "एन्क्रिप्ट हो रहा है…",
"meetings.encrypt_title": "इस मीटिंग की फ़ाइलें वॉल्ट से एन्क्रिप्ट करें",
"meetings.delete_confirm": "इस मीटिंग को हटाएँ? यह इसकी रिकॉर्डिंग, ट्रांसक्रिप्ट और नोट्स हटा देता है।", "meetings.delete_confirm": "इस मीटिंग को हटाएँ? यह इसकी रिकॉर्डिंग, ट्रांसक्रिप्ट और नोट्स हटा देता है।",
"transcript.heading": "ट्रांसक्रिप्ट", "transcript.heading": "ट्रांसक्रिप्ट",
"transcript.title_aria": "मीटिंग शीर्षक", "transcript.title_aria": "मीटिंग शीर्षक",
"transcript.transcribed_with": "इससे ट्रांसक्राइब किया गया:",
"transcript.lang_title": "ट्रांसक्रिप्शन भाषा", "transcript.lang_title": "ट्रांसक्रिप्शन भाषा",
"transcript.lang_auto": "पहचान हो रही है…", "transcript.lang_auto": "पहचान हो रही है…",
"transcript.show": "ट्रांसक्रिप्ट दिखाएँ", "transcript.show": "ट्रांसक्रिप्ट दिखाएँ",
@@ -428,9 +472,18 @@
"notes.italic": "इटैलिक", "notes.italic": "इटैलिक",
"notes.h1": "शीर्षक 1", "notes.h1": "शीर्षक 1",
"notes.h2": "शीर्षक 2", "notes.h2": "शीर्षक 2",
"notes.h3": "शीर्षक 3",
"notes.bullet": "बुलेट सूची", "notes.bullet": "बुलेट सूची",
"notes.numbered": "क्रमांकित सूची",
"notes.quote": "उद्धरण",
"notes.divider": "विभाजक",
"notes.checkbox_title": "चेकबॉक्स", "notes.checkbox_title": "चेकबॉक्स",
"notes.checkbox_aria": "चेकबॉक्स सूची आइटम", "notes.checkbox_aria": "चेकबॉक्स सूची आइटम",
"notes.enhance": "बेहतर बनाएँ",
"notes.enhancing": "बेहतर बनाया जा रहा है…",
"notes.enhance_title": "ट्रांसक्रिप्ट की मदद से इन नोट्स को संरचित Markdown में विस्तारित करें (AI)",
"notes.enhanced_note": "ट्रांसक्रिप्ट से नोट्स बेहतर बनाए गए।",
"notes.undo_enhance": "पूर्ववत करें",
"notes.edit_raw": "कच्चा markdown संपादित करें", "notes.edit_raw": "कच्चा markdown संपादित करें",
"notes.render": "markdown रेंडर करें", "notes.render": "markdown रेंडर करें",
"notes.editor": "संपादक", "notes.editor": "संपादक",
@@ -527,5 +580,9 @@
"settings.recording.consent_ack": "स्वीकृत", "settings.recording.consent_ack": "स्वीकृत",
"settings.recording.consent_not": "अभी तक स्वीकृत नहीं", "settings.recording.consent_not": "अभी तक स्वीकृत नहीं",
"settings.recording.auto_label": "जब कोई कैलेंडर ईवेंट शुरू होता है तो स्वचालित रूप से रिकॉर्डिंग शुरू करें", "settings.recording.auto_label": "जब कोई कैलेंडर ईवेंट शुरू होता है तो स्वचालित रूप से रिकॉर्डिंग शुरू करें",
"settings.recording.auto_hint": "केवल जब WhispAssist खुला हो। जब किसी आयातित कैलेंडर ईवेंट का प्रारंभ समय आता है, तो रिकॉर्डिंग स्वचालित रूप से शुरू होती है (ऊपर की आपकी डिफ़ॉल्ट प्रतिधारण सेटिंग का उपयोग करते हुए)। पृष्ठभूमि में कुछ नहीं चलता — टाइमर केवल तब सक्रिय होता है जब ऐप चल रहा हो। सेटिंग्स → कैलेंडर के अंतर्गत ईवेंट आयात करें।" "settings.recording.auto_hint": "केवल जब WhispAssist खुला हो। जब किसी आयातित कैलेंडर ईवेंट का प्रारंभ समय आता है, तो रिकॉर्डिंग स्वचालित रूप से शुरू होती है (ऊपर की आपकी डिफ़ॉल्ट प्रतिधारण सेटिंग का उपयोग करते हुए)। पृष्ठभूमि में कुछ नहीं चलता — टाइमर केवल तब सक्रिय होता है जब ऐप चल रहा हो। सेटिंग्स → कैलेंडर के अंतर्गत ईवेंट आयात करें।",
"settings.recording.autostart_label": "लॉगिन पर WhispAssist शुरू करें",
"settings.recording.autostart_hint": "Windows में साइन इन करते ही WhispAssist अपने आप शुरू हो जाता है। डिफ़ॉल्ट रूप से बंद; प्रति-उपयोगकर्ता स्टार्टअप प्रविष्टि जोड़ता है (एडमिन की ज़रूरत नहीं) और अपने आप रिकॉर्डिंग शुरू नहीं करता।",
"settings.recording.close_tray_label": "सिस्टम ट्रे में बंद करें",
"settings.recording.close_tray_hint": "विंडो बंद करने पर WhispAssist बंद होने के बजाय बैकग्राउंड में चलता रहता है। ट्रे आइकन से दोबारा खोलें; पूरी तरह बंद करने के लिए ट्रे का 'बाहर निकलें' उपयोग करें। डिफ़ॉल्ट रूप से चालू।"
} }
+61 -4
View File
@@ -24,6 +24,25 @@
"settings.transcription.switch_multilingual": "언어를 선택하려면 위에서 다국어 모델로 전환하세요.", "settings.transcription.switch_multilingual": "언어를 선택하려면 위에서 다국어 모델로 전환하세요.",
"settings.hardware.title": "하드웨어", "settings.hardware.title": "하드웨어",
"settings.hardware.refresh": "새로 고침",
"settings.hardware.test_output": "테스트",
"settings.hardware.test_mic": "테스트",
"settings.hardware.testing": "듣는 중…",
"settings.hardware.play_tone": "테스트 음 재생",
"settings.hardware.stress_title": "빠른 스트레스 테스트",
"settings.hardware.stress_hint": "설치된 모델을 사용 가능한 각 백엔드에서 벤치마크하고, 실시간 음성을 따라가면서 가장 정확한 모델을 추천합니다. 잠시 걸립니다.",
"settings.hardware.stress_run": "스트레스 테스트 실행",
"settings.hardware.stress_running": "실행 중…",
"settings.hardware.stress_progress": "{pair} 벤치마크 중…",
"settings.hardware.stress_recommend": "추천: {backend} + {model}",
"settings.hardware.stress_apply": "적용",
"settings.hardware.stress_none": "이 하드웨어에서 실시간 음성을 따라가는 설치된 모델이 없습니다. 더 작은 모델을 사용해 보세요.",
"settings.hardware.stress_backend": "백엔드",
"settings.hardware.stress_model": "모델",
"settings.hardware.stress_rtf": "속도 (×실시간)",
"settings.hardware.stress_realtime": "실시간?",
"settings.hardware.stress_yes": "예",
"settings.hardware.stress_no": "아니요",
"settings.hardware.active_backend": "활성 백엔드", "settings.hardware.active_backend": "활성 백엔드",
"settings.hardware.model_meta": "· 모델 {size}", "settings.hardware.model_meta": "· 모델 {size}",
"settings.hardware.preferred_backend": "선호 백엔드", "settings.hardware.preferred_backend": "선호 백엔드",
@@ -56,6 +75,9 @@
"settings.hardware.downloading_model": "{name} 다운로드 중", "settings.hardware.downloading_model": "{name} 다운로드 중",
"settings.hardware.active_badge": "활성", "settings.hardware.active_badge": "활성",
"settings.hardware.installed": "설치됨", "settings.hardware.installed": "설치됨",
"settings.hardware.quantization_for": "{name} 양자화",
"settings.hardware.quant_recommended": "{quant} · 권장",
"settings.hardware.quant_higher": "{quant} · 더 높은 품질, 더 큼",
"settings.hardware.use": "사용", "settings.hardware.use": "사용",
"settings.hardware.remove": "제거", "settings.hardware.remove": "제거",
"settings.hardware.cant_remove_active": "활성 모델은 제거할 수 없습니다", "settings.hardware.cant_remove_active": "활성 모델은 제거할 수 없습니다",
@@ -88,6 +110,7 @@
"settings.calendar.title": "캘린더 및 Outlook .pst", "settings.calendar.title": "캘린더 및 Outlook .pst",
"settings.calendar.intro_1": "로컬 Outlook 백업에서 이벤트와 참석자를 가져옵니다", "settings.calendar.intro_1": "로컬 Outlook 백업에서 이벤트와 참석자를 가져옵니다",
"settings.calendar.intro_2": "— 읽기 전용이며 파일에 아무것도 다시 쓰지 않습니다. 이 장치를 벗어나는 것은 없습니다.", "settings.calendar.intro_2": "— 읽기 전용이며 파일에 아무것도 다시 쓰지 않습니다. 이 장치를 벗어나는 것은 없습니다.",
"settings.calendar.requires": "PATH에 다음이 필요합니다(포함되어 있지 않음):",
"settings.calendar.pst_file": ".pst 파일", "settings.calendar.pst_file": ".pst 파일",
"settings.calendar.no_file": "선택된 파일 없음", "settings.calendar.no_file": "선택된 파일 없음",
"settings.calendar.browse": "찾아보기…", "settings.calendar.browse": "찾아보기…",
@@ -278,6 +301,7 @@
"settings.privacy.locked_word": "잠김", "settings.privacy.locked_word": "잠김",
"settings.privacy.vault_locked_2": " 상태입니다. 암호화된 회의를 읽으려면 잠금을 해제하세요.", "settings.privacy.vault_locked_2": " 상태입니다. 암호화된 회의를 읽으려면 잠금을 해제하세요.",
"settings.privacy.password": "비밀번호", "settings.privacy.password": "비밀번호",
"settings.privacy.show_password": "비밀번호 표시",
"settings.privacy.unlock": "잠금 해제", "settings.privacy.unlock": "잠금 해제",
"settings.privacy.vault_unlocked_1": "보관소가 ", "settings.privacy.vault_unlocked_1": "보관소가 ",
"settings.privacy.unlocked_word": "잠금 해제됨", "settings.privacy.unlocked_word": "잠금 해제됨",
@@ -320,12 +344,23 @@
"import.optional": "선택 사항", "import.optional": "선택 사항",
"import.title_placeholder": "기본값은 파일 이름", "import.title_placeholder": "기본값은 파일 이름",
"import.filter_av": "오디오 / 비디오", "import.filter_av": "오디오 / 비디오",
"import.requires_1": "다음이 필요합니다:", "import.model_label": "전사 모델",
"import.requires_2": "이(가) 설치되어 PATH에 있어야 합니다(URL의 경우", "import.model_hint": "회의와 함께 기록되어 어떤 모델로 전사되었는지 확인할 수 있습니다.",
"import.requires_3": "도 필요). WhispAssist는 이들을 포함하지 않습니다.", "import.requires": "PATH에 다음이 필요합니다(포함되어 있지 않음):",
"import.background_note": "백그라운드에서 실행됩니다. 목록에서 진행 상황을 확인하세요.",
"import.importing": "가져오는 중… 시간이 걸릴 수 있습니다", "import.importing": "가져오는 중… 시간이 걸릴 수 있습니다",
"import.import": "가져오기", "import.import": "가져오기",
"import.cancel": "취소", "import.cancel": "취소",
"import.tracker.label": "가져오기 진행 상황",
"import.tracker.running": "가져오는 중…",
"import.tracker.done": "가져오기 완료",
"import.tracker.failed": "가져오기 실패",
"import.tracker.working": "작업 중…",
"import.tracker.stopped": "중지됨",
"import.phase.prepare": "트랜스코딩",
"import.phase.transcribe": "전사",
"import.phase.diarize": "화자 식별",
"import.phase.finalize": "마무리",
"tagchip.filter": "“{tag}” 태그가 지정된 회의 필터링", "tagchip.filter": "“{tag}” 태그가 지정된 회의 필터링",
"tagchip.remove": "{tag} 태그 제거", "tagchip.remove": "{tag} 태그 제거",
@@ -345,6 +380,10 @@
"app.cancel": "취소", "app.cancel": "취소",
"app.cancel_title": "이 녹음을 취소하고 삭제", "app.cancel_title": "이 녹음을 취소하고 삭제",
"app.recording": "녹음 중…", "app.recording": "녹음 중…",
"app.mute": "마이크 음소거",
"app.unmute": "마이크 음소거 해제",
"app.mute_title": "마이크 음소거 (M)",
"app.unmute_title": "마이크 음소거 해제 (M)",
"app.backend_title": "활성 전사 백엔드", "app.backend_title": "활성 전사 백엔드",
"app.retention_title": "이 회의의 오디오를 .wav로 저장", "app.retention_title": "이 회의의 오디오를 .wav로 저장",
"app.saving": "저장 중", "app.saving": "저장 중",
@@ -393,10 +432,15 @@
"meetings.status.error": "오류", "meetings.status.error": "오류",
"meetings.resume": "전사 재개", "meetings.resume": "전사 재개",
"meetings.delete_aria": "회의 삭제", "meetings.delete_aria": "회의 삭제",
"meetings.not_encrypted": "암호화되지 않음",
"meetings.encrypt": "암호화",
"meetings.encrypting": "암호화 중…",
"meetings.encrypt_title": "볼트로 이 회의의 파일을 암호화",
"meetings.delete_confirm": "이 회의를 삭제하시겠습니까? 녹음, 전사, 노트가 제거됩니다.", "meetings.delete_confirm": "이 회의를 삭제하시겠습니까? 녹음, 전사, 노트가 제거됩니다.",
"transcript.heading": "전사", "transcript.heading": "전사",
"transcript.title_aria": "회의 제목", "transcript.title_aria": "회의 제목",
"transcript.transcribed_with": "전사에 사용된 모델:",
"transcript.lang_title": "전사 언어", "transcript.lang_title": "전사 언어",
"transcript.lang_auto": "감지 중…", "transcript.lang_auto": "감지 중…",
"transcript.show": "전사 표시", "transcript.show": "전사 표시",
@@ -428,9 +472,18 @@
"notes.italic": "기울임꼴", "notes.italic": "기울임꼴",
"notes.h1": "제목 1", "notes.h1": "제목 1",
"notes.h2": "제목 2", "notes.h2": "제목 2",
"notes.h3": "제목 3",
"notes.bullet": "글머리 기호 목록", "notes.bullet": "글머리 기호 목록",
"notes.numbered": "번호 매기기 목록",
"notes.quote": "인용",
"notes.divider": "구분선",
"notes.checkbox_title": "체크박스", "notes.checkbox_title": "체크박스",
"notes.checkbox_aria": "체크박스 목록 항목", "notes.checkbox_aria": "체크박스 목록 항목",
"notes.enhance": "향상",
"notes.enhancing": "향상 중…",
"notes.enhance_title": "전사 내용을 바탕으로 이 메모를 구조화된 Markdown으로 확장 (AI)",
"notes.enhanced_note": "전사 내용을 바탕으로 메모를 향상했습니다.",
"notes.undo_enhance": "실행 취소",
"notes.edit_raw": "원본 markdown 편집", "notes.edit_raw": "원본 markdown 편집",
"notes.render": "markdown 렌더링", "notes.render": "markdown 렌더링",
"notes.editor": "편집기", "notes.editor": "편집기",
@@ -527,5 +580,9 @@
"settings.recording.consent_ack": "확인됨", "settings.recording.consent_ack": "확인됨",
"settings.recording.consent_not": "아직 확인되지 않음", "settings.recording.consent_not": "아직 확인되지 않음",
"settings.recording.auto_label": "캘린더 이벤트가 시작될 때 자동으로 녹음 시작", "settings.recording.auto_label": "캘린더 이벤트가 시작될 때 자동으로 녹음 시작",
"settings.recording.auto_hint": "WhispAssist가 열려 있는 동안에만 작동합니다. 가져온 캘린더 이벤트의 시작 시간이 되면 녹음이 자동으로 시작됩니다(위의 기본 보존 설정 사용). 백그라운드에서 실행되는 것은 없습니다 — 타이머는 앱이 실행 중일 때만 설정됩니다. 설정 → 캘린더에서 이벤트를 가져오세요." "settings.recording.auto_hint": "WhispAssist가 열려 있는 동안에만 작동합니다. 가져온 캘린더 이벤트의 시작 시간이 되면 녹음이 자동으로 시작됩니다(위의 기본 보존 설정 사용). 백그라운드에서 실행되는 것은 없습니다 — 타이머는 앱이 실행 중일 때만 설정됩니다. 설정 → 캘린더에서 이벤트를 가져오세요.",
"settings.recording.autostart_label": "로그인 시 WhispAssist 시작",
"settings.recording.autostart_hint": "Windows에 로그인하면 WhispAssist를 자동으로 시작합니다. 기본값은 꺼짐이며, 사용자별 시작 항목을 설치하고(관리자 권한 불필요) 스스로 녹음을 시작하지 않습니다.",
"settings.recording.close_tray_label": "시스템 트레이로 닫기",
"settings.recording.close_tray_hint": "창을 닫아도 WhispAssist는 종료되지 않고 백그라운드에서 계속 실행됩니다. 트레이 아이콘에서 다시 열 수 있으며, 완전히 종료하려면 트레이의 종료를 사용하세요. 기본값은 켜짐입니다."
} }
+61 -4
View File
@@ -24,6 +24,25 @@
"settings.transcription.switch_multilingual": "Bytt til en flerspråklig modell ovenfor for å velge et språk.", "settings.transcription.switch_multilingual": "Bytt til en flerspråklig modell ovenfor for å velge et språk.",
"settings.hardware.title": "Maskinvare", "settings.hardware.title": "Maskinvare",
"settings.hardware.refresh": "Oppdater",
"settings.hardware.test_output": "Test",
"settings.hardware.test_mic": "Test",
"settings.hardware.testing": "Lytter…",
"settings.hardware.play_tone": "Spill av tone",
"settings.hardware.stress_title": "Rask stresstest",
"settings.hardware.stress_hint": "Måler de installerte modellene på hver tilgjengelige backend og anbefaler den mest nøyaktige som holder følge med direkte tale. Tar et øyeblikk.",
"settings.hardware.stress_run": "Kjør stresstest",
"settings.hardware.stress_running": "Kjører…",
"settings.hardware.stress_progress": "Måler {pair}…",
"settings.hardware.stress_recommend": "Anbefalt: {backend} + {model}",
"settings.hardware.stress_apply": "Bruk",
"settings.hardware.stress_none": "Ingen installert modell holder følge med direkte tale på denne maskinvaren — prøv en mindre modell.",
"settings.hardware.stress_backend": "Backend",
"settings.hardware.stress_model": "Modell",
"settings.hardware.stress_rtf": "Hastighet (×sanntid)",
"settings.hardware.stress_realtime": "Direkte?",
"settings.hardware.stress_yes": "Ja",
"settings.hardware.stress_no": "Nei",
"settings.hardware.active_backend": "Aktiv backend", "settings.hardware.active_backend": "Aktiv backend",
"settings.hardware.model_meta": "· modell {size}", "settings.hardware.model_meta": "· modell {size}",
"settings.hardware.preferred_backend": "Foretrukket backend", "settings.hardware.preferred_backend": "Foretrukket backend",
@@ -56,6 +75,9 @@
"settings.hardware.downloading_model": "Laster ned {name}", "settings.hardware.downloading_model": "Laster ned {name}",
"settings.hardware.active_badge": "Aktiv", "settings.hardware.active_badge": "Aktiv",
"settings.hardware.installed": "Installert", "settings.hardware.installed": "Installert",
"settings.hardware.quantization_for": "Kvantisering for {name}",
"settings.hardware.quant_recommended": "{quant} · anbefalt",
"settings.hardware.quant_higher": "{quant} · høyere kvalitet, større",
"settings.hardware.use": "Bruk", "settings.hardware.use": "Bruk",
"settings.hardware.remove": "Fjern", "settings.hardware.remove": "Fjern",
"settings.hardware.cant_remove_active": "Kan ikke fjerne den aktive modellen", "settings.hardware.cant_remove_active": "Kan ikke fjerne den aktive modellen",
@@ -88,6 +110,7 @@
"settings.calendar.title": "Kalender og Outlook .pst", "settings.calendar.title": "Kalender og Outlook .pst",
"settings.calendar.intro_1": "Importer hendelser og deltakere fra en lokal Outlook-", "settings.calendar.intro_1": "Importer hendelser og deltakere fra en lokal Outlook-",
"settings.calendar.intro_2": "sikkerhetskopi — skrivebeskyttet, ingenting skrives tilbake til filen. Ingenting forlater denne enheten.", "settings.calendar.intro_2": "sikkerhetskopi — skrivebeskyttet, ingenting skrives tilbake til filen. Ingenting forlater denne enheten.",
"settings.calendar.requires": "Trenger dette i PATH (følger ikke med):",
"settings.calendar.pst_file": ".pst-fil", "settings.calendar.pst_file": ".pst-fil",
"settings.calendar.no_file": "Ingen fil valgt", "settings.calendar.no_file": "Ingen fil valgt",
"settings.calendar.browse": "Bla gjennom…", "settings.calendar.browse": "Bla gjennom…",
@@ -278,6 +301,7 @@
"settings.privacy.locked_word": "låst", "settings.privacy.locked_word": "låst",
"settings.privacy.vault_locked_2": ". Lås opp for å lese krypterte møter.", "settings.privacy.vault_locked_2": ". Lås opp for å lese krypterte møter.",
"settings.privacy.password": "Passord", "settings.privacy.password": "Passord",
"settings.privacy.show_password": "Vis passord",
"settings.privacy.unlock": "Lås opp", "settings.privacy.unlock": "Lås opp",
"settings.privacy.vault_unlocked_1": "Hvelvet er ", "settings.privacy.vault_unlocked_1": "Hvelvet er ",
"settings.privacy.unlocked_word": "opplåst", "settings.privacy.unlocked_word": "opplåst",
@@ -320,12 +344,23 @@
"import.optional": "valgfritt", "import.optional": "valgfritt",
"import.title_placeholder": "Standard er filnavnet", "import.title_placeholder": "Standard er filnavnet",
"import.filter_av": "Lyd / video", "import.filter_av": "Lyd / video",
"import.requires_1": "Krever", "import.model_label": "Transkripsjonsmodell",
"import.requires_2": "installert og i din PATH (pluss", "import.model_hint": "Lagres med møtet så du ser hvordan det ble transkribert.",
"import.requires_3": "for URL-er). WhispAssist leverer dem ikke med.", "import.requires": "Trenger disse i PATH (følger ikke med):",
"import.background_note": "Kjører i bakgrunnen — følg med i listen.",
"import.importing": "Importerer… dette kan ta en stund", "import.importing": "Importerer… dette kan ta en stund",
"import.import": "Importer", "import.import": "Importer",
"import.cancel": "Avbryt", "import.cancel": "Avbryt",
"import.tracker.label": "Importfremdrift",
"import.tracker.running": "Importerer…",
"import.tracker.done": "Import fullført",
"import.tracker.failed": "Import mislyktes",
"import.tracker.working": "arbeider…",
"import.tracker.stopped": "stoppet",
"import.phase.prepare": "Omkode",
"import.phase.transcribe": "Transkriber",
"import.phase.diarize": "Identifiser talere",
"import.phase.finalize": "Fullfør",
"tagchip.filter": "Filtrer møter merket «{tag}»", "tagchip.filter": "Filtrer møter merket «{tag}»",
"tagchip.remove": "Fjern taggen {tag}", "tagchip.remove": "Fjern taggen {tag}",
@@ -345,6 +380,10 @@
"app.cancel": "Avbryt", "app.cancel": "Avbryt",
"app.cancel_title": "Forkast dette opptaket og slett det", "app.cancel_title": "Forkast dette opptaket og slett det",
"app.recording": "Tar opp…", "app.recording": "Tar opp…",
"app.mute": "Demp mikrofonen",
"app.unmute": "Slå på mikrofonen",
"app.mute_title": "Demp mikrofonen (M)",
"app.unmute_title": "Slå på mikrofonen (M)",
"app.backend_title": "Aktiv transkripsjonsbackend", "app.backend_title": "Aktiv transkripsjonsbackend",
"app.retention_title": "Lagre lyd som .wav for dette møtet", "app.retention_title": "Lagre lyd som .wav for dette møtet",
"app.saving": "lagrer", "app.saving": "lagrer",
@@ -393,10 +432,15 @@
"meetings.status.error": "feil", "meetings.status.error": "feil",
"meetings.resume": "Gjenoppta transkripsjon", "meetings.resume": "Gjenoppta transkripsjon",
"meetings.delete_aria": "Slett møte", "meetings.delete_aria": "Slett møte",
"meetings.not_encrypted": "Ikke kryptert",
"meetings.encrypt": "Krypter",
"meetings.encrypting": "Krypterer…",
"meetings.encrypt_title": "Krypter møtets filer med hvelvet",
"meetings.delete_confirm": "Slette dette møtet? Dette fjerner opptaket, transkripsjonen og notatene.", "meetings.delete_confirm": "Slette dette møtet? Dette fjerner opptaket, transkripsjonen og notatene.",
"transcript.heading": "Transkripsjon", "transcript.heading": "Transkripsjon",
"transcript.title_aria": "Møtetittel", "transcript.title_aria": "Møtetittel",
"transcript.transcribed_with": "Transkribert med",
"transcript.lang_title": "Transkripsjonsspråk", "transcript.lang_title": "Transkripsjonsspråk",
"transcript.lang_auto": "oppdager…", "transcript.lang_auto": "oppdager…",
"transcript.show": "Vis transkripsjon", "transcript.show": "Vis transkripsjon",
@@ -428,9 +472,18 @@
"notes.italic": "Kursiv", "notes.italic": "Kursiv",
"notes.h1": "Overskrift 1", "notes.h1": "Overskrift 1",
"notes.h2": "Overskrift 2", "notes.h2": "Overskrift 2",
"notes.h3": "Overskrift 3",
"notes.bullet": "Punktliste", "notes.bullet": "Punktliste",
"notes.numbered": "Nummerert liste",
"notes.quote": "Sitat",
"notes.divider": "Skillelinje",
"notes.checkbox_title": "Avkrysningsboks", "notes.checkbox_title": "Avkrysningsboks",
"notes.checkbox_aria": "Listeelement med avkrysningsboks", "notes.checkbox_aria": "Listeelement med avkrysningsboks",
"notes.enhance": "Forbedre",
"notes.enhancing": "Forbedrer…",
"notes.enhance_title": "Utvid notatene til strukturert Markdown ved hjelp av transkripsjonen (KI)",
"notes.enhanced_note": "Notater forbedret ut fra transkripsjonen.",
"notes.undo_enhance": "Angre",
"notes.edit_raw": "Rediger rå markdown", "notes.edit_raw": "Rediger rå markdown",
"notes.render": "Gjengi markdown", "notes.render": "Gjengi markdown",
"notes.editor": "Redigering", "notes.editor": "Redigering",
@@ -527,5 +580,9 @@
"settings.recording.consent_ack": "bekreftet", "settings.recording.consent_ack": "bekreftet",
"settings.recording.consent_not": "ennå ikke bekreftet", "settings.recording.consent_not": "ennå ikke bekreftet",
"settings.recording.auto_label": "Start opptak automatisk når en kalenderhendelse begynner", "settings.recording.auto_label": "Start opptak automatisk når en kalenderhendelse begynner",
"settings.recording.auto_hint": "Kun mens WhispAssist er åpen. Når starttiden for en importert kalenderhendelse inntreffer, begynner et opptak automatisk (med din standardinnstilling for oppbevaring ovenfor). Ingenting kjører i bakgrunnen — tidtakeren er kun aktivert mens appen kjører. Importer hendelser under Innstillinger → Kalender." "settings.recording.auto_hint": "Kun mens WhispAssist er åpen. Når starttiden for en importert kalenderhendelse inntreffer, begynner et opptak automatisk (med din standardinnstilling for oppbevaring ovenfor). Ingenting kjører i bakgrunnen — tidtakeren er kun aktivert mens appen kjører. Importer hendelser under Innstillinger → Kalender.",
"settings.recording.autostart_label": "Start WhispAssist ved pålogging",
"settings.recording.autostart_hint": "Starter WhispAssist automatisk når du logger på Windows. Av som standard; installerer en oppstartsoppføring per bruker (krever ikke administrator) og begynner aldri å ta opp på egen hånd.",
"settings.recording.close_tray_label": "Lukk til systemstatusfeltet",
"settings.recording.close_tray_hint": "Å lukke vinduet lar WhispAssist kjøre videre i bakgrunnen i stedet for å avslutte. Åpne igjen fra ikonet i systemstatusfeltet; bruk Avslutt der for å avslutte helt. På som standard."
} }
+61 -4
View File
@@ -24,6 +24,25 @@
"settings.transcription.switch_multilingual": "Mude para um modelo multilíngue acima para escolher um idioma.", "settings.transcription.switch_multilingual": "Mude para um modelo multilíngue acima para escolher um idioma.",
"settings.hardware.title": "Hardware", "settings.hardware.title": "Hardware",
"settings.hardware.refresh": "Atualizar",
"settings.hardware.test_output": "Testar",
"settings.hardware.test_mic": "Testar",
"settings.hardware.testing": "Escutando…",
"settings.hardware.play_tone": "Reproduzir som",
"settings.hardware.stress_title": "Teste rápido de desempenho",
"settings.hardware.stress_hint": "Avalia os modelos instalados em cada backend disponível e recomenda o mais preciso que acompanha a fala ao vivo. Leva um momento.",
"settings.hardware.stress_run": "Executar teste",
"settings.hardware.stress_running": "Executando…",
"settings.hardware.stress_progress": "Avaliando {pair}…",
"settings.hardware.stress_recommend": "Recomendado: {backend} + {model}",
"settings.hardware.stress_apply": "Aplicar",
"settings.hardware.stress_none": "Nenhum modelo instalado acompanha a fala ao vivo neste hardware — tente um modelo menor.",
"settings.hardware.stress_backend": "Backend",
"settings.hardware.stress_model": "Modelo",
"settings.hardware.stress_rtf": "Velocidade (×tempo real)",
"settings.hardware.stress_realtime": "Ao vivo?",
"settings.hardware.stress_yes": "Sim",
"settings.hardware.stress_no": "Não",
"settings.hardware.active_backend": "Backend ativo", "settings.hardware.active_backend": "Backend ativo",
"settings.hardware.model_meta": "· modelo {size}", "settings.hardware.model_meta": "· modelo {size}",
"settings.hardware.preferred_backend": "Backend preferido", "settings.hardware.preferred_backend": "Backend preferido",
@@ -56,6 +75,9 @@
"settings.hardware.downloading_model": "Baixando {name}", "settings.hardware.downloading_model": "Baixando {name}",
"settings.hardware.active_badge": "Ativo", "settings.hardware.active_badge": "Ativo",
"settings.hardware.installed": "Instalado", "settings.hardware.installed": "Instalado",
"settings.hardware.quantization_for": "Quantização de {name}",
"settings.hardware.quant_recommended": "{quant} · recomendado",
"settings.hardware.quant_higher": "{quant} · qualidade superior, maior",
"settings.hardware.use": "Usar", "settings.hardware.use": "Usar",
"settings.hardware.remove": "Remover", "settings.hardware.remove": "Remover",
"settings.hardware.cant_remove_active": "Não é possível remover o modelo ativo", "settings.hardware.cant_remove_active": "Não é possível remover o modelo ativo",
@@ -88,6 +110,7 @@
"settings.calendar.title": "Calendário e Outlook .pst", "settings.calendar.title": "Calendário e Outlook .pst",
"settings.calendar.intro_1": "Importe eventos e participantes de um backup local do Outlook", "settings.calendar.intro_1": "Importe eventos e participantes de um backup local do Outlook",
"settings.calendar.intro_2": "— somente leitura, nada é reescrito no arquivo. Nada sai deste dispositivo.", "settings.calendar.intro_2": "— somente leitura, nada é reescrito no arquivo. Nada sai deste dispositivo.",
"settings.calendar.requires": "Precisa disto no seu PATH (não incluído):",
"settings.calendar.pst_file": "Arquivo .pst", "settings.calendar.pst_file": "Arquivo .pst",
"settings.calendar.no_file": "Nenhum arquivo selecionado", "settings.calendar.no_file": "Nenhum arquivo selecionado",
"settings.calendar.browse": "Procurar…", "settings.calendar.browse": "Procurar…",
@@ -278,6 +301,7 @@
"settings.privacy.locked_word": "bloqueado", "settings.privacy.locked_word": "bloqueado",
"settings.privacy.vault_locked_2": ". Desbloqueie para ler as reuniões criptografadas.", "settings.privacy.vault_locked_2": ". Desbloqueie para ler as reuniões criptografadas.",
"settings.privacy.password": "Senha", "settings.privacy.password": "Senha",
"settings.privacy.show_password": "Mostrar senha",
"settings.privacy.unlock": "Desbloquear", "settings.privacy.unlock": "Desbloquear",
"settings.privacy.vault_unlocked_1": "O cofre está ", "settings.privacy.vault_unlocked_1": "O cofre está ",
"settings.privacy.unlocked_word": "desbloqueado", "settings.privacy.unlocked_word": "desbloqueado",
@@ -320,12 +344,23 @@
"import.optional": "opcional", "import.optional": "opcional",
"import.title_placeholder": "Por padrão, o nome do arquivo", "import.title_placeholder": "Por padrão, o nome do arquivo",
"import.filter_av": "Áudio / vídeo", "import.filter_av": "Áudio / vídeo",
"import.requires_1": "Requer", "import.model_label": "Modelo de transcrição",
"import.requires_2": "instalado e no seu PATH (mais", "import.model_hint": "Salvo com a reunião para você ver como foi transcrita.",
"import.requires_3": "para URLs). O WhispAssist não os inclui.", "import.requires": "Precisa destes no seu PATH (não incluídos):",
"import.background_note": "Roda em segundo plano — acompanhe na lista.",
"import.importing": "Importando… isso pode demorar um pouco", "import.importing": "Importando… isso pode demorar um pouco",
"import.import": "Importar", "import.import": "Importar",
"import.cancel": "Cancelar", "import.cancel": "Cancelar",
"import.tracker.label": "Progresso da importação",
"import.tracker.running": "Importando…",
"import.tracker.done": "Importação concluída",
"import.tracker.failed": "Falha na importação",
"import.tracker.working": "trabalhando…",
"import.tracker.stopped": "parado",
"import.phase.prepare": "Transcodificar",
"import.phase.transcribe": "Transcrever",
"import.phase.diarize": "Identificar falantes",
"import.phase.finalize": "Finalizar",
"tagchip.filter": "Filtrar reuniões marcadas com \"{tag}\"", "tagchip.filter": "Filtrar reuniões marcadas com \"{tag}\"",
"tagchip.remove": "Remover marcador {tag}", "tagchip.remove": "Remover marcador {tag}",
@@ -345,6 +380,10 @@
"app.cancel": "Cancelar", "app.cancel": "Cancelar",
"app.cancel_title": "Descartar esta gravação e excluí-la", "app.cancel_title": "Descartar esta gravação e excluí-la",
"app.recording": "Gravando…", "app.recording": "Gravando…",
"app.mute": "Silenciar microfone",
"app.unmute": "Ativar microfone",
"app.mute_title": "Silenciar microfone (M)",
"app.unmute_title": "Ativar microfone (M)",
"app.backend_title": "Backend de transcrição ativo", "app.backend_title": "Backend de transcrição ativo",
"app.retention_title": "Salvar o áudio como .wav para esta reunião", "app.retention_title": "Salvar o áudio como .wav para esta reunião",
"app.saving": "salvando", "app.saving": "salvando",
@@ -393,10 +432,15 @@
"meetings.status.error": "erro", "meetings.status.error": "erro",
"meetings.resume": "Retomar transcrição", "meetings.resume": "Retomar transcrição",
"meetings.delete_aria": "Excluir reunião", "meetings.delete_aria": "Excluir reunião",
"meetings.not_encrypted": "Não criptografado",
"meetings.encrypt": "Criptografar",
"meetings.encrypting": "Criptografando…",
"meetings.encrypt_title": "Criptografar os arquivos desta reunião com o cofre",
"meetings.delete_confirm": "Excluir esta reunião? Isso remove sua gravação, transcrição e notas.", "meetings.delete_confirm": "Excluir esta reunião? Isso remove sua gravação, transcrição e notas.",
"transcript.heading": "Transcrição", "transcript.heading": "Transcrição",
"transcript.title_aria": "Título da reunião", "transcript.title_aria": "Título da reunião",
"transcript.transcribed_with": "Transcrito com",
"transcript.lang_title": "Idioma de transcrição", "transcript.lang_title": "Idioma de transcrição",
"transcript.lang_auto": "detectando…", "transcript.lang_auto": "detectando…",
"transcript.show": "Mostrar transcrição", "transcript.show": "Mostrar transcrição",
@@ -428,9 +472,18 @@
"notes.italic": "Itálico", "notes.italic": "Itálico",
"notes.h1": "Título 1", "notes.h1": "Título 1",
"notes.h2": "Título 2", "notes.h2": "Título 2",
"notes.h3": "Título 3",
"notes.bullet": "Lista com marcadores", "notes.bullet": "Lista com marcadores",
"notes.numbered": "Lista numerada",
"notes.quote": "Citação",
"notes.divider": "Separador",
"notes.checkbox_title": "Caixa de seleção", "notes.checkbox_title": "Caixa de seleção",
"notes.checkbox_aria": "Item de lista com caixa de seleção", "notes.checkbox_aria": "Item de lista com caixa de seleção",
"notes.enhance": "Melhorar",
"notes.enhancing": "Melhorando…",
"notes.enhance_title": "Expandir estas notas para Markdown estruturado com base na transcrição (IA)",
"notes.enhanced_note": "Notas melhoradas a partir da transcrição.",
"notes.undo_enhance": "Desfazer",
"notes.edit_raw": "Editar o markdown bruto", "notes.edit_raw": "Editar o markdown bruto",
"notes.render": "Renderizar o markdown", "notes.render": "Renderizar o markdown",
"notes.editor": "Editor", "notes.editor": "Editor",
@@ -527,5 +580,9 @@
"settings.recording.consent_ack": "confirmado", "settings.recording.consent_ack": "confirmado",
"settings.recording.consent_not": "ainda não confirmado", "settings.recording.consent_not": "ainda não confirmado",
"settings.recording.auto_label": "Iniciar a gravação automaticamente quando um evento do calendário começar", "settings.recording.auto_label": "Iniciar a gravação automaticamente quando um evento do calendário começar",
"settings.recording.auto_hint": "Apenas enquanto o WhispAssist estiver aberto. Quando chega a hora de início de um evento do calendário importado, uma gravação começa automaticamente (usando sua configuração de retenção padrão acima). Nada é executado em segundo plano — o temporizador só é armado enquanto o aplicativo está em execução. Importe eventos em Configurações → Calendário." "settings.recording.auto_hint": "Apenas enquanto o WhispAssist estiver aberto. Quando chega a hora de início de um evento do calendário importado, uma gravação começa automaticamente (usando sua configuração de retenção padrão acima). Nada é executado em segundo plano — o temporizador só é armado enquanto o aplicativo está em execução. Importe eventos em Configurações → Calendário.",
"settings.recording.autostart_label": "Iniciar o WhispAssist ao fazer login",
"settings.recording.autostart_hint": "Inicia o WhispAssist automaticamente quando você entra no Windows. Desativado por padrão; instala uma entrada de inicialização por usuário (sem administrador) e não começa a gravar sozinho.",
"settings.recording.close_tray_label": "Fechar para a bandeja do sistema",
"settings.recording.close_tray_hint": "Fechar a janela mantém o WhispAssist rodando em segundo plano em vez de encerrar. Reabra pelo ícone da bandeja; use Sair no menu da bandeja para encerrar de vez. Ativado por padrão."
} }
+61 -4
View File
@@ -24,6 +24,25 @@
"settings.transcription.switch_multilingual": "Mude para um modelo multilingue acima para escolher um idioma.", "settings.transcription.switch_multilingual": "Mude para um modelo multilingue acima para escolher um idioma.",
"settings.hardware.title": "Hardware", "settings.hardware.title": "Hardware",
"settings.hardware.refresh": "Atualizar",
"settings.hardware.test_output": "Testar",
"settings.hardware.test_mic": "Testar",
"settings.hardware.testing": "A escutar…",
"settings.hardware.play_tone": "Reproduzir som",
"settings.hardware.stress_title": "Teste rápido de desempenho",
"settings.hardware.stress_hint": "Avalia os modelos instalados em cada backend disponível e recomenda o mais preciso que acompanha a fala em direto. Demora um momento.",
"settings.hardware.stress_run": "Executar teste",
"settings.hardware.stress_running": "A executar…",
"settings.hardware.stress_progress": "A avaliar {pair}…",
"settings.hardware.stress_recommend": "Recomendado: {backend} + {model}",
"settings.hardware.stress_apply": "Aplicar",
"settings.hardware.stress_none": "Nenhum modelo instalado acompanha a fala em direto neste hardware — experimente um modelo mais pequeno.",
"settings.hardware.stress_backend": "Backend",
"settings.hardware.stress_model": "Modelo",
"settings.hardware.stress_rtf": "Velocidade (×tempo real)",
"settings.hardware.stress_realtime": "Em direto?",
"settings.hardware.stress_yes": "Sim",
"settings.hardware.stress_no": "Não",
"settings.hardware.active_backend": "Backend ativo", "settings.hardware.active_backend": "Backend ativo",
"settings.hardware.model_meta": "· modelo {size}", "settings.hardware.model_meta": "· modelo {size}",
"settings.hardware.preferred_backend": "Backend preferido", "settings.hardware.preferred_backend": "Backend preferido",
@@ -56,6 +75,9 @@
"settings.hardware.downloading_model": "A transferir {name}", "settings.hardware.downloading_model": "A transferir {name}",
"settings.hardware.active_badge": "Ativo", "settings.hardware.active_badge": "Ativo",
"settings.hardware.installed": "Instalado", "settings.hardware.installed": "Instalado",
"settings.hardware.quantization_for": "Quantização de {name}",
"settings.hardware.quant_recommended": "{quant} · recomendado",
"settings.hardware.quant_higher": "{quant} · qualidade superior, maior",
"settings.hardware.use": "Usar", "settings.hardware.use": "Usar",
"settings.hardware.remove": "Remover", "settings.hardware.remove": "Remover",
"settings.hardware.cant_remove_active": "Não é possível remover o modelo ativo", "settings.hardware.cant_remove_active": "Não é possível remover o modelo ativo",
@@ -88,6 +110,7 @@
"settings.calendar.title": "Calendário e Outlook .pst", "settings.calendar.title": "Calendário e Outlook .pst",
"settings.calendar.intro_1": "Importe eventos e participantes de uma cópia de segurança local do Outlook", "settings.calendar.intro_1": "Importe eventos e participantes de uma cópia de segurança local do Outlook",
"settings.calendar.intro_2": "— apenas leitura, nada é reescrito no ficheiro. Nada sai deste dispositivo.", "settings.calendar.intro_2": "— apenas leitura, nada é reescrito no ficheiro. Nada sai deste dispositivo.",
"settings.calendar.requires": "Precisa disto no seu PATH (não incluído):",
"settings.calendar.pst_file": "Ficheiro .pst", "settings.calendar.pst_file": "Ficheiro .pst",
"settings.calendar.no_file": "Nenhum ficheiro selecionado", "settings.calendar.no_file": "Nenhum ficheiro selecionado",
"settings.calendar.browse": "Procurar…", "settings.calendar.browse": "Procurar…",
@@ -278,6 +301,7 @@
"settings.privacy.locked_word": "bloqueado", "settings.privacy.locked_word": "bloqueado",
"settings.privacy.vault_locked_2": ". Desbloqueie para ler as reuniões cifradas.", "settings.privacy.vault_locked_2": ". Desbloqueie para ler as reuniões cifradas.",
"settings.privacy.password": "Palavra-passe", "settings.privacy.password": "Palavra-passe",
"settings.privacy.show_password": "Mostrar palavra-passe",
"settings.privacy.unlock": "Desbloquear", "settings.privacy.unlock": "Desbloquear",
"settings.privacy.vault_unlocked_1": "O cofre está ", "settings.privacy.vault_unlocked_1": "O cofre está ",
"settings.privacy.unlocked_word": "desbloqueado", "settings.privacy.unlocked_word": "desbloqueado",
@@ -320,12 +344,23 @@
"import.optional": "opcional", "import.optional": "opcional",
"import.title_placeholder": "Por predefinição, o nome do ficheiro", "import.title_placeholder": "Por predefinição, o nome do ficheiro",
"import.filter_av": "Áudio / vídeo", "import.filter_av": "Áudio / vídeo",
"import.requires_1": "Requer", "import.model_label": "Modelo de transcrição",
"import.requires_2": "instalado e no seu PATH (mais", "import.model_hint": "Guardado com a reunião para ver como foi transcrita.",
"import.requires_3": "para URLs). O WhispAssist não os inclui.", "import.requires": "Precisa destes no seu PATH (não incluídos):",
"import.background_note": "Corre em segundo plano — acompanhe na lista.",
"import.importing": "A importar… isto pode demorar um pouco", "import.importing": "A importar… isto pode demorar um pouco",
"import.import": "Importar", "import.import": "Importar",
"import.cancel": "Cancelar", "import.cancel": "Cancelar",
"import.tracker.label": "Progresso da importação",
"import.tracker.running": "A importar…",
"import.tracker.done": "Importação concluída",
"import.tracker.failed": "Falha na importação",
"import.tracker.working": "a trabalhar…",
"import.tracker.stopped": "parado",
"import.phase.prepare": "Transcodificar",
"import.phase.transcribe": "Transcrever",
"import.phase.diarize": "Identificar oradores",
"import.phase.finalize": "Finalizar",
"tagchip.filter": "Filtrar reuniões etiquetadas com «{tag}»", "tagchip.filter": "Filtrar reuniões etiquetadas com «{tag}»",
"tagchip.remove": "Remover etiqueta {tag}", "tagchip.remove": "Remover etiqueta {tag}",
@@ -345,6 +380,10 @@
"app.cancel": "Cancelar", "app.cancel": "Cancelar",
"app.cancel_title": "Descartar esta gravação e eliminá-la", "app.cancel_title": "Descartar esta gravação e eliminá-la",
"app.recording": "A gravar…", "app.recording": "A gravar…",
"app.mute": "Silenciar microfone",
"app.unmute": "Reativar microfone",
"app.mute_title": "Silenciar microfone (M)",
"app.unmute_title": "Reativar microfone (M)",
"app.backend_title": "Backend de transcrição ativo", "app.backend_title": "Backend de transcrição ativo",
"app.retention_title": "Guardar o áudio como .wav para esta reunião", "app.retention_title": "Guardar o áudio como .wav para esta reunião",
"app.saving": "a guardar", "app.saving": "a guardar",
@@ -393,10 +432,15 @@
"meetings.status.error": "erro", "meetings.status.error": "erro",
"meetings.resume": "Retomar transcrição", "meetings.resume": "Retomar transcrição",
"meetings.delete_aria": "Eliminar reunião", "meetings.delete_aria": "Eliminar reunião",
"meetings.not_encrypted": "Não encriptado",
"meetings.encrypt": "Encriptar",
"meetings.encrypting": "A encriptar…",
"meetings.encrypt_title": "Encriptar os ficheiros desta reunião com o cofre",
"meetings.delete_confirm": "Eliminar esta reunião? Isto remove a sua gravação, transcrição e notas.", "meetings.delete_confirm": "Eliminar esta reunião? Isto remove a sua gravação, transcrição e notas.",
"transcript.heading": "Transcrição", "transcript.heading": "Transcrição",
"transcript.title_aria": "Título da reunião", "transcript.title_aria": "Título da reunião",
"transcript.transcribed_with": "Transcrito com",
"transcript.lang_title": "Idioma de transcrição", "transcript.lang_title": "Idioma de transcrição",
"transcript.lang_auto": "a detetar…", "transcript.lang_auto": "a detetar…",
"transcript.show": "Mostrar transcrição", "transcript.show": "Mostrar transcrição",
@@ -428,9 +472,18 @@
"notes.italic": "Itálico", "notes.italic": "Itálico",
"notes.h1": "Título 1", "notes.h1": "Título 1",
"notes.h2": "Título 2", "notes.h2": "Título 2",
"notes.h3": "Título 3",
"notes.bullet": "Lista com marcadores", "notes.bullet": "Lista com marcadores",
"notes.numbered": "Lista numerada",
"notes.quote": "Citação",
"notes.divider": "Separador",
"notes.checkbox_title": "Caixa de verificação", "notes.checkbox_title": "Caixa de verificação",
"notes.checkbox_aria": "Item de lista com caixa de verificação", "notes.checkbox_aria": "Item de lista com caixa de verificação",
"notes.enhance": "Melhorar",
"notes.enhancing": "A melhorar…",
"notes.enhance_title": "Expandir estas notas para Markdown estruturado com base na transcrição (IA)",
"notes.enhanced_note": "Notas melhoradas a partir da transcrição.",
"notes.undo_enhance": "Anular",
"notes.edit_raw": "Editar o markdown em bruto", "notes.edit_raw": "Editar o markdown em bruto",
"notes.render": "Compor o markdown", "notes.render": "Compor o markdown",
"notes.editor": "Editor", "notes.editor": "Editor",
@@ -527,5 +580,9 @@
"settings.recording.consent_ack": "confirmado", "settings.recording.consent_ack": "confirmado",
"settings.recording.consent_not": "ainda não confirmado", "settings.recording.consent_not": "ainda não confirmado",
"settings.recording.auto_label": "Iniciar a gravação automaticamente quando um evento do calendário começa", "settings.recording.auto_label": "Iniciar a gravação automaticamente quando um evento do calendário começa",
"settings.recording.auto_hint": "Apenas enquanto o WhispAssist estiver aberto. Quando chega a hora de início de um evento do calendário importado, uma gravação começa automaticamente (usando a sua definição de retenção predefinida acima). Nada é executado em segundo plano — o temporizador só é armado enquanto a aplicação está em execução. Importe eventos em Definições → Calendário." "settings.recording.auto_hint": "Apenas enquanto o WhispAssist estiver aberto. Quando chega a hora de início de um evento do calendário importado, uma gravação começa automaticamente (usando a sua definição de retenção predefinida acima). Nada é executado em segundo plano — o temporizador só é armado enquanto a aplicação está em execução. Importe eventos em Definições → Calendário.",
"settings.recording.autostart_label": "Iniciar o WhispAssist ao iniciar sessão",
"settings.recording.autostart_hint": "Inicia o WhispAssist automaticamente quando inicia sessão no Windows. Desativado por predefinição; instala uma entrada de arranque por utilizador (sem privilégios de administrador) e não começa a gravar sozinho.",
"settings.recording.close_tray_label": "Fechar para a área de notificação",
"settings.recording.close_tray_hint": "Fechar a janela mantém o WhispAssist em execução em segundo plano em vez de sair. Reabra-o a partir do ícone na área de notificação; use Sair nesse menu para terminar por completo. Ativado por predefinição."
} }
+61 -4
View File
@@ -24,6 +24,25 @@
"settings.transcription.switch_multilingual": "Переключитесь на многоязычную модель выше, чтобы выбрать язык.", "settings.transcription.switch_multilingual": "Переключитесь на многоязычную модель выше, чтобы выбрать язык.",
"settings.hardware.title": "Оборудование", "settings.hardware.title": "Оборудование",
"settings.hardware.refresh": "Обновить",
"settings.hardware.test_output": "Проверить",
"settings.hardware.test_mic": "Проверить",
"settings.hardware.testing": "Слушаю…",
"settings.hardware.play_tone": "Воспроизвести сигнал",
"settings.hardware.stress_title": "Быстрый стресс-тест",
"settings.hardware.stress_hint": "Замеряет установленные модели на каждом доступном бэкенде и рекомендует самую точную, которая успевает за живой речью. Займёт немного времени.",
"settings.hardware.stress_run": "Запустить тест",
"settings.hardware.stress_running": "Выполняется…",
"settings.hardware.stress_progress": "Тестирование {pair}…",
"settings.hardware.stress_recommend": "Рекомендуется: {backend} + {model}",
"settings.hardware.stress_apply": "Применить",
"settings.hardware.stress_none": "Ни одна установленная модель не успевает за живой речью на этом оборудовании — попробуйте модель поменьше.",
"settings.hardware.stress_backend": "Бэкенд",
"settings.hardware.stress_model": "Модель",
"settings.hardware.stress_rtf": "Скорость (×реального времени)",
"settings.hardware.stress_realtime": "В реальном времени?",
"settings.hardware.stress_yes": "Да",
"settings.hardware.stress_no": "Нет",
"settings.hardware.active_backend": "Активный бэкенд", "settings.hardware.active_backend": "Активный бэкенд",
"settings.hardware.model_meta": "· модель {size}", "settings.hardware.model_meta": "· модель {size}",
"settings.hardware.preferred_backend": "Предпочитаемый бэкенд", "settings.hardware.preferred_backend": "Предпочитаемый бэкенд",
@@ -56,6 +75,9 @@
"settings.hardware.downloading_model": "Загрузка {name}", "settings.hardware.downloading_model": "Загрузка {name}",
"settings.hardware.active_badge": "Активно", "settings.hardware.active_badge": "Активно",
"settings.hardware.installed": "Установлено", "settings.hardware.installed": "Установлено",
"settings.hardware.quantization_for": "Квантование для {name}",
"settings.hardware.quant_recommended": "{quant} · рекомендуется",
"settings.hardware.quant_higher": "{quant} · выше качество, больше размер",
"settings.hardware.use": "Использовать", "settings.hardware.use": "Использовать",
"settings.hardware.remove": "Удалить", "settings.hardware.remove": "Удалить",
"settings.hardware.cant_remove_active": "Нельзя удалить активную модель", "settings.hardware.cant_remove_active": "Нельзя удалить активную модель",
@@ -88,6 +110,7 @@
"settings.calendar.title": "Календарь и Outlook .pst", "settings.calendar.title": "Календарь и Outlook .pst",
"settings.calendar.intro_1": "Импортируйте события и участников из локальной резервной копии Outlook", "settings.calendar.intro_1": "Импортируйте события и участников из локальной резервной копии Outlook",
"settings.calendar.intro_2": "— только чтение, ничего не записывается обратно в файл. Ничего не покидает это устройство.", "settings.calendar.intro_2": "— только чтение, ничего не записывается обратно в файл. Ничего не покидает это устройство.",
"settings.calendar.requires": "Требуется в PATH (не входит в комплект):",
"settings.calendar.pst_file": "Файл .pst", "settings.calendar.pst_file": "Файл .pst",
"settings.calendar.no_file": "Файл не выбран", "settings.calendar.no_file": "Файл не выбран",
"settings.calendar.browse": "Обзор…", "settings.calendar.browse": "Обзор…",
@@ -278,6 +301,7 @@
"settings.privacy.locked_word": "заблокировано", "settings.privacy.locked_word": "заблокировано",
"settings.privacy.vault_locked_2": ". Разблокируйте, чтобы читать зашифрованные встречи.", "settings.privacy.vault_locked_2": ". Разблокируйте, чтобы читать зашифрованные встречи.",
"settings.privacy.password": "Пароль", "settings.privacy.password": "Пароль",
"settings.privacy.show_password": "Показать пароль",
"settings.privacy.unlock": "Разблокировать", "settings.privacy.unlock": "Разблокировать",
"settings.privacy.vault_unlocked_1": "Хранилище ", "settings.privacy.vault_unlocked_1": "Хранилище ",
"settings.privacy.unlocked_word": "разблокировано", "settings.privacy.unlocked_word": "разблокировано",
@@ -320,12 +344,23 @@
"import.optional": "необязательно", "import.optional": "необязательно",
"import.title_placeholder": "По умолчанию — имя файла", "import.title_placeholder": "По умолчанию — имя файла",
"import.filter_av": "Аудио / видео", "import.filter_av": "Аудио / видео",
"import.requires_1": "Требует", "import.model_label": "Модель транскрипции",
"import.requires_2": "установленным и в вашем PATH (плюс", "import.model_hint": "Сохраняется вместе со встречей, чтобы было видно, чем она транскрибирована.",
"import.requires_3": "для URL). WhispAssist их не включает.", "import.requires": "Требуются в PATH (не входят в комплект):",
"import.background_note": "Выполняется в фоне — следите за ходом в списке.",
"import.importing": "Импорт… это может занять некоторое время", "import.importing": "Импорт… это может занять некоторое время",
"import.import": "Импортировать", "import.import": "Импортировать",
"import.cancel": "Отмена", "import.cancel": "Отмена",
"import.tracker.label": "Ход импорта",
"import.tracker.running": "Импорт…",
"import.tracker.done": "Импорт завершён",
"import.tracker.failed": "Импорт не удался",
"import.tracker.working": "в работе…",
"import.tracker.stopped": "остановлен",
"import.phase.prepare": "Перекодирование",
"import.phase.transcribe": "Транскрибирование",
"import.phase.diarize": "Определение говорящих",
"import.phase.finalize": "Завершение",
"tagchip.filter": "Фильтровать встречи с меткой «{tag}»", "tagchip.filter": "Фильтровать встречи с меткой «{tag}»",
"tagchip.remove": "Удалить метку {tag}", "tagchip.remove": "Удалить метку {tag}",
@@ -345,6 +380,10 @@
"app.cancel": "Отмена", "app.cancel": "Отмена",
"app.cancel_title": "Отклонить эту запись и удалить её", "app.cancel_title": "Отклонить эту запись и удалить её",
"app.recording": "Запись…", "app.recording": "Запись…",
"app.mute": "Выключить микрофон",
"app.unmute": "Включить микрофон",
"app.mute_title": "Выключить микрофон (M)",
"app.unmute_title": "Включить микрофон (M)",
"app.backend_title": "Активный бэкенд транскрипции", "app.backend_title": "Активный бэкенд транскрипции",
"app.retention_title": "Сохранить аудио как .wav для этой встречи", "app.retention_title": "Сохранить аудио как .wav для этой встречи",
"app.saving": "сохранение", "app.saving": "сохранение",
@@ -393,10 +432,15 @@
"meetings.status.error": "ошибка", "meetings.status.error": "ошибка",
"meetings.resume": "Возобновить транскрипцию", "meetings.resume": "Возобновить транскрипцию",
"meetings.delete_aria": "Удалить встречу", "meetings.delete_aria": "Удалить встречу",
"meetings.not_encrypted": "Не зашифровано",
"meetings.encrypt": "Зашифровать",
"meetings.encrypting": "Шифрование…",
"meetings.encrypt_title": "Зашифровать файлы этой встречи с помощью хранилища",
"meetings.delete_confirm": "Удалить эту встречу? Это удалит её запись, транскрипцию и заметки.", "meetings.delete_confirm": "Удалить эту встречу? Это удалит её запись, транскрипцию и заметки.",
"transcript.heading": "Транскрипция", "transcript.heading": "Транскрипция",
"transcript.title_aria": "Название встречи", "transcript.title_aria": "Название встречи",
"transcript.transcribed_with": "Транскрибировано с помощью",
"transcript.lang_title": "Язык транскрипции", "transcript.lang_title": "Язык транскрипции",
"transcript.lang_auto": "определение…", "transcript.lang_auto": "определение…",
"transcript.show": "Показать транскрипцию", "transcript.show": "Показать транскрипцию",
@@ -428,9 +472,18 @@
"notes.italic": "Курсив", "notes.italic": "Курсив",
"notes.h1": "Заголовок 1", "notes.h1": "Заголовок 1",
"notes.h2": "Заголовок 2", "notes.h2": "Заголовок 2",
"notes.h3": "Заголовок 3",
"notes.bullet": "Маркированный список", "notes.bullet": "Маркированный список",
"notes.numbered": "Нумерованный список",
"notes.quote": "Цитата",
"notes.divider": "Разделитель",
"notes.checkbox_title": "Флажок", "notes.checkbox_title": "Флажок",
"notes.checkbox_aria": "Элемент списка с флажком", "notes.checkbox_aria": "Элемент списка с флажком",
"notes.enhance": "Улучшить",
"notes.enhancing": "Улучшение…",
"notes.enhance_title": "Развернуть эти заметки в структурированный Markdown по транскрипту (ИИ)",
"notes.enhanced_note": "Заметки улучшены на основе транскрипта.",
"notes.undo_enhance": "Отменить",
"notes.edit_raw": "Редактировать исходный markdown", "notes.edit_raw": "Редактировать исходный markdown",
"notes.render": "Отобразить markdown", "notes.render": "Отобразить markdown",
"notes.editor": "Редактор", "notes.editor": "Редактор",
@@ -527,5 +580,9 @@
"settings.recording.consent_ack": "подтверждено", "settings.recording.consent_ack": "подтверждено",
"settings.recording.consent_not": "ещё не подтверждено", "settings.recording.consent_not": "ещё не подтверждено",
"settings.recording.auto_label": "Автоматически начинать запись, когда начинается событие календаря", "settings.recording.auto_label": "Автоматически начинать запись, когда начинается событие календаря",
"settings.recording.auto_hint": "Только пока WhispAssist открыт. Когда наступает время начала импортированного события календаря, запись начинается автоматически (используя вашу настройку хранения по умолчанию выше). Ничего не выполняется в фоне — таймер взведён только пока приложение запущено. Импортируйте события в Настройки → Календарь." "settings.recording.auto_hint": "Только пока WhispAssist открыт. Когда наступает время начала импортированного события календаря, запись начинается автоматически (используя вашу настройку хранения по умолчанию выше). Ничего не выполняется в фоне — таймер взведён только пока приложение запущено. Импортируйте события в Настройки → Календарь.",
"settings.recording.autostart_label": "Запускать WhispAssist при входе в систему",
"settings.recording.autostart_hint": "Автоматически запускает WhispAssist при входе в Windows. По умолчанию выключено; создаёт запись автозапуска для текущего пользователя (без прав администратора) и не начинает запись самостоятельно.",
"settings.recording.close_tray_label": "Закрывать в системный трей",
"settings.recording.close_tray_hint": "При закрытии окна WhispAssist продолжает работать в фоне, а не завершается. Откройте его снова через значок в трее; для полного выхода используйте «Выход» в меню трея. По умолчанию включено."
} }
+61 -4
View File
@@ -24,6 +24,25 @@
"settings.transcription.switch_multilingual": "භාෂාවක් තේරීමට ඉහත බහුභාෂා ආකෘතියකට මාරු වන්න.", "settings.transcription.switch_multilingual": "භාෂාවක් තේරීමට ඉහත බහුභාෂා ආකෘතියකට මාරු වන්න.",
"settings.hardware.title": "දෘඪාංග", "settings.hardware.title": "දෘඪාංග",
"settings.hardware.refresh": "නැවුම් කරන්න",
"settings.hardware.test_output": "පරීක්ෂා කරන්න",
"settings.hardware.test_mic": "පරීක්ෂා කරන්න",
"settings.hardware.testing": "සවන් දෙමින්…",
"settings.hardware.play_tone": "නාදයක් වාදනය කරන්න",
"settings.hardware.stress_title": "ඉක්මන් පීඩන පරීක්ෂණය",
"settings.hardware.stress_hint": "ස්ථාපිත ආකෘති ලබා ගත හැකි සෑම පසුබිම් පද්ධතියකම මිනුම් කර, සජීවී කථනයට සමගාමීව යා හැකි වඩාත්ම නිවැරදි ආකෘතිය නිර්දේශ කරයි. මොහොතක් ගතවේ.",
"settings.hardware.stress_run": "පීඩන පරීක්ෂණය ධාවනය කරන්න",
"settings.hardware.stress_running": "ධාවනය වෙමින්…",
"settings.hardware.stress_progress": "{pair} මිනුම් කරමින්…",
"settings.hardware.stress_recommend": "නිර්දේශය: {backend} + {model}",
"settings.hardware.stress_apply": "යොදන්න",
"settings.hardware.stress_none": "මෙම දෘඩාංගයේ ස්ථාපිත කිසිදු ආකෘතියක් සජීවී කථනයට සමගාමීව යන්නේ නැත — කුඩා ආකෘතියක් උත්සාහ කරන්න.",
"settings.hardware.stress_backend": "පසුබිම් පද්ධතිය",
"settings.hardware.stress_model": "ආකෘතිය",
"settings.hardware.stress_rtf": "වේගය (×තත්‍ය කාලය)",
"settings.hardware.stress_realtime": "සජීවීද?",
"settings.hardware.stress_yes": "ඔව්",
"settings.hardware.stress_no": "නැත",
"settings.hardware.active_backend": "සක්‍රීය පසුඅන්තය", "settings.hardware.active_backend": "සක්‍රීය පසුඅන්තය",
"settings.hardware.model_meta": "· ආකෘතිය {size}", "settings.hardware.model_meta": "· ආකෘතිය {size}",
"settings.hardware.preferred_backend": "කැමති පසුඅන්තය", "settings.hardware.preferred_backend": "කැමති පසුඅන්තය",
@@ -56,6 +75,9 @@
"settings.hardware.downloading_model": "{name} බාගත වෙමින්", "settings.hardware.downloading_model": "{name} බාගත වෙමින්",
"settings.hardware.active_badge": "සක්‍රීය", "settings.hardware.active_badge": "සක්‍රීය",
"settings.hardware.installed": "ස්ථාපනය කර ඇත", "settings.hardware.installed": "ස්ථාපනය කර ඇත",
"settings.hardware.quantization_for": "{name} සඳහා ක්වොන්ටයිසේෂන්",
"settings.hardware.quant_recommended": "{quant} · නිර්දේශිත",
"settings.hardware.quant_higher": "{quant} · ඉහළ ගුණත්වය, විශාලයි",
"settings.hardware.use": "භාවිත කරන්න", "settings.hardware.use": "භාවිත කරන්න",
"settings.hardware.remove": "ඉවත් කරන්න", "settings.hardware.remove": "ඉවත් කරන්න",
"settings.hardware.cant_remove_active": "සක්‍රීය ආකෘතිය ඉවත් කළ නොහැක", "settings.hardware.cant_remove_active": "සක්‍රීය ආකෘතිය ඉවත් කළ නොහැක",
@@ -88,6 +110,7 @@
"settings.calendar.title": "දින දර්ශනය සහ Outlook .pst", "settings.calendar.title": "දින දර්ශනය සහ Outlook .pst",
"settings.calendar.intro_1": "දේශීය Outlook උපස්ථයකින් සිදුවීම් සහ සහභාගිවන්නන් ආයාත කරන්න", "settings.calendar.intro_1": "දේශීය Outlook උපස්ථයකින් සිදුවීම් සහ සහභාගිවන්නන් ආයාත කරන්න",
"settings.calendar.intro_2": "— කියවීමට පමණි, ගොනුවට කිසිවක් නැවත ලියන්නේ නැත. මෙම උපාංගයෙන් කිසිවක් පිටතට යන්නේ නැත.", "settings.calendar.intro_2": "— කියවීමට පමණි, ගොනුවට කිසිවක් නැවත ලියන්නේ නැත. මෙම උපාංගයෙන් කිසිවක් පිටතට යන්නේ නැත.",
"settings.calendar.requires": "ඔබගේ PATH තුළ මෙය අවශ්‍යයි (සමඟ ලැබෙන්නේ නැත):",
"settings.calendar.pst_file": ".pst ගොනුව", "settings.calendar.pst_file": ".pst ගොනුව",
"settings.calendar.no_file": "ගොනුවක් තෝරා නැත", "settings.calendar.no_file": "ගොනුවක් තෝරා නැත",
"settings.calendar.browse": "බ්‍රවුස් කරන්න…", "settings.calendar.browse": "බ්‍රවුස් කරන්න…",
@@ -278,6 +301,7 @@
"settings.privacy.locked_word": "අගුළු දමා ඇත", "settings.privacy.locked_word": "අගුළු දමා ඇත",
"settings.privacy.vault_locked_2": ". සංකේතනය කළ රැස්වීම් කියවීමට අගුළු හරින්න.", "settings.privacy.vault_locked_2": ". සංකේතනය කළ රැස්වීම් කියවීමට අගුළු හරින්න.",
"settings.privacy.password": "මුරපදය", "settings.privacy.password": "මුරපදය",
"settings.privacy.show_password": "මුරපදය පෙන්වන්න",
"settings.privacy.unlock": "අගුළු හරින්න", "settings.privacy.unlock": "අගුළු හරින්න",
"settings.privacy.vault_unlocked_1": "සුරක්ෂිතාගාරය ", "settings.privacy.vault_unlocked_1": "සුරක්ෂිතාගාරය ",
"settings.privacy.unlocked_word": "අගුළු හැර ඇත", "settings.privacy.unlocked_word": "අගුළු හැර ඇත",
@@ -320,12 +344,23 @@
"import.optional": "විකල්ප", "import.optional": "විකල්ප",
"import.title_placeholder": "පෙරනිමියෙන් ගොනුවේ නම", "import.title_placeholder": "පෙරනිමියෙන් ගොනුවේ නම",
"import.filter_av": "ශ්‍රව්‍ය / වීඩියෝ", "import.filter_av": "ශ්‍රව්‍ය / වීඩියෝ",
"import.requires_1": "අවශ්‍යයි", "import.model_label": "පිටපත්කරණ ආකෘතිය",
"import.requires_2": "ස්ථාපනය කර ඔබේ PATH හි (සහ", "import.model_hint": "කුමන ආකෘතියෙන් පිටපත් වූවාදැයි බැලීමට රැස්වීම සමඟ සටහන් වේ.",
"import.requires_3": "URL සඳහා). WhispAssist ඒවා ඇතුළත් නොකරයි.", "import.requires": "ඔබගේ PATH තුළ මේවා අවශ්‍යයි (සමඟ ලැබෙන්නේ නැත):",
"import.background_note": "පසුබිමේ ධාවනය වේ — ලැයිස්තුවෙන් ප්‍රගතිය බලන්න.",
"import.importing": "ආයාත වෙමින්… මෙයට යම් කාලයක් ගත විය හැක", "import.importing": "ආයාත වෙමින්… මෙයට යම් කාලයක් ගත විය හැක",
"import.import": "ආයාත කරන්න", "import.import": "ආයාත කරන්න",
"import.cancel": "අවලංගු කරන්න", "import.cancel": "අවලංගු කරන්න",
"import.tracker.label": "ආයාත ප්‍රගතිය",
"import.tracker.running": "ආයාත වෙමින්…",
"import.tracker.done": "ආයාතය සම්පූර්ණයි",
"import.tracker.failed": "ආයාතය අසාර්ථකයි",
"import.tracker.working": "ක්‍රියාත්මක වෙමින්…",
"import.tracker.stopped": "නවත්වා ඇත",
"import.phase.prepare": "ට්‍රාන්ස්කෝඩ්",
"import.phase.transcribe": "පිටපත් කිරීම",
"import.phase.diarize": "කථිකයන් හඳුනා ගැනීම",
"import.phase.finalize": "අවසන් කිරීම",
"tagchip.filter": "“{tag}” ටැගය සහිත රැස්වීම් පෙරන්න", "tagchip.filter": "“{tag}” ටැගය සහිත රැස්වීම් පෙරන්න",
"tagchip.remove": "{tag} ටැගය ඉවත් කරන්න", "tagchip.remove": "{tag} ටැගය ඉවත් කරන්න",
@@ -345,6 +380,10 @@
"app.cancel": "අවලංගු කරන්න", "app.cancel": "අවලංගු කරන්න",
"app.cancel_title": "මෙම පටිගත කිරීම ඉවත දමා මකන්න", "app.cancel_title": "මෙම පටිගත කිරීම ඉවත දමා මකන්න",
"app.recording": "පටිගත වෙමින්…", "app.recording": "පටිගත වෙමින්…",
"app.mute": "මයික්‍රෆෝනය නිහඬ කරන්න",
"app.unmute": "මයික්‍රෆෝනය සක්‍රීය කරන්න",
"app.mute_title": "මයික්‍රෆෝනය නිහඬ කරන්න (M)",
"app.unmute_title": "මයික්‍රෆෝනය සක්‍රීය කරන්න (M)",
"app.backend_title": "සක්‍රීය පිටපත් කිරීමේ පසුඅන්තය", "app.backend_title": "සක්‍රීය පිටපත් කිරීමේ පසුඅන්තය",
"app.retention_title": "මෙම රැස්වීම සඳහා ශ්‍රව්‍ය .wav ලෙස සුරකින්න", "app.retention_title": "මෙම රැස්වීම සඳහා ශ්‍රව්‍ය .wav ලෙස සුරකින්න",
"app.saving": "සුරකිමින්", "app.saving": "සුරකිමින්",
@@ -393,10 +432,15 @@
"meetings.status.error": "දෝෂය", "meetings.status.error": "දෝෂය",
"meetings.resume": "පිටපත් කිරීම නැවත ආරම්භ කරන්න", "meetings.resume": "පිටපත් කිරීම නැවත ආරම්භ කරන්න",
"meetings.delete_aria": "රැස්වීම මකන්න", "meetings.delete_aria": "රැස්වීම මකන්න",
"meetings.not_encrypted": "සංකේතනය කර නැත",
"meetings.encrypt": "සංකේතනය කරන්න",
"meetings.encrypting": "සංකේතනය වෙමින්…",
"meetings.encrypt_title": "මෙම රැස්වීමේ ගොනු සුරක්ෂිතාගාරයෙන් සංකේතනය කරන්න",
"meetings.delete_confirm": "මෙම රැස්වීම මකන්නද? මෙය එහි පටිගත කිරීම, පිටපත සහ සටහන් ඉවත් කරයි.", "meetings.delete_confirm": "මෙම රැස්වීම මකන්නද? මෙය එහි පටිගත කිරීම, පිටපත සහ සටහන් ඉවත් කරයි.",
"transcript.heading": "පිටපත", "transcript.heading": "පිටපත",
"transcript.title_aria": "රැස්වීමේ මාතෘකාව", "transcript.title_aria": "රැස්වීමේ මාතෘකාව",
"transcript.transcribed_with": "පිටපත් කළේ:",
"transcript.lang_title": "පිටපත් කිරීමේ භාෂාව", "transcript.lang_title": "පිටපත් කිරීමේ භාෂාව",
"transcript.lang_auto": "හඳුනා ගනිමින්…", "transcript.lang_auto": "හඳුනා ගනිමින්…",
"transcript.show": "පිටපත පෙන්වන්න", "transcript.show": "පිටපත පෙන්වන්න",
@@ -428,9 +472,18 @@
"notes.italic": "ඇල අකුරු", "notes.italic": "ඇල අකුරු",
"notes.h1": "ශීර්ෂය 1", "notes.h1": "ශීර්ෂය 1",
"notes.h2": "ශීර්ෂය 2", "notes.h2": "ශීර්ෂය 2",
"notes.h3": "ශීර්ෂය 3",
"notes.bullet": "බුලට් ලැයිස්තුව", "notes.bullet": "බුලට් ලැයිස්තුව",
"notes.numbered": "අංකිත ලැයිස්තුව",
"notes.quote": "උද්ධෘතය",
"notes.divider": "බෙදුම් ඉර",
"notes.checkbox_title": "සලකුණු කොටුව", "notes.checkbox_title": "සලකුණු කොටුව",
"notes.checkbox_aria": "සලකුණු කොටු ලැයිස්තු අයිතමය", "notes.checkbox_aria": "සලකුණු කොටු ලැයිස්තු අයිතමය",
"notes.enhance": "වැඩිදියුණු කරන්න",
"notes.enhancing": "වැඩිදියුණු කරමින්…",
"notes.enhance_title": "පිටපත ඇසුරෙන් මෙම සටහන් ව්‍යුහගත Markdown ලෙස පුළුල් කරන්න (AI)",
"notes.enhanced_note": "පිටපත ඇසුරෙන් සටහන් වැඩිදියුණු කරන ලදී.",
"notes.undo_enhance": "අහෝසි කරන්න",
"notes.edit_raw": "අමු markdown සංස්කරණය කරන්න", "notes.edit_raw": "අමු markdown සංස්කරණය කරන්න",
"notes.render": "markdown විදහන්න", "notes.render": "markdown විදහන්න",
"notes.editor": "සංස්කාරකය", "notes.editor": "සංස්කාරකය",
@@ -527,5 +580,9 @@
"settings.recording.consent_ack": "පිළිගත්තා", "settings.recording.consent_ack": "පිළිගත්තා",
"settings.recording.consent_not": "තවම පිළිගෙන නැත", "settings.recording.consent_not": "තවම පිළිගෙන නැත",
"settings.recording.auto_label": "දින දර්ශන සිදුවීමක් ආරම්භ වන විට ස්වයංක්‍රීයව පටිගත කිරීම ආරම්භ කරන්න", "settings.recording.auto_label": "දින දර්ශන සිදුවීමක් ආරම්භ වන විට ස්වයංක්‍රීයව පටිගත කිරීම ආරම්භ කරන්න",
"settings.recording.auto_hint": "WhispAssist විවෘතව තිබෙන විට පමණි. ආයාත කළ දින දර්ශන සිදුවීමක ආරම්භක වේලාව පැමිණි විට, පටිගත කිරීමක් ස්වයංක්‍රීයව ආරම්භ වේ (ඉහත ඔබේ පෙරනිමි රඳවා තබා ගැනීමේ සැකසුම භාවිත කරමින්). පසුබිමින් කිසිවක් ධාවනය නොවේ — යෙදුම ධාවනය වන විට පමණක් කාල නියාමකය සක්‍රීයයි. සැකසුම් → දින දර්ශනය යටතේ සිදුවීම් ආයාත කරන්න." "settings.recording.auto_hint": "WhispAssist විවෘතව තිබෙන විට පමණි. ආයාත කළ දින දර්ශන සිදුවීමක ආරම්භක වේලාව පැමිණි විට, පටිගත කිරීමක් ස්වයංක්‍රීයව ආරම්භ වේ (ඉහත ඔබේ පෙරනිමි රඳවා තබා ගැනීමේ සැකසුම භාවිත කරමින්). පසුබිමින් කිසිවක් ධාවනය නොවේ — යෙදුම ධාවනය වන විට පමණක් කාල නියාමකය සක්‍රීයයි. සැකසුම් → දින දර්ශනය යටතේ සිදුවීම් ආයාත කරන්න.",
"settings.recording.autostart_label": "පිවිසීමේදී WhispAssist අරඹන්න",
"settings.recording.autostart_hint": "Windows වෙත පිවිසෙන විට WhispAssist ස්වයංක්‍රීයව අරඹයි. පෙරනිමියෙන් අක්‍රීයයි; පරිශීලකයාට පමණක් අදාළ ආරම්භක සටහනක් ස්ථාපනය කරයි (පරිපාලක අවශ්‍ය නැත), තනිවම පටිගත කිරීම අරඹන්නේ නැත.",
"settings.recording.close_tray_label": "පද්ධති තැටියට වසන්න",
"settings.recording.close_tray_hint": "කවුළුව වැසූ විට WhispAssist වැසී යනවා වෙනුවට පසුබිමේ ක්‍රියාත්මකව පවතී. තැටි නිරූපකයෙන් නැවත විවෘත කරන්න; සම්පූර්ණයෙන් වැසීමට තැටියේ 'ඉවත් වන්න' භාවිතා කරන්න. පෙරනිමියෙන් සක්‍රීයයි."
} }
+61 -4
View File
@@ -24,6 +24,25 @@
"settings.transcription.switch_multilingual": "Byt till en flerspråkig modell ovan för att välja ett språk.", "settings.transcription.switch_multilingual": "Byt till en flerspråkig modell ovan för att välja ett språk.",
"settings.hardware.title": "Maskinvara", "settings.hardware.title": "Maskinvara",
"settings.hardware.refresh": "Uppdatera",
"settings.hardware.test_output": "Testa",
"settings.hardware.test_mic": "Testa",
"settings.hardware.testing": "Lyssnar…",
"settings.hardware.play_tone": "Spela upp ton",
"settings.hardware.stress_title": "Snabbt stresstest",
"settings.hardware.stress_hint": "Mäter de installerade modellerna på varje tillgänglig backend och rekommenderar den mest träffsäkra som hinner med live-tal. Tar en stund.",
"settings.hardware.stress_run": "Kör stresstest",
"settings.hardware.stress_running": "Kör…",
"settings.hardware.stress_progress": "Mäter {pair}…",
"settings.hardware.stress_recommend": "Rekommenderas: {backend} + {model}",
"settings.hardware.stress_apply": "Använd",
"settings.hardware.stress_none": "Ingen installerad modell hinner med live-tal på den här hårdvaran — prova en mindre modell.",
"settings.hardware.stress_backend": "Backend",
"settings.hardware.stress_model": "Modell",
"settings.hardware.stress_rtf": "Hastighet (×realtid)",
"settings.hardware.stress_realtime": "Live?",
"settings.hardware.stress_yes": "Ja",
"settings.hardware.stress_no": "Nej",
"settings.hardware.active_backend": "Aktiv backend", "settings.hardware.active_backend": "Aktiv backend",
"settings.hardware.model_meta": "· modell {size}", "settings.hardware.model_meta": "· modell {size}",
"settings.hardware.preferred_backend": "Föredragen backend", "settings.hardware.preferred_backend": "Föredragen backend",
@@ -56,6 +75,9 @@
"settings.hardware.downloading_model": "Laddar ner {name}", "settings.hardware.downloading_model": "Laddar ner {name}",
"settings.hardware.active_badge": "Aktiv", "settings.hardware.active_badge": "Aktiv",
"settings.hardware.installed": "Installerad", "settings.hardware.installed": "Installerad",
"settings.hardware.quantization_for": "Kvantisering för {name}",
"settings.hardware.quant_recommended": "{quant} · rekommenderas",
"settings.hardware.quant_higher": "{quant} · högre kvalitet, större",
"settings.hardware.use": "Använd", "settings.hardware.use": "Använd",
"settings.hardware.remove": "Ta bort", "settings.hardware.remove": "Ta bort",
"settings.hardware.cant_remove_active": "Kan inte ta bort den aktiva modellen", "settings.hardware.cant_remove_active": "Kan inte ta bort den aktiva modellen",
@@ -88,6 +110,7 @@
"settings.calendar.title": "Kalender och Outlook .pst", "settings.calendar.title": "Kalender och Outlook .pst",
"settings.calendar.intro_1": "Importera händelser och deltagare från en lokal Outlook-", "settings.calendar.intro_1": "Importera händelser och deltagare från en lokal Outlook-",
"settings.calendar.intro_2": "säkerhetskopia — skrivskyddad, inget skrivs tillbaka till filen. Inget lämnar den här enheten.", "settings.calendar.intro_2": "säkerhetskopia — skrivskyddad, inget skrivs tillbaka till filen. Inget lämnar den här enheten.",
"settings.calendar.requires": "Kräver detta i din PATH (medföljer inte):",
"settings.calendar.pst_file": ".pst-fil", "settings.calendar.pst_file": ".pst-fil",
"settings.calendar.no_file": "Ingen fil vald", "settings.calendar.no_file": "Ingen fil vald",
"settings.calendar.browse": "Bläddra…", "settings.calendar.browse": "Bläddra…",
@@ -278,6 +301,7 @@
"settings.privacy.locked_word": "låst", "settings.privacy.locked_word": "låst",
"settings.privacy.vault_locked_2": ". Lås upp för att läsa krypterade möten.", "settings.privacy.vault_locked_2": ". Lås upp för att läsa krypterade möten.",
"settings.privacy.password": "Lösenord", "settings.privacy.password": "Lösenord",
"settings.privacy.show_password": "Visa lösenord",
"settings.privacy.unlock": "Lås upp", "settings.privacy.unlock": "Lås upp",
"settings.privacy.vault_unlocked_1": "Valvet är ", "settings.privacy.vault_unlocked_1": "Valvet är ",
"settings.privacy.unlocked_word": "upplåst", "settings.privacy.unlocked_word": "upplåst",
@@ -320,12 +344,23 @@
"import.optional": "valfritt", "import.optional": "valfritt",
"import.title_placeholder": "Standard är filnamnet", "import.title_placeholder": "Standard är filnamnet",
"import.filter_av": "Ljud / video", "import.filter_av": "Ljud / video",
"import.requires_1": "Kräver", "import.model_label": "Transkriberingsmodell",
"import.requires_2": "installerat och i din PATH (plus", "import.model_hint": "Sparas med mötet så att du ser hur det transkriberades.",
"import.requires_3": "för URL:er). WhispAssist levererar dem inte.", "import.requires": "Kräver dessa i din PATH (medföljer inte):",
"import.background_note": "Körs i bakgrunden — följ förloppet i listan.",
"import.importing": "Importerar… detta kan ta en stund", "import.importing": "Importerar… detta kan ta en stund",
"import.import": "Importera", "import.import": "Importera",
"import.cancel": "Avbryt", "import.cancel": "Avbryt",
"import.tracker.label": "Importförlopp",
"import.tracker.running": "Importerar…",
"import.tracker.done": "Import klar",
"import.tracker.failed": "Import misslyckades",
"import.tracker.working": "arbetar…",
"import.tracker.stopped": "stoppad",
"import.phase.prepare": "Omkoda",
"import.phase.transcribe": "Transkribera",
"import.phase.diarize": "Identifiera talare",
"import.phase.finalize": "Slutför",
"tagchip.filter": "Filtrera möten taggade ”{tag}”", "tagchip.filter": "Filtrera möten taggade ”{tag}”",
"tagchip.remove": "Ta bort taggen {tag}", "tagchip.remove": "Ta bort taggen {tag}",
@@ -345,6 +380,10 @@
"app.cancel": "Avbryt", "app.cancel": "Avbryt",
"app.cancel_title": "Kassera den här inspelningen och ta bort den", "app.cancel_title": "Kassera den här inspelningen och ta bort den",
"app.recording": "Spelar in…", "app.recording": "Spelar in…",
"app.mute": "Stäng av mikrofonen",
"app.unmute": "Slå på mikrofonen",
"app.mute_title": "Stäng av mikrofonen (M)",
"app.unmute_title": "Slå på mikrofonen (M)",
"app.backend_title": "Aktiv transkriberingsbackend", "app.backend_title": "Aktiv transkriberingsbackend",
"app.retention_title": "Spara ljud som .wav för det här mötet", "app.retention_title": "Spara ljud som .wav för det här mötet",
"app.saving": "sparar", "app.saving": "sparar",
@@ -393,10 +432,15 @@
"meetings.status.error": "fel", "meetings.status.error": "fel",
"meetings.resume": "Återuppta transkription", "meetings.resume": "Återuppta transkription",
"meetings.delete_aria": "Ta bort möte", "meetings.delete_aria": "Ta bort möte",
"meetings.not_encrypted": "Inte krypterad",
"meetings.encrypt": "Kryptera",
"meetings.encrypting": "Krypterar…",
"meetings.encrypt_title": "Kryptera mötets filer med valvet",
"meetings.delete_confirm": "Ta bort det här mötet? Detta tar bort dess inspelning, transkription och anteckningar.", "meetings.delete_confirm": "Ta bort det här mötet? Detta tar bort dess inspelning, transkription och anteckningar.",
"transcript.heading": "Transkription", "transcript.heading": "Transkription",
"transcript.title_aria": "Mötestitel", "transcript.title_aria": "Mötestitel",
"transcript.transcribed_with": "Transkriberad med",
"transcript.lang_title": "Transkriberingsspråk", "transcript.lang_title": "Transkriberingsspråk",
"transcript.lang_auto": "identifierar…", "transcript.lang_auto": "identifierar…",
"transcript.show": "Visa transkription", "transcript.show": "Visa transkription",
@@ -428,9 +472,18 @@
"notes.italic": "Kursiv", "notes.italic": "Kursiv",
"notes.h1": "Rubrik 1", "notes.h1": "Rubrik 1",
"notes.h2": "Rubrik 2", "notes.h2": "Rubrik 2",
"notes.h3": "Rubrik 3",
"notes.bullet": "Punktlista", "notes.bullet": "Punktlista",
"notes.numbered": "Numrerad lista",
"notes.quote": "Citat",
"notes.divider": "Avdelare",
"notes.checkbox_title": "Kryssruta", "notes.checkbox_title": "Kryssruta",
"notes.checkbox_aria": "Listobjekt med kryssruta", "notes.checkbox_aria": "Listobjekt med kryssruta",
"notes.enhance": "Förbättra",
"notes.enhancing": "Förbättrar…",
"notes.enhance_title": "Utöka anteckningarna till strukturerad Markdown med hjälp av transkriptet (AI)",
"notes.enhanced_note": "Anteckningar förbättrade utifrån transkriptet.",
"notes.undo_enhance": "Ångra",
"notes.edit_raw": "Redigera rå markdown", "notes.edit_raw": "Redigera rå markdown",
"notes.render": "Rendera markdown", "notes.render": "Rendera markdown",
"notes.editor": "Redigerare", "notes.editor": "Redigerare",
@@ -527,5 +580,9 @@
"settings.recording.consent_ack": "bekräftat", "settings.recording.consent_ack": "bekräftat",
"settings.recording.consent_not": "ännu inte bekräftat", "settings.recording.consent_not": "ännu inte bekräftat",
"settings.recording.auto_label": "Starta inspelning automatiskt när en kalenderhändelse börjar", "settings.recording.auto_label": "Starta inspelning automatiskt när en kalenderhändelse börjar",
"settings.recording.auto_hint": "Endast medan WhispAssist är öppet. När starttiden för en importerad kalenderhändelse infaller startar en inspelning automatiskt (med din standardinställning för kvarhållning ovan). Inget körs i bakgrunden — timern är bara aktiverad medan appen körs. Importera händelser under Inställningar → Kalender." "settings.recording.auto_hint": "Endast medan WhispAssist är öppet. När starttiden för en importerad kalenderhändelse infaller startar en inspelning automatiskt (med din standardinställning för kvarhållning ovan). Inget körs i bakgrunden — timern är bara aktiverad medan appen körs. Importera händelser under Inställningar → Kalender.",
"settings.recording.autostart_label": "Starta WhispAssist vid inloggning",
"settings.recording.autostart_hint": "Startar WhispAssist automatiskt när du loggar in i Windows. Av som standard; installerar en startpost per användare (inga administratörsrättigheter krävs) och börjar aldrig spela in av sig själv.",
"settings.recording.close_tray_label": "Stäng till systemfältet",
"settings.recording.close_tray_hint": "När fönstret stängs fortsätter WhispAssist att köras i bakgrunden i stället för att avslutas. Öppna igen från ikonen i systemfältet; välj Avsluta där för att stänga helt. På som standard."
} }
+61 -4
View File
@@ -24,6 +24,25 @@
"settings.transcription.switch_multilingual": "ஒரு மொழியைத் தேர்ந்தெடுக்க மேலே ஒரு பன்மொழி மாதிரிக்கு மாறவும்.", "settings.transcription.switch_multilingual": "ஒரு மொழியைத் தேர்ந்தெடுக்க மேலே ஒரு பன்மொழி மாதிரிக்கு மாறவும்.",
"settings.hardware.title": "வன்பொருள்", "settings.hardware.title": "வன்பொருள்",
"settings.hardware.refresh": "புதுப்பி",
"settings.hardware.test_output": "சோதனை",
"settings.hardware.test_mic": "சோதனை",
"settings.hardware.testing": "கேட்கிறது…",
"settings.hardware.play_tone": "ஒலியை இயக்கு",
"settings.hardware.stress_title": "விரைவு அழுத்தச் சோதனை",
"settings.hardware.stress_hint": "நிறுவப்பட்ட மாதிரிகளை கிடைக்கும் ஒவ்வொரு பின்புலத்திலும் அளவிட்டு, நேரடி பேச்சின் வேகத்தை ஈடுகொடுக்கும் மிகத் துல்லியமான மாதிரியைப் பரிந்துரைக்கிறது. சிறிது நேரம் ஆகும்.",
"settings.hardware.stress_run": "அழுத்தச் சோதனையை இயக்கு",
"settings.hardware.stress_running": "இயங்குகிறது…",
"settings.hardware.stress_progress": "{pair} அளவிடப்படுகிறது…",
"settings.hardware.stress_recommend": "பரிந்துரை: {backend} + {model}",
"settings.hardware.stress_apply": "பயன்படுத்து",
"settings.hardware.stress_none": "இந்த வன்பொருளில் நிறுவப்பட்ட எந்த மாதிரியும் நேரடி பேச்சின் வேகத்தை ஈடுகொடுக்கவில்லை — சிறிய மாதிரியை முயற்சிக்கவும்.",
"settings.hardware.stress_backend": "பின்புலம்",
"settings.hardware.stress_model": "மாதிரி",
"settings.hardware.stress_rtf": "வேகம் (×நிகழ்நேரம்)",
"settings.hardware.stress_realtime": "நேரடி?",
"settings.hardware.stress_yes": "ஆம்",
"settings.hardware.stress_no": "இல்லை",
"settings.hardware.active_backend": "செயலில் உள்ள பின்தளம்", "settings.hardware.active_backend": "செயலில் உள்ள பின்தளம்",
"settings.hardware.model_meta": "· மாதிரி {size}", "settings.hardware.model_meta": "· மாதிரி {size}",
"settings.hardware.preferred_backend": "விருப்பமான பின்தளம்", "settings.hardware.preferred_backend": "விருப்பமான பின்தளம்",
@@ -56,6 +75,9 @@
"settings.hardware.downloading_model": "{name} பதிவிறக்குகிறது", "settings.hardware.downloading_model": "{name} பதிவிறக்குகிறது",
"settings.hardware.active_badge": "செயலில்", "settings.hardware.active_badge": "செயலில்",
"settings.hardware.installed": "நிறுவப்பட்டது", "settings.hardware.installed": "நிறுவப்பட்டது",
"settings.hardware.quantization_for": "{name}க்கான குவாண்டைசேஷன்",
"settings.hardware.quant_recommended": "{quant} · பரிந்துரைக்கப்படுகிறது",
"settings.hardware.quant_higher": "{quant} · உயர் தரம், பெரியது",
"settings.hardware.use": "பயன்படுத்து", "settings.hardware.use": "பயன்படுத்து",
"settings.hardware.remove": "அகற்று", "settings.hardware.remove": "அகற்று",
"settings.hardware.cant_remove_active": "செயலில் உள்ள மாதிரியை அகற்ற முடியாது", "settings.hardware.cant_remove_active": "செயலில் உள்ள மாதிரியை அகற்ற முடியாது",
@@ -88,6 +110,7 @@
"settings.calendar.title": "நாட்காட்டி & Outlook .pst", "settings.calendar.title": "நாட்காட்டி & Outlook .pst",
"settings.calendar.intro_1": "ஒரு உள்ளூர் Outlook காப்புப்பிரதியிலிருந்து நிகழ்வுகளையும் பங்கேற்பாளர்களையும் இறக்குமதி செய்யவும்", "settings.calendar.intro_1": "ஒரு உள்ளூர் Outlook காப்புப்பிரதியிலிருந்து நிகழ்வுகளையும் பங்கேற்பாளர்களையும் இறக்குமதி செய்யவும்",
"settings.calendar.intro_2": "— படிக்க மட்டும், கோப்பிற்கு எதுவும் மீண்டும் எழுதப்படாது. இந்தச் சாதனத்திலிருந்து எதுவும் வெளியேறாது.", "settings.calendar.intro_2": "— படிக்க மட்டும், கோப்பிற்கு எதுவும் மீண்டும் எழுதப்படாது. இந்தச் சாதனத்திலிருந்து எதுவும் வெளியேறாது.",
"settings.calendar.requires": "உங்கள் PATH-இல் இது தேவை (உடன் வழங்கப்படவில்லை):",
"settings.calendar.pst_file": ".pst கோப்பு", "settings.calendar.pst_file": ".pst கோப்பு",
"settings.calendar.no_file": "கோப்பு எதுவும் தேர்ந்தெடுக்கப்படவில்லை", "settings.calendar.no_file": "கோப்பு எதுவும் தேர்ந்தெடுக்கப்படவில்லை",
"settings.calendar.browse": "உலாவு…", "settings.calendar.browse": "உலாவு…",
@@ -278,6 +301,7 @@
"settings.privacy.locked_word": "பூட்டப்பட்டுள்ளது", "settings.privacy.locked_word": "பூட்டப்பட்டுள்ளது",
"settings.privacy.vault_locked_2": ". மறையாக்கப்பட்ட கூட்டங்களைப் படிக்க திறக்கவும்.", "settings.privacy.vault_locked_2": ". மறையாக்கப்பட்ட கூட்டங்களைப் படிக்க திறக்கவும்.",
"settings.privacy.password": "கடவுச்சொல்", "settings.privacy.password": "கடவுச்சொல்",
"settings.privacy.show_password": "கடவுச்சொல்லைக் காட்டு",
"settings.privacy.unlock": "திற", "settings.privacy.unlock": "திற",
"settings.privacy.vault_unlocked_1": "பெட்டகம் ", "settings.privacy.vault_unlocked_1": "பெட்டகம் ",
"settings.privacy.unlocked_word": "திறக்கப்பட்டுள்ளது", "settings.privacy.unlocked_word": "திறக்கப்பட்டுள்ளது",
@@ -320,12 +344,23 @@
"import.optional": "விருப்பமானது", "import.optional": "விருப்பமானது",
"import.title_placeholder": "இயல்பாகக் கோப்பின் பெயர்", "import.title_placeholder": "இயல்பாகக் கோப்பின் பெயர்",
"import.filter_av": "ஒலி / வீடியோ", "import.filter_av": "ஒலி / வீடியோ",
"import.requires_1": "தேவை", "import.model_label": "எழுத்தாக்க மாதிரி",
"import.requires_2": "நிறுவப்பட்டு உங்கள் PATH இல் (மேலும்", "import.model_hint": "எந்த மாதிரியால் எழுத்தாக்கம் செய்யப்பட்டது என்பதைக் காண, கூட்டத்துடன் சேமிக்கப்படுகிறது.",
"import.requires_3": "URL-களுக்கு). WhispAssist அவற்றை உள்ளடக்காது.", "import.requires": "உங்கள் PATH-இல் இவை தேவை (உடன் வழங்கப்படவில்லை):",
"import.background_note": "பின்னணியில் இயங்கும் — பட்டியலில் முன்னேற்றத்தைக் கண்காணிக்கவும்.",
"import.importing": "இறக்குமதி செய்கிறது… இதற்கு சிறிது நேரம் ஆகலாம்", "import.importing": "இறக்குமதி செய்கிறது… இதற்கு சிறிது நேரம் ஆகலாம்",
"import.import": "இறக்குமதி செய்", "import.import": "இறக்குமதி செய்",
"import.cancel": "ரத்து செய்", "import.cancel": "ரத்து செய்",
"import.tracker.label": "இறக்குமதி முன்னேற்றம்",
"import.tracker.running": "இறக்குமதி நடக்கிறது…",
"import.tracker.done": "இறக்குமதி முடிந்தது",
"import.tracker.failed": "இறக்குமதி தோல்வி",
"import.tracker.working": "வேலை நடக்கிறது…",
"import.tracker.stopped": "நிறுத்தப்பட்டது",
"import.phase.prepare": "மறுகுறியாக்கம்",
"import.phase.transcribe": "எழுத்தாக்கம்",
"import.phase.diarize": "பேச்சாளர்களை அடையாளம் காணல்",
"import.phase.finalize": "இறுதி செய்தல்",
"tagchip.filter": "“{tag}” குறிச்சொல் கொண்ட கூட்டங்களை வடிகட்டு", "tagchip.filter": "“{tag}” குறிச்சொல் கொண்ட கூட்டங்களை வடிகட்டு",
"tagchip.remove": "குறிச்சொல் {tag} ஐ அகற்று", "tagchip.remove": "குறிச்சொல் {tag} ஐ அகற்று",
@@ -345,6 +380,10 @@
"app.cancel": "ரத்து செய்", "app.cancel": "ரத்து செய்",
"app.cancel_title": "இந்தப் பதிவை நிராகரித்து நீக்கு", "app.cancel_title": "இந்தப் பதிவை நிராகரித்து நீக்கு",
"app.recording": "பதிவு செய்கிறது…", "app.recording": "பதிவு செய்கிறது…",
"app.mute": "ஒலிவாங்கியை முடக்கு",
"app.unmute": "ஒலிவாங்கியை இயக்கு",
"app.mute_title": "ஒலிவாங்கியை முடக்கு (M)",
"app.unmute_title": "ஒலிவாங்கியை இயக்கு (M)",
"app.backend_title": "செயலில் உள்ள படியெடுப்பு பின்தளம்", "app.backend_title": "செயலில் உள்ள படியெடுப்பு பின்தளம்",
"app.retention_title": "இந்தக் கூட்டத்திற்கு ஒலியை .wav ஆகச் சேமி", "app.retention_title": "இந்தக் கூட்டத்திற்கு ஒலியை .wav ஆகச் சேமி",
"app.saving": "சேமிக்கிறது", "app.saving": "சேமிக்கிறது",
@@ -393,10 +432,15 @@
"meetings.status.error": "பிழை", "meetings.status.error": "பிழை",
"meetings.resume": "படியெடுப்பைத் தொடர்", "meetings.resume": "படியெடுப்பைத் தொடர்",
"meetings.delete_aria": "கூட்டத்தை நீக்கு", "meetings.delete_aria": "கூட்டத்தை நீக்கு",
"meetings.not_encrypted": "மறைகுறியாக்கப்படவில்லை",
"meetings.encrypt": "மறைகுறியாக்கு",
"meetings.encrypting": "மறைகுறியாக்கப்படுகிறது…",
"meetings.encrypt_title": "இந்தக் கூட்டத்தின் கோப்புகளை காப்பகத்தால் மறைகுறியாக்கவும்",
"meetings.delete_confirm": "இந்தக் கூட்டத்தை நீக்கவா? இது அதன் பதிவு, படியெடுப்பு மற்றும் குறிப்புகளை அகற்றும்.", "meetings.delete_confirm": "இந்தக் கூட்டத்தை நீக்கவா? இது அதன் பதிவு, படியெடுப்பு மற்றும் குறிப்புகளை அகற்றும்.",
"transcript.heading": "படியெடுப்பு", "transcript.heading": "படியெடுப்பு",
"transcript.title_aria": "கூட்டத் தலைப்பு", "transcript.title_aria": "கூட்டத் தலைப்பு",
"transcript.transcribed_with": "எழுத்தாக்கம் செய்தது:",
"transcript.lang_title": "படியெடுப்பு மொழி", "transcript.lang_title": "படியெடுப்பு மொழி",
"transcript.lang_auto": "கண்டறிகிறது…", "transcript.lang_auto": "கண்டறிகிறது…",
"transcript.show": "படியெடுப்பைக் காட்டு", "transcript.show": "படியெடுப்பைக் காட்டு",
@@ -428,9 +472,18 @@
"notes.italic": "சாய்வு", "notes.italic": "சாய்வு",
"notes.h1": "தலைப்பு 1", "notes.h1": "தலைப்பு 1",
"notes.h2": "தலைப்பு 2", "notes.h2": "தலைப்பு 2",
"notes.h3": "தலைப்பு 3",
"notes.bullet": "புள்ளிப் பட்டியல்", "notes.bullet": "புள்ளிப் பட்டியல்",
"notes.numbered": "எண்ணிடப்பட்ட பட்டியல்",
"notes.quote": "மேற்கோள்",
"notes.divider": "பிரிப்பான்",
"notes.checkbox_title": "தேர்வுப்பெட்டி", "notes.checkbox_title": "தேர்வுப்பெட்டி",
"notes.checkbox_aria": "தேர்வுப்பெட்டி பட்டியல் உருப்படி", "notes.checkbox_aria": "தேர்வுப்பெட்டி பட்டியல் உருப்படி",
"notes.enhance": "மேம்படுத்து",
"notes.enhancing": "மேம்படுத்தப்படுகிறது…",
"notes.enhance_title": "எழுத்தாக்கத்தைப் பயன்படுத்தி இந்தக் குறிப்புகளை கட்டமைந்த Markdown ஆக விரிவாக்கவும் (AI)",
"notes.enhanced_note": "எழுத்தாக்கத்திலிருந்து குறிப்புகள் மேம்படுத்தப்பட்டன.",
"notes.undo_enhance": "செயல்தவிர்",
"notes.edit_raw": "மூல markdown ஐத் திருத்து", "notes.edit_raw": "மூல markdown ஐத் திருத்து",
"notes.render": "markdown ஐ வழங்கு", "notes.render": "markdown ஐ வழங்கு",
"notes.editor": "திருத்தி", "notes.editor": "திருத்தி",
@@ -527,5 +580,9 @@
"settings.recording.consent_ack": "ஒப்புக்கொள்ளப்பட்டது", "settings.recording.consent_ack": "ஒப்புக்கொள்ளப்பட்டது",
"settings.recording.consent_not": "இன்னும் ஒப்புக்கொள்ளப்படவில்லை", "settings.recording.consent_not": "இன்னும் ஒப்புக்கொள்ளப்படவில்லை",
"settings.recording.auto_label": "ஒரு நாட்காட்டி நிகழ்வு தொடங்கும்போது பதிவைத் தானாகத் தொடங்கு", "settings.recording.auto_label": "ஒரு நாட்காட்டி நிகழ்வு தொடங்கும்போது பதிவைத் தானாகத் தொடங்கு",
"settings.recording.auto_hint": "WhispAssist திறந்திருக்கும்போது மட்டும். இறக்குமதி செய்யப்பட்ட நாட்காட்டி நிகழ்வின் தொடக்க நேரம் வரும்போது, ஒரு பதிவு தானாகத் தொடங்கும் (மேலே உள்ள உங்கள் இயல்புநிலை தக்கவைப்பு அமைப்பைப் பயன்படுத்தி). பின்னணியில் எதுவும் இயங்காது — பயன்பாடு இயங்கும்போது மட்டுமே டைமர் தயார்நிலையில் இருக்கும். அமைப்புகள் → நாட்காட்டியின் கீழ் நிகழ்வுகளை இறக்குமதி செய்யவும்." "settings.recording.auto_hint": "WhispAssist திறந்திருக்கும்போது மட்டும். இறக்குமதி செய்யப்பட்ட நாட்காட்டி நிகழ்வின் தொடக்க நேரம் வரும்போது, ஒரு பதிவு தானாகத் தொடங்கும் (மேலே உள்ள உங்கள் இயல்புநிலை தக்கவைப்பு அமைப்பைப் பயன்படுத்தி). பின்னணியில் எதுவும் இயங்காது — பயன்பாடு இயங்கும்போது மட்டுமே டைமர் தயார்நிலையில் இருக்கும். அமைப்புகள் → நாட்காட்டியின் கீழ் நிகழ்வுகளை இறக்குமதி செய்யவும்.",
"settings.recording.autostart_label": "உள்நுழைவின்போது WhispAssist ஐத் தொடங்கு",
"settings.recording.autostart_hint": "Windows-இல் உள்நுழையும்போது WhispAssist தானாகத் தொடங்கும். இயல்பாக முடக்கப்பட்டுள்ளது; பயனர் அளவிலான தொடக்கப் பதிவை நிறுவுகிறது (நிர்வாகி தேவையில்லை), தானாகப் பதிவு செய்யத் தொடங்காது.",
"settings.recording.close_tray_label": "சிஸ்டம் ட்ரேக்கு மூடு",
"settings.recording.close_tray_hint": "சாளரத்தை மூடினால் WhispAssist வெளியேறாமல் பின்னணியில் இயங்கிக் கொண்டிருக்கும். ட்ரே ஐகானில் இருந்து மீண்டும் திறக்கவும்; முழுமையாக வெளியேற ட்ரேயின் 'வெளியேறு' ஐப் பயன்படுத்தவும். இயல்பாக இயக்கத்தில் உள்ளது."
} }
+61 -4
View File
@@ -24,6 +24,25 @@
"settings.transcription.switch_multilingual": "زبان منتخب کرنے کے لیے اوپر کسی کثیر لسانی ماڈل پر سوئچ کریں۔", "settings.transcription.switch_multilingual": "زبان منتخب کرنے کے لیے اوپر کسی کثیر لسانی ماڈل پر سوئچ کریں۔",
"settings.hardware.title": "ہارڈ ویئر", "settings.hardware.title": "ہارڈ ویئر",
"settings.hardware.refresh": "تازہ کریں",
"settings.hardware.test_output": "آزمائیں",
"settings.hardware.test_mic": "آزمائیں",
"settings.hardware.testing": "سن رہا ہے…",
"settings.hardware.play_tone": "ٹون چلائیں",
"settings.hardware.stress_title": "فوری اسٹریس ٹیسٹ",
"settings.hardware.stress_hint": "انسٹال شدہ ماڈلز کو ہر دستیاب بیک اینڈ پر جانچتا ہے اور سب سے درست ماڈل تجویز کرتا ہے جو براہِ راست گفتگو کی رفتار برقرار رکھ سکے۔ اس میں کچھ وقت لگتا ہے۔",
"settings.hardware.stress_run": "اسٹریس ٹیسٹ چلائیں",
"settings.hardware.stress_running": "جاری ہے…",
"settings.hardware.stress_progress": "{pair} کی جانچ جاری ہے…",
"settings.hardware.stress_recommend": "تجویز کردہ: {backend} + {model}",
"settings.hardware.stress_apply": "لاگو کریں",
"settings.hardware.stress_none": "اس ہارڈویئر پر کوئی بھی انسٹال شدہ ماڈل براہِ راست گفتگو کی رفتار برقرار نہیں رکھ پاتا — کوئی چھوٹا ماڈل آزمائیں۔",
"settings.hardware.stress_backend": "بیک اینڈ",
"settings.hardware.stress_model": "ماڈل",
"settings.hardware.stress_rtf": "رفتار (×اصل وقت)",
"settings.hardware.stress_realtime": "براہِ راست؟",
"settings.hardware.stress_yes": "ہاں",
"settings.hardware.stress_no": "نہیں",
"settings.hardware.active_backend": "فعال بیک اینڈ", "settings.hardware.active_backend": "فعال بیک اینڈ",
"settings.hardware.model_meta": "· ماڈل {size}", "settings.hardware.model_meta": "· ماڈل {size}",
"settings.hardware.preferred_backend": "ترجیحی بیک اینڈ", "settings.hardware.preferred_backend": "ترجیحی بیک اینڈ",
@@ -56,6 +75,9 @@
"settings.hardware.downloading_model": "{name} ڈاؤن لوڈ ہو رہا ہے", "settings.hardware.downloading_model": "{name} ڈاؤن لوڈ ہو رہا ہے",
"settings.hardware.active_badge": "فعال", "settings.hardware.active_badge": "فعال",
"settings.hardware.installed": "انسٹال شدہ", "settings.hardware.installed": "انسٹال شدہ",
"settings.hardware.quantization_for": "{name} کے لیے کوانٹائزیشن",
"settings.hardware.quant_recommended": "{quant} · تجویز کردہ",
"settings.hardware.quant_higher": "{quant} · بہتر معیار، بڑا",
"settings.hardware.use": "استعمال کریں", "settings.hardware.use": "استعمال کریں",
"settings.hardware.remove": "ہٹائیں", "settings.hardware.remove": "ہٹائیں",
"settings.hardware.cant_remove_active": "فعال ماڈل کو نہیں ہٹایا جا سکتا", "settings.hardware.cant_remove_active": "فعال ماڈل کو نہیں ہٹایا جا سکتا",
@@ -88,6 +110,7 @@
"settings.calendar.title": "کیلنڈر اور Outlook ‏.pst", "settings.calendar.title": "کیلنڈر اور Outlook ‏.pst",
"settings.calendar.intro_1": "ایک مقامی Outlook بیک اپ سے ایونٹس اور شرکاء درآمد کریں", "settings.calendar.intro_1": "ایک مقامی Outlook بیک اپ سے ایونٹس اور شرکاء درآمد کریں",
"settings.calendar.intro_2": "— صرف پڑھنے کے لیے، فائل میں کچھ بھی واپس نہیں لکھا جاتا۔ اس آلے سے کچھ بھی باہر نہیں جاتا۔", "settings.calendar.intro_2": "— صرف پڑھنے کے لیے، فائل میں کچھ بھی واپس نہیں لکھا جاتا۔ اس آلے سے کچھ بھی باہر نہیں جاتا۔",
"settings.calendar.requires": "آپ کے PATH میں یہ درکار ہے (ساتھ شامل نہیں):",
"settings.calendar.pst_file": "‏.pst فائل", "settings.calendar.pst_file": "‏.pst فائل",
"settings.calendar.no_file": "کوئی فائل منتخب نہیں", "settings.calendar.no_file": "کوئی فائل منتخب نہیں",
"settings.calendar.browse": "براؤز کریں…", "settings.calendar.browse": "براؤز کریں…",
@@ -278,6 +301,7 @@
"settings.privacy.locked_word": "مقفل", "settings.privacy.locked_word": "مقفل",
"settings.privacy.vault_locked_2": " ہے۔ خفیہ شدہ میٹنگز پڑھنے کے لیے ان لاک کریں۔", "settings.privacy.vault_locked_2": " ہے۔ خفیہ شدہ میٹنگز پڑھنے کے لیے ان لاک کریں۔",
"settings.privacy.password": "پاس ورڈ", "settings.privacy.password": "پاس ورڈ",
"settings.privacy.show_password": "پاس ورڈ دکھائیں",
"settings.privacy.unlock": "ان لاک کریں", "settings.privacy.unlock": "ان لاک کریں",
"settings.privacy.vault_unlocked_1": "والٹ ", "settings.privacy.vault_unlocked_1": "والٹ ",
"settings.privacy.unlocked_word": "ان لاک", "settings.privacy.unlocked_word": "ان لاک",
@@ -320,12 +344,23 @@
"import.optional": "اختیاری", "import.optional": "اختیاری",
"import.title_placeholder": "بطور ڈیفالٹ فائل کا نام", "import.title_placeholder": "بطور ڈیفالٹ فائل کا نام",
"import.filter_av": "آڈیو / ویڈیو", "import.filter_av": "آڈیو / ویڈیو",
"import.requires_1": "درکار ہے", "import.model_label": "نقل نویسی ماڈل",
"import.requires_2": "انسٹال شدہ اور آپ کے PATH میں (اور", "import.model_hint": "میٹنگ کے ساتھ محفوظ ہوتا ہے تاکہ معلوم ہو کہ نقل نویسی کس سے ہوئی۔",
"import.requires_3": "URLs کے لیے)۔ WhispAssist انہیں شامل نہیں کرتا۔", "import.requires": "آپ کے PATH میں یہ درکار ہیں (ساتھ شامل نہیں):",
"import.background_note": "پس منظر میں چلتا ہے — فہرست میں پیش رفت دیکھیں۔",
"import.importing": "درآمد ہو رہا ہے… اس میں کچھ وقت لگ سکتا ہے", "import.importing": "درآمد ہو رہا ہے… اس میں کچھ وقت لگ سکتا ہے",
"import.import": "درآمد کریں", "import.import": "درآمد کریں",
"import.cancel": "منسوخ کریں", "import.cancel": "منسوخ کریں",
"import.tracker.label": "درآمد کی پیش رفت",
"import.tracker.running": "درآمد جاری ہے…",
"import.tracker.done": "درآمد مکمل",
"import.tracker.failed": "درآمد ناکام",
"import.tracker.working": "کام جاری…",
"import.tracker.stopped": "روک دیا گیا",
"import.phase.prepare": "ٹرانس کوڈ",
"import.phase.transcribe": "نقل نویسی",
"import.phase.diarize": "مقررین کی شناخت",
"import.phase.finalize": "تکمیل",
"tagchip.filter": "«{tag}» ٹیگ والی میٹنگز فلٹر کریں", "tagchip.filter": "«{tag}» ٹیگ والی میٹنگز فلٹر کریں",
"tagchip.remove": "ٹیگ {tag} ہٹائیں", "tagchip.remove": "ٹیگ {tag} ہٹائیں",
@@ -345,6 +380,10 @@
"app.cancel": "منسوخ کریں", "app.cancel": "منسوخ کریں",
"app.cancel_title": "اس ریکارڈنگ کو رد کریں اور حذف کریں", "app.cancel_title": "اس ریکارڈنگ کو رد کریں اور حذف کریں",
"app.recording": "ریکارڈ ہو رہا ہے…", "app.recording": "ریکارڈ ہو رہا ہے…",
"app.mute": "مائیکروفون خاموش کریں",
"app.unmute": "مائیکروفون بحال کریں",
"app.mute_title": "مائیکروفون خاموش کریں (M)",
"app.unmute_title": "مائیکروفون بحال کریں (M)",
"app.backend_title": "فعال نقل بیک اینڈ", "app.backend_title": "فعال نقل بیک اینڈ",
"app.retention_title": "اس میٹنگ کے لیے آڈیو کو ‏.wav کے طور پر محفوظ کریں", "app.retention_title": "اس میٹنگ کے لیے آڈیو کو ‏.wav کے طور پر محفوظ کریں",
"app.saving": "محفوظ ہو رہا ہے", "app.saving": "محفوظ ہو رہا ہے",
@@ -393,10 +432,15 @@
"meetings.status.error": "خرابی", "meetings.status.error": "خرابی",
"meetings.resume": "نقل دوبارہ شروع کریں", "meetings.resume": "نقل دوبارہ شروع کریں",
"meetings.delete_aria": "میٹنگ حذف کریں", "meetings.delete_aria": "میٹنگ حذف کریں",
"meetings.not_encrypted": "غیر خفیہ کردہ",
"meetings.encrypt": "خفیہ کریں",
"meetings.encrypting": "خفیہ کیا جا رہا ہے…",
"meetings.encrypt_title": "اس میٹنگ کی فائلیں والٹ سے خفیہ کریں",
"meetings.delete_confirm": "اس میٹنگ کو حذف کریں؟ یہ اس کی ریکارڈنگ، نقل اور نوٹس ہٹا دیتا ہے۔", "meetings.delete_confirm": "اس میٹنگ کو حذف کریں؟ یہ اس کی ریکارڈنگ، نقل اور نوٹس ہٹا دیتا ہے۔",
"transcript.heading": "نقل", "transcript.heading": "نقل",
"transcript.title_aria": "میٹنگ عنوان", "transcript.title_aria": "میٹنگ عنوان",
"transcript.transcribed_with": "نقل نویسی بذریعہ",
"transcript.lang_title": "نقل کی زبان", "transcript.lang_title": "نقل کی زبان",
"transcript.lang_auto": "شناخت ہو رہی ہے…", "transcript.lang_auto": "شناخت ہو رہی ہے…",
"transcript.show": "نقل دکھائیں", "transcript.show": "نقل دکھائیں",
@@ -428,9 +472,18 @@
"notes.italic": "ترچھا", "notes.italic": "ترچھا",
"notes.h1": "سرخی 1", "notes.h1": "سرخی 1",
"notes.h2": "سرخی 2", "notes.h2": "سرخی 2",
"notes.h3": "سرخی 3",
"notes.bullet": "بلٹ فہرست", "notes.bullet": "بلٹ فہرست",
"notes.numbered": "نمبر شدہ فہرست",
"notes.quote": "اقتباس",
"notes.divider": "جداکار",
"notes.checkbox_title": "چیک باکس", "notes.checkbox_title": "چیک باکس",
"notes.checkbox_aria": "چیک باکس فہرست آئٹم", "notes.checkbox_aria": "چیک باکس فہرست آئٹم",
"notes.enhance": "بہتر بنائیں",
"notes.enhancing": "بہتر بنایا جا رہا ہے…",
"notes.enhance_title": "ٹرانسکرپٹ کی مدد سے ان نوٹس کو منظم Markdown میں پھیلائیں (AI)",
"notes.enhanced_note": "ٹرانسکرپٹ کی بنیاد پر نوٹس بہتر بنائے گئے۔",
"notes.undo_enhance": "کالعدم کریں",
"notes.edit_raw": "خام markdown میں ترمیم کریں", "notes.edit_raw": "خام markdown میں ترمیم کریں",
"notes.render": "markdown رینڈر کریں", "notes.render": "markdown رینڈر کریں",
"notes.editor": "ایڈیٹر", "notes.editor": "ایڈیٹر",
@@ -527,5 +580,9 @@
"settings.recording.consent_ack": "تسلیم شدہ", "settings.recording.consent_ack": "تسلیم شدہ",
"settings.recording.consent_not": "ابھی تسلیم نہیں", "settings.recording.consent_not": "ابھی تسلیم نہیں",
"settings.recording.auto_label": "جب کوئی کیلنڈر ایونٹ شروع ہو تو خودکار طور پر ریکارڈنگ شروع کریں", "settings.recording.auto_label": "جب کوئی کیلنڈر ایونٹ شروع ہو تو خودکار طور پر ریکارڈنگ شروع کریں",
"settings.recording.auto_hint": "صرف جب WhispAssist کھلا ہو۔ جب کسی درآمد شدہ کیلنڈر ایونٹ کا آغاز وقت آتا ہے، تو ریکارڈنگ خودکار طور پر شروع ہو جاتی ہے (اوپر والی آپ کی ڈیفالٹ برقراری ترتیب استعمال کرتے ہوئے)۔ پس منظر میں کچھ نہیں چلتا — ٹائمر صرف ایپ چلنے کے دوران مسلح ہوتا ہے۔ ترتیبات → کیلنڈر کے تحت ایونٹس درآمد کریں۔" "settings.recording.auto_hint": "صرف جب WhispAssist کھلا ہو۔ جب کسی درآمد شدہ کیلنڈر ایونٹ کا آغاز وقت آتا ہے، تو ریکارڈنگ خودکار طور پر شروع ہو جاتی ہے (اوپر والی آپ کی ڈیفالٹ برقراری ترتیب استعمال کرتے ہوئے)۔ پس منظر میں کچھ نہیں چلتا — ٹائمر صرف ایپ چلنے کے دوران مسلح ہوتا ہے۔ ترتیبات → کیلنڈر کے تحت ایونٹس درآمد کریں۔",
"settings.recording.autostart_label": "لاگ اِن پر WhispAssist شروع کریں",
"settings.recording.autostart_hint": "جب آپ Windows میں سائن اِن کرتے ہیں تو WhispAssist خود بخود شروع ہو جاتا ہے۔ طے شدہ طور پر بند؛ فی صارف اسٹارٹ اپ اندراج نصب کرتا ہے (ایڈمن درکار نہیں) اور خود سے ریکارڈنگ شروع نہیں کرتا۔",
"settings.recording.close_tray_label": "سسٹم ٹرے میں بند کریں",
"settings.recording.close_tray_hint": "ونڈو بند کرنے پر WhispAssist بند ہونے کے بجائے پس منظر میں چلتا رہتا ہے۔ ٹرے آئیکن سے دوبارہ کھولیں؛ مکمل بند کرنے کے لیے ٹرے کا 'اخراج' استعمال کریں۔ طے شدہ طور پر فعال۔"
} }
+61 -4
View File
@@ -24,6 +24,25 @@
"settings.transcription.switch_multilingual": "切换到上方的多语言模型即可选择语言。", "settings.transcription.switch_multilingual": "切换到上方的多语言模型即可选择语言。",
"settings.hardware.title": "硬件", "settings.hardware.title": "硬件",
"settings.hardware.refresh": "刷新",
"settings.hardware.test_output": "测试",
"settings.hardware.test_mic": "测试",
"settings.hardware.testing": "正在监听…",
"settings.hardware.play_tone": "播放提示音",
"settings.hardware.stress_title": "快速压力测试",
"settings.hardware.stress_hint": "在每个可用后端上对已安装的模型进行基准测试,并推荐既能跟上实时语音又最准确的模型。需要一点时间。",
"settings.hardware.stress_run": "运行压力测试",
"settings.hardware.stress_running": "运行中…",
"settings.hardware.stress_progress": "正在测试 {pair}…",
"settings.hardware.stress_recommend": "推荐:{backend} + {model}",
"settings.hardware.stress_apply": "应用",
"settings.hardware.stress_none": "在此硬件上没有已安装的模型能跟上实时语音——请尝试更小的模型。",
"settings.hardware.stress_backend": "后端",
"settings.hardware.stress_model": "模型",
"settings.hardware.stress_rtf": "速度(×实时)",
"settings.hardware.stress_realtime": "实时?",
"settings.hardware.stress_yes": "是",
"settings.hardware.stress_no": "否",
"settings.hardware.active_backend": "活动后端", "settings.hardware.active_backend": "活动后端",
"settings.hardware.model_meta": "· 模型 {size}", "settings.hardware.model_meta": "· 模型 {size}",
"settings.hardware.preferred_backend": "首选后端", "settings.hardware.preferred_backend": "首选后端",
@@ -56,6 +75,9 @@
"settings.hardware.downloading_model": "正在下载 {name}", "settings.hardware.downloading_model": "正在下载 {name}",
"settings.hardware.active_badge": "活动", "settings.hardware.active_badge": "活动",
"settings.hardware.installed": "已安装", "settings.hardware.installed": "已安装",
"settings.hardware.quantization_for": "{name} 的量化",
"settings.hardware.quant_recommended": "{quant} · 推荐",
"settings.hardware.quant_higher": "{quant} · 质量更高,体积更大",
"settings.hardware.use": "使用", "settings.hardware.use": "使用",
"settings.hardware.remove": "移除", "settings.hardware.remove": "移除",
"settings.hardware.cant_remove_active": "无法移除活动模型", "settings.hardware.cant_remove_active": "无法移除活动模型",
@@ -88,6 +110,7 @@
"settings.calendar.title": "日历与 Outlook .pst", "settings.calendar.title": "日历与 Outlook .pst",
"settings.calendar.intro_1": "从本地 Outlook 备份导入事件和参与者", "settings.calendar.intro_1": "从本地 Outlook 备份导入事件和参与者",
"settings.calendar.intro_2": "——只读,不会向文件写回任何内容。没有任何内容离开此设备。", "settings.calendar.intro_2": "——只读,不会向文件写回任何内容。没有任何内容离开此设备。",
"settings.calendar.requires": "需要以下程序位于 PATH 中(未随附):",
"settings.calendar.pst_file": ".pst 文件", "settings.calendar.pst_file": ".pst 文件",
"settings.calendar.no_file": "未选择文件", "settings.calendar.no_file": "未选择文件",
"settings.calendar.browse": "浏览…", "settings.calendar.browse": "浏览…",
@@ -278,6 +301,7 @@
"settings.privacy.locked_word": "锁定", "settings.privacy.locked_word": "锁定",
"settings.privacy.vault_locked_2": "。解锁以读取加密的会议。", "settings.privacy.vault_locked_2": "。解锁以读取加密的会议。",
"settings.privacy.password": "密码", "settings.privacy.password": "密码",
"settings.privacy.show_password": "显示密码",
"settings.privacy.unlock": "解锁", "settings.privacy.unlock": "解锁",
"settings.privacy.vault_unlocked_1": "保险库已", "settings.privacy.vault_unlocked_1": "保险库已",
"settings.privacy.unlocked_word": "解锁", "settings.privacy.unlocked_word": "解锁",
@@ -320,12 +344,23 @@
"import.optional": "可选", "import.optional": "可选",
"import.title_placeholder": "默认为文件名", "import.title_placeholder": "默认为文件名",
"import.filter_av": "音频 / 视频", "import.filter_av": "音频 / 视频",
"import.requires_1": "需要", "import.model_label": "转录模型",
"import.requires_2": "已安装并在你的 PATH 中(以及", "import.model_hint": "与会议一同记录,方便查看当时使用的转录模型。",
"import.requires_3": "用于 URL)。WhispAssist 不捆绑它们。", "import.requires": "需要以下程序位于 PATH 中(未随附):",
"import.background_note": "在后台运行——可在列表中跟踪进度。",
"import.importing": "正在导入…这可能需要一段时间", "import.importing": "正在导入…这可能需要一段时间",
"import.import": "导入", "import.import": "导入",
"import.cancel": "取消", "import.cancel": "取消",
"import.tracker.label": "导入进度",
"import.tracker.running": "正在导入…",
"import.tracker.done": "导入完成",
"import.tracker.failed": "导入失败",
"import.tracker.working": "处理中…",
"import.tracker.stopped": "已停止",
"import.phase.prepare": "转码",
"import.phase.transcribe": "转录",
"import.phase.diarize": "识别说话人",
"import.phase.finalize": "完成",
"tagchip.filter": "筛选带有标签“{tag}”的会议", "tagchip.filter": "筛选带有标签“{tag}”的会议",
"tagchip.remove": "移除标签 {tag}", "tagchip.remove": "移除标签 {tag}",
@@ -345,6 +380,10 @@
"app.cancel": "取消", "app.cancel": "取消",
"app.cancel_title": "放弃此录音并删除它", "app.cancel_title": "放弃此录音并删除它",
"app.recording": "正在录音…", "app.recording": "正在录音…",
"app.mute": "麦克风静音",
"app.unmute": "取消麦克风静音",
"app.mute_title": "麦克风静音 (M)",
"app.unmute_title": "取消麦克风静音 (M)",
"app.backend_title": "活动转录后端", "app.backend_title": "活动转录后端",
"app.retention_title": "为此会议将音频保存为 .wav", "app.retention_title": "为此会议将音频保存为 .wav",
"app.saving": "正在保存", "app.saving": "正在保存",
@@ -393,10 +432,15 @@
"meetings.status.error": "错误", "meetings.status.error": "错误",
"meetings.resume": "恢复转录", "meetings.resume": "恢复转录",
"meetings.delete_aria": "删除会议", "meetings.delete_aria": "删除会议",
"meetings.not_encrypted": "未加密",
"meetings.encrypt": "加密",
"meetings.encrypting": "正在加密…",
"meetings.encrypt_title": "使用保险库加密此会议的文件",
"meetings.delete_confirm": "删除此会议?这将移除它的录音、转录和笔记。", "meetings.delete_confirm": "删除此会议?这将移除它的录音、转录和笔记。",
"transcript.heading": "转录", "transcript.heading": "转录",
"transcript.title_aria": "会议标题", "transcript.title_aria": "会议标题",
"transcript.transcribed_with": "转录所用模型:",
"transcript.lang_title": "转录语言", "transcript.lang_title": "转录语言",
"transcript.lang_auto": "正在自动检测…", "transcript.lang_auto": "正在自动检测…",
"transcript.show": "显示转录", "transcript.show": "显示转录",
@@ -428,9 +472,18 @@
"notes.italic": "斜体", "notes.italic": "斜体",
"notes.h1": "标题 1", "notes.h1": "标题 1",
"notes.h2": "标题 2", "notes.h2": "标题 2",
"notes.h3": "三级标题",
"notes.bullet": "项目符号列表", "notes.bullet": "项目符号列表",
"notes.numbered": "有序列表",
"notes.quote": "引用",
"notes.divider": "分隔线",
"notes.checkbox_title": "复选框", "notes.checkbox_title": "复选框",
"notes.checkbox_aria": "复选框列表项", "notes.checkbox_aria": "复选框列表项",
"notes.enhance": "增强",
"notes.enhancing": "正在增强…",
"notes.enhance_title": "根据转录将这些笔记扩展为结构化 Markdown(AI)",
"notes.enhanced_note": "笔记已根据转录增强。",
"notes.undo_enhance": "撤销",
"notes.edit_raw": "编辑原始 markdown", "notes.edit_raw": "编辑原始 markdown",
"notes.render": "渲染 markdown", "notes.render": "渲染 markdown",
"notes.editor": "编辑器", "notes.editor": "编辑器",
@@ -527,5 +580,9 @@
"settings.recording.consent_ack": "已确认", "settings.recording.consent_ack": "已确认",
"settings.recording.consent_not": "尚未确认", "settings.recording.consent_not": "尚未确认",
"settings.recording.auto_label": "当日历事件开始时自动开始录音", "settings.recording.auto_label": "当日历事件开始时自动开始录音",
"settings.recording.auto_hint": "仅在 WhispAssist 打开时。当导入的日历事件的开始时间到达时,会自动开始录音(使用上方的默认保留设置)。没有任何内容在后台运行——计时器仅在应用运行时启用。请在设置 → 日历下导入事件。" "settings.recording.auto_hint": "仅在 WhispAssist 打开时。当导入的日历事件的开始时间到达时,会自动开始录音(使用上方的默认保留设置)。没有任何内容在后台运行——计时器仅在应用运行时启用。请在设置 → 日历下导入事件。",
"settings.recording.autostart_label": "登录时启动 WhispAssist",
"settings.recording.autostart_hint": "登录 Windows 时自动启动 WhispAssist。默认关闭;仅为当前用户安装启动项(无需管理员权限),并且不会自行开始录音。",
"settings.recording.close_tray_label": "关闭到系统托盘",
"settings.recording.close_tray_hint": "关闭窗口后 WhispAssist 会继续在后台运行而不是退出。可通过托盘图标重新打开;用托盘菜单中的“退出”彻底退出。默认开启。"
} }
+32
View File
@@ -55,6 +55,13 @@ class MeetingsStore {
syncJobs = $state<SyncJob[]>([]); syncJobs = $state<SyncJob[]>([]);
uploading = $state(false); uploading = $state(false);
// At-rest encryption padlocks (FR-SEC-3): meetings that still have plaintext
// artifacts on disk (empty when the vault isn't set up), plus whether the
// vault is unlocked — which gates the per-meeting Encrypt action.
unencryptedIds = $state<MeetingId[]>([]);
vaultUnlocked = $state(false);
encryptingId = $state<MeetingId | null>(null);
async init() { async init() {
await this.loadTags(); await this.loadTags();
await this.load(); await this.load();
@@ -152,6 +159,31 @@ class MeetingsStore {
} finally { } finally {
this.loading = false; this.loading = false;
} }
void this.refreshEncryption();
}
/** Refresh the unencrypted-meeting set + vault unlock state (FR-SEC-3).
* Also called from Settings after vault enable/unlock/lock so the padlocks
* react without a list reload. */
async refreshEncryption() {
try {
const [ids, vault] = await Promise.all([api.listUnencryptedMeetings(), api.vaultStatus()]);
this.unencryptedIds = ids;
this.vaultUnlocked = vault.unlocked;
} catch {
// backend not reachable; leave as-is.
}
}
/** Seal an unencrypted meeting's artifacts in place (vault must be unlocked). */
async encrypt(id: MeetingId) {
this.encryptingId = id;
try {
await api.encryptMeeting(id);
} finally {
this.encryptingId = null;
}
await this.refreshEncryption();
} }
async loadTags() { async loadTags() {
+49 -2
View File
@@ -4,7 +4,7 @@
import { recording } from "../stores/recording.svelte"; import { recording } from "../stores/recording.svelte";
import { api, type MeetingListItem, type SearchHit } from "../api"; import { api, type MeetingListItem, type SearchHit } from "../api";
import { open } from "@tauri-apps/plugin-dialog"; import { open } from "@tauri-apps/plugin-dialog";
import { Search, Trash2, Download, RotateCcw } from "@lucide/svelte"; import { Search, Trash2, Download, RotateCcw, Lock, LockOpen } from "@lucide/svelte";
import { t } from "../i18n/index.svelte"; import { t } from "../i18n/index.svelte";
// Meeting status ("recording"/"transcribing"/"recovering"/"error") → its // Meeting status ("recording"/"transcribing"/"recovering"/"error") → its
@@ -110,6 +110,15 @@
e.stopPropagation(); e.stopPropagation();
await meetings.resume(id); await meetings.resume(id);
} }
// At-rest encryption padlocks (FR-SEC-3). A meeting with plaintext
// artifacts shows an open padlock (only when a vault exists — without one
// the distinction is noise); with the vault unlocked, an Encrypt action
// seals it in place.
async function encryptMeeting(e: Event, id: string) {
e.stopPropagation();
await meetings.encrypt(id);
}
</script> </script>
<div class="wrap"> <div class="wrap">
@@ -191,7 +200,19 @@
</span> </span>
<span class="row muted small"> <span class="row muted small">
<span>{formatDate(m.started_at)}</span> <span>{formatDate(m.started_at)}</span>
{#if m.duration_secs}<span>{formatDuration(m.duration_secs)}</span>{/if} <span class="row meta-end">
{#if meetings.unencryptedIds.includes(m.id)}
<span
class="unencrypted"
role="img"
aria-label={t("meetings.not_encrypted")}
title={t("meetings.not_encrypted")}
>
<LockOpen size={12} aria-hidden="true" />
</span>
{/if}
{#if m.duration_secs}<span>{formatDuration(m.duration_secs)}</span>{/if}
</span>
</span> </span>
{#if snippetOf(m)} {#if snippetOf(m)}
<span class="snippet">{snippetOf(m)}</span> <span class="snippet">{snippetOf(m)}</span>
@@ -205,6 +226,17 @@
{/if} {/if}
</button> </button>
<div class="row actions"> <div class="row actions">
{#if meetings.unencryptedIds.includes(m.id) && meetings.vaultUnlocked && m.status !== "recording"}
<button
class="link"
onclick={(e) => encryptMeeting(e, m.id)}
disabled={meetings.encryptingId !== null}
title={t("meetings.encrypt_title")}
>
<Lock size={12} aria-hidden="true" />
{meetings.encryptingId === m.id ? t("meetings.encrypting") : t("meetings.encrypt")}
</button>
{/if}
{#if m.status === "recovering"} {#if m.status === "recovering"}
<button class="link" onclick={(e) => resumeMeeting(e, m.id)}> <button class="link" onclick={(e) => resumeMeeting(e, m.id)}>
<RotateCcw size={12} aria-hidden="true" /> <RotateCcw size={12} aria-hidden="true" />
@@ -390,7 +422,22 @@
font-size: 0.75rem; font-size: 0.75rem;
padding: 0; padding: 0;
} }
.link:disabled {
opacity: 0.5;
cursor: not-allowed;
}
.link.danger:hover { .link.danger:hover {
color: var(--danger); color: var(--danger);
} }
/* Open-padlock marker for meetings with plaintext artifacts (FR-SEC-3) —
warning-tinted so it reads as "attention", not merely decorative. */
.meta-end {
justify-content: flex-end;
gap: 0.3rem;
}
.unencrypted {
display: inline-flex;
align-items: center;
color: var(--warning);
}
</style> </style>
+53 -1
View File
@@ -14,6 +14,7 @@
import { api, errorMessage, events } from "../api"; import { api, errorMessage, events } from "../api";
import type { import type {
BackendId, BackendId,
ModelInfo,
StressTestResult, StressTestResult,
SyncKind, SyncKind,
SyncTargetConfig, SyncTargetConfig,
@@ -394,6 +395,31 @@
if (!p || !p.total) return null; if (!p || !p.total) return null;
return Math.round((p.received / p.total) * 100); return Math.round((p.received / p.total) * 100);
} }
// Whisper models grouped one row per family (id minus the `-q*` suffix)
// with a quantization dropdown, instead of a separate row per quantization.
// The catalog guarantees each family lists its recommended q5 variant first.
const familyOf = (id: string) => id.replace(/-q\d_\d$/, "");
const quantOf = (id: string) => (id.match(/-(q\d_\d)$/)?.[1] ?? "").toUpperCase();
let modelFamilies = $derived.by(() => {
const fams: { key: string; variants: ModelInfo[] }[] = [];
for (const m of settings.models) {
const k = familyOf(m.id);
const f = fams.find((x) => x.key === k);
if (f) f.variants.push(m);
else fams.push({ key: k, variants: [m] });
}
return fams;
});
// Per-family dropdown choice; unset falls back to active > installed > recommended.
let quantChoice = $state<Record<string, string>>({});
function shownVariant(key: string, variants: ModelInfo[]): ModelInfo {
return (
variants.find((v) => v.id === quantChoice[key]) ??
variants.find((v) => v.active) ??
variants.find((v) => v.installed) ??
variants[0]
);
}
let showConsent = $state(false); let showConsent = $state(false);
let testResult = $state<{ ok: boolean; message: string } | null>(null); let testResult = $state<{ ok: boolean; message: string } | null>(null);
@@ -495,6 +521,8 @@
} catch { } catch {
vault = null; vault = null;
} }
// Keep the meetings list's padlocks in step with vault state (FR-SEC-3).
void meetings.refreshEncryption();
} }
onMount(loadVault); onMount(loadVault);
function setVaultMsg(msg: string | null, isError = false) { function setVaultMsg(msg: string | null, isError = false) {
@@ -1129,7 +1157,8 @@
<h4>{t("settings.hardware.models")}</h4> <h4>{t("settings.hardware.models")}</h4>
<ul class="models"> <ul class="models">
{#each settings.models as m (m.id)} {#each modelFamilies as f (f.key)}
{@const m = shownVariant(f.key, f.variants)}
{@const downloading = m.id in settings.downloadProgress} {@const downloading = m.id in settings.downloadProgress}
{@const pct = progressPct(m.id)} {@const pct = progressPct(m.id)}
<li class="model" class:active={m.active}> <li class="model" class:active={m.active}>
@@ -1167,6 +1196,23 @@
{/if} {/if}
</div> </div>
<div class="model-actions"> <div class="model-actions">
{#if f.variants.length > 1}
<select
class="quant-select"
aria-label={t("settings.hardware.quantization_for", { name: m.label })}
value={m.id}
disabled={downloading}
onchange={(e) => (quantChoice[f.key] = (e.target as HTMLSelectElement).value)}
>
{#each f.variants as v, i (v.id)}
<option value={v.id}>
{i === 0
? t("settings.hardware.quant_recommended", { quant: quantOf(v.id) })
: t("settings.hardware.quant_higher", { quant: quantOf(v.id) })}
</option>
{/each}
</select>
{/if}
{#if downloading} {#if downloading}
<!-- no actions while a download is in flight --> <!-- no actions while a download is in flight -->
{:else if m.installed} {:else if m.installed}
@@ -2632,6 +2678,12 @@
gap: 0.4rem; gap: 0.4rem;
flex: none; flex: none;
} }
/* Quantization picker (FR-MODEL-1) — a native select sized to the compact
model row; the row's buttons/badges act on whichever variant is chosen. */
.quant-select {
font-size: 0.8rem;
max-width: 13rem;
}
.icon-btn { .icon-btn {
display: flex; display: flex;
align-items: center; align-items: center;