1. Project Overview & Quickstart (cjpais/Handy)
File: README.md
Handy
A free, open source, and extensible speech-to-text application that works completely offline.
Handy is a cross-platform desktop application that provides simple, privacy-focused speech transcription. Press a shortcut, speak, and have your words appear in any text field. This happens on your own computer without sending any information to the cloud.
Why Handy?
Handy was created to fill the gap for a truly open source, extensible speech-to-text tool. As stated on handy.computer:
- Free: Accessibility tooling belongs in everyone's hands, not behind a paywall
- Open Source: Together we can build further. Extend Handy for yourself and contribute to something bigger
- Private: Your voice stays on your computer. Get transcriptions without sending audio to the cloud
- Simple: One tool, one job. Transcribe what you say and put it into a text box
How It Works
- Press a configurable keyboard shortcut: hold it to record and release to stop, or tap it to toggle recording on and off (Hold-only and Toggle-only modes are also available)
- Speak your words while the shortcut is active
- Release and Handy processes your speech using Whisper
- Get your transcribed text pasted directly into whatever app you're using
The process is entirely local:
- Silence is filtered using VAD (Voice Activity Detection) with Silero
- Transcription uses your choice of models:
- Whisper models (Small/Medium/Turbo/Large) with GPU acceleration when available
- Parakeet V3 - CPU-optimized model with excellent performance and automatic language detection
- Works on Windows, macOS, and Linux
Quick Start
Installation
- Download the latest release from the releases page or the website
- macOS: Also available via Homebrew cask:
brew install --cask handy - Windows: Also available via winget:
winget install cjpais.Handy
Note: The Homebrew cask and winget package are not maintained by the Handy developers. - Debian/Ubuntu: Install the downloaded
.debwith APT so required dependencies are installed automatically:Do not usebashsudo apt install ./Handy_*.debdpkg -iunless the dependencies are already installed. If you already used it, runsudo apt --fix-broken install.
- macOS: Also available via Homebrew cask:
- Install the application
- Launch Handy and grant necessary system permissions (microphone, accessibility)
- Configure your preferred keyboard shortcuts in Settings
- Start transcribing!
Development Setup
For detailed build instructions including platform-specific requirements, see BUILD.md.
Sponsors
Integrations
Control Handy from Raycast โ start/stop recording, browse transcript history, manage dictionary, switch models and languages.
Source ยท by @mattiacolombomc
Debug Mode
Handy includes an advanced debug mode for development and troubleshooting. Access it by pressing:
- macOS:
Cmd+Shift+D - Windows/Linux:
Ctrl+Shift+D
CLI Parameters
Handy supports command-line flags for controlling a running instance and customizing startup behavior. These work on all platforms (macOS, Windows, Linux). Largely this is a beta feature.
Remote control flags (sent to an already-running instance via the single-instance plugin):
handy --toggle-transcription # Toggle recording on/off
handy --toggle-post-process # Toggle recording with post-processing on/off
handy --cancel # Cancel the current operationStartup flags:
handy --start-hidden # Start without showing the main window
handy --no-tray # Start without the system tray icon
handy --debug # Enable debug mode with verbose logging
handy --help # Show all available flagsFlags can be combined for autostart scenarios:
handy --start-hidden --no-traymacOS tip: When Handy is installed as an app bundle, invoke the binary directly:
bash/Applications/Handy.app/Contents/MacOS/Handy --toggle-transcription
Known Issues & Current Limitations
This project is actively being developed and has some known issues. We believe in transparency about the current state:
Bluetooth Headset Microphones (macOS)
Using a Bluetooth headset microphone on macOS may temporarily reduce playback quality or volume while recording because Bluetooth switches to bidirectional audio. Keep your headphones as the output device and select your Mac's built-in or an external microphone in Handy to avoid this.
fn and Globe Key Shortcuts (macOS)
Shortcuts that include the fn (Globe) key only work on Apple keyboards โ your Mac's built-in keyboard or an Apple external keyboard. They will never trigger on a third-party keyboard, even while it is connected to the same Mac.
This is a hardware limitation rather than a Handy bug. fn is not part of the standard USB HID keyboard specification: Apple reports it through a vendor-specific usage that macOS honors only from Apple devices, while third-party keyboards handle their Fn key entirely in firmware and send nothing to the computer. There is no event for Handy to listen for.
If you switch between a MacBook keyboard and an external one, pick a shortcut built from standard modifiers (ctrl, option, shift, command) or a regular key instead.
Linux Notes
Text Input Tools:
For reliable text input on Linux, install the appropriate tool for your display server:
| Display Server | Recommended Tool | Install Command |
|---|---|---|
| X11 | xdotool |
sudo apt install xdotool |
| Wayland | wtype |
sudo apt install wtype |
| Both | dotool |
sudo apt install dotool (requires input group) |
- X11: Install
xdotoolfor both direct typing and clipboard paste shortcuts - Ubuntu 26.04: Has Wayland display server by default.
wtypedoes not work, you need to installydotooland configure systemd as described here. - Wayland: Install
wtype(preferred) ordotoolfor text input to work correctly - dotool setup: Requires adding your user to the
inputgroup:sudo usermod -aG input $USER(then log out and back in)
Without these tools, Handy falls back to enigo which may have limited compatibility, especially on Wayland.
Wayland Support (Linux):
- Limited support for Wayland display server
- Requires
wtypeordotoolfor text input to work correctly (see Linux Notes below for installation)
Other Notes:
Runtime library dependency (
libgtk-layer-shell.so.0):Handy links
gtk-layer-shellon Linux. If startup fails witherror while loading shared libraries: libgtk-layer-shell.so.0, install the runtime package for your distro:Distro Package to install Example command Ubuntu/Debian libgtk-layer-shell0sudo apt install libgtk-layer-shell0Fedora/RHEL gtk-layer-shellsudo dnf install gtk-layer-shellArch Linux gtk-layer-shellsudo pacman -S gtk-layer-shellFor building from source on Ubuntu/Debian, you may also need
libgtk-layer-shell-dev.
The recording overlay is disabled by default on Linux (
Overlay Position: None) because certain compositors treat it as the active window. When the overlay is visible it can steal focus, which prevents Handy from pasting back into the application that triggered transcription. If you enable the overlay anyway, be aware that clipboard-based pasting might fail or end up in the wrong window.Handy disables the WebKit DMA-BUF renderer by default on Linux, but preserves explicit
WEBKIT_DISABLE_DMABUF_RENDERERvalues. For rendering workarounds, see Troubleshooting โ Linux Startup Crashes or Instability.If Handy fails to start reliably on Linux, see Troubleshooting โ Linux Startup Crashes or Instability.
Global keyboard shortcuts (Wayland): On Wayland, system-level shortcuts must be configured through your desktop environment or window manager. Use the CLI flags as the command for your custom shortcut.
GNOME:
- Open Settings > Keyboard > Keyboard Shortcuts > Custom Shortcuts
- Click the + button to add a new shortcut
- Set the Name to
Toggle Handy Transcription - Set the Command to
handy --toggle-transcription - Click Set Shortcut and press your desired key combination (e.g.,
Super+O)
KDE Plasma:
- Open System Settings > Shortcuts > Custom Shortcuts
- Click Edit > New > Global Shortcut > Command/URL
- Name it
Toggle Handy Transcription - In the Trigger tab, set your desired key combination
- In the Action tab, set the command to
handy --toggle-transcription
Sway / i3:
Add to your config file (
~/.config/sway/configor~/.config/i3/config):inibindsym $mod+o exec handy --toggle-transcriptionHyprland:
Add to your config file (
~/.config/hypr/hyprland.conf):inibind = $mainMod, O, exec, handy --toggle-transcriptionYou can also trigger Handy externally via Unix signals or the CLI flags, which lets Wayland window managers or other hotkey daemons keep ownership of keybindings:
Action Trigger Toggle transcription pkill -USR2 -n handyorhandy --toggle-transcriptionToggle transcription with post-processing handy --toggle-post-processExample Sway config:
inibindsym $mod+o exec pkill -USR2 -n handy bindsym $mod+p exec handy --toggle-post-processpkillhere simply delivers the signalโit does not terminate the process.Behavior change: older releases also accepted
SIGUSR1for toggling transcription with post-processing. WebKitGTK โ the webview engine embedded in Handy on Linux โ uses SIGUSR1 internally to coordinate JavaScript garbage collection, so listening for it caused phantom recordings and interrupted dictations every few minutes (#1660). Handy no longer listens for SIGUSR1 on Linux; the post-processing toggle is still available viahandy --toggle-post-process. Remove anypkill -USR1bindings: the signal is now delivered straight to WebKit's internal handler and can crash the app.
Overlay & Pasting Issues (Linux):
- The recording overlay window can interfere with pasting transcribed text into target applications on Linux (X11)
- Solution: Open Settings > Advanced and set "Overlay Position" to "None" to disable the overlay
- Enable "Audio Feedback" (also in Advanced) if you still want audible confirmation of recording state
- Users who upgrade from older versions or import settings from other platforms may need to manually apply this change
Verify Release Signatures
Handy release artifacts are signed with Tauri's updater signature format. The public key is stored in src-tauri/tauri.conf.json under plugins.updater.pubkey.
To verify a release manually, set ARTIFACT to the filename you downloaded, save the pubkey value from src-tauri/tauri.conf.json to handy.pub.b64, then decode the public key and matching .sig file from base64 and verify the artifact with minisign:
# Replace with the file you downloaded
ARTIFACT="Handy_0.8.1_amd64.AppImage"
python3 - "$ARTIFACT" <<'PY'
import base64, pathlib, sys
artifact = sys.argv[1]
pub = pathlib.Path("handy.pub.b64").read_text().strip()
pathlib.Path("handy.pub").write_bytes(base64.b64decode(pub))
sig = pathlib.Path(f"{artifact}.sig").read_text().strip()
pathlib.Path(f"{artifact}.minisig").write_bytes(base64.b64decode(sig))
PY
minisign -Vm "$ARTIFACT" \
-p handy.pub \
-x "$ARTIFACT.minisig"On success, minisign prints:
Signature and comment signature verifiedDo not use gpg for these .sig files.
Troubleshooting
Previous Clipboard Content Is Pasted Instead of the Transcription
If the transcription is correct in History but Handy inserts text you copied earlier, see issue #502. With the standard clipboard paste method, Handy restores your previous clipboard after a fixed delay. Under load, the receiving application may read the clipboard only after that restoration.
- Open Handy's settings window and press
Cmd+Shift+D(macOS) orCtrl+Shift+D(Windows/Linux) to reveal Debug. - On macOS and Windows, try Reliable Paste (Beta) in Debug with a clipboard paste method selected. It uses clipboard read notifications to delay restoration instead of relying on the standard fixed delay. Test it in the application where the problem occurs; it is still experimental.
- If Reliable Paste is disabled or unavailable, increase Paste Delay (After) in Debug and test again. This controls the wait before restoring your previous clipboard. Paste Delay (Before) controls the wait before sending the paste keystroke and addresses a different part of the operation. These delay settings apply to the standard paste path, not Reliable Paste.
If the problem persists, add your Handy version, operating system, receiving application, paste method, Reliable Paste setting, and before/after delays to the existing issue. Redact private dictated text before sharing logs.
Manual Model Installation (For Proxy Users or Network Restrictions)
If you're behind a proxy, firewall, or in a restricted network environment where Handy cannot download models automatically, you can manually download and install them. The URLs are publicly accessible from any browser.
Step 1: Find Your App Data Directory
- Open Handy settings
- Navigate to the About section
- Copy the "App Data Directory" path shown there, or use the shortcuts:
- macOS:
Cmd+Shift+Dto open debug menu - Windows/Linux:
Ctrl+Shift+Dto open debug menu
- macOS:
The typical paths are:
- macOS:
~/Library/Application Support/com.pais.handy/ - Windows:
C:\Users\{username}\AppData\Roaming\com.pais.handy\ - Linux:
~/.config/com.pais.handy/
Step 2: Create Models Directory
Inside your app data directory, create a models folder if it doesn't already exist:
# macOS/Linux
mkdir -p ~/Library/Application\ Support/com.pais.handy/models
# Windows (PowerShell)
New-Item -ItemType Directory -Force -Path "$env:APPDATA\com.pais.handy\models"Step 3: Download Model Files
Download the models you want from below
Whisper Models (single .bin files):
- Small (487 MB):
https://blob.handy.computer/ggml-small.bin - Medium (492 MB):
https://blob.handy.computer/whisper-medium-q4_1.bin - Turbo (1600 MB):
https://blob.handy.computer/ggml-large-v3-turbo.bin - Large (1100 MB):
https://blob.handy.computer/ggml-large-v3-q5_0.bin
Parakeet Unified EN 0.6B (single .gguf file, recommended):
- Q8_0 (731 MB):
https://huggingface.co/handy-computer/parakeet-unified-en-0.6b-gguf/resolve/main/parakeet-unified-en-0.6b-Q8_0.gguf
Step 4: Install Models
For Whisper Models (.bin files):
Simply place the .bin file directly into the models directory:
{app_data_dir}/models/
โโโ ggml-small.bin
โโโ whisper-medium-q4_1.bin
โโโ ggml-large-v3-turbo.bin
โโโ ggml-large-v3-q5_0.binFor GGUF Models (.gguf files):
Place the .gguf file directly into the models directory, exactly like the Whisper .bin files above. Handy also picks up models already present in the shared Hugging Face cache (~/.cache/huggingface/hub), so a copy downloaded by another tool works without being moved.
Important Notes:
- Do not rename the
.binor.gguffilesโuse the exact filenames from the download URLs - After placing the files, restart Handy to detect the new models
Step 5: Verify Installation
- Restart Handy
- Open Settings โ Models
- Your manually installed models should now appear as "Downloaded"
- Select the model you want to use and test transcription
Custom Whisper Models
Handy can auto-discover custom Whisper GGML models placed in the models directory. This is useful for users who want to use fine-tuned or community models not included in the default model list.
How to use:
- Obtain a Whisper model in GGML
.binformat (e.g., from Hugging Face) - Place the
.binfile in yourmodelsdirectory (see paths above) - Restart Handy to discover the new model
- The model will appear in the "Custom Models" section of the Models settings page
Important:
- Community models are user-provided and may not receive troubleshooting assistance
- The model must be a valid Whisper GGML format (
.binfile) - Model name is derived from the filename (e.g.,
my-custom-model.binโ "My Custom Model")
Linux Startup Crashes or Instability
If Handy fails to start reliably on Linux โ for example, it crashes shortly after launch, never shows its window, or reports a Wayland protocol error โ try the steps below in order.
1. Install (or reinstall) gtk-layer-shell
Handy uses gtk-layer-shell for its recording overlay and links against it at runtime. A missing or broken installation is the most common cause of startup failures and can manifest as a crash or a hang well before any window is shown. Make sure the runtime package is installed for your distro:
| Distro | Package to install | Example command |
|---|---|---|
| Ubuntu/Debian | libgtk-layer-shell0 |
sudo apt install libgtk-layer-shell0 |
| Fedora/RHEL | gtk-layer-shell |
sudo dnf install gtk-layer-shell |
| Arch Linux | gtk-layer-shell |
sudo pacman -S gtk-layer-shell |
If it is already installed and you still see startup problems, try reinstalling it (e.g. sudo pacman -S gtk-layer-shell again) in case the library files were corrupted by a partial upgrade.
2. Disable the GTK layer shell overlay (HANDY_NO_GTK_LAYER_SHELL)
If installing the library does not help, you can skip gtk-layer-shell initialization entirely as a workaround. On some compositors (notably KDE Plasma under Wayland) it has been reported to interact poorly with the recording overlay. With this variable set, the overlay falls back to a regular always-on-top window:
HANDY_NO_GTK_LAYER_SHELL=1 handy3. Configure WebKit DMA-BUF rendering (WEBKIT_DISABLE_DMABUF_RENDERER)
Handy disables the WebKitGTK DMA-BUF renderer by default on Linux because it can cause blank windows or crashes on some GPU/driver combinations. Explicit environment-variable values are preserved, including in the Nix package. To explicitly keep the renderer disabled:
WEBKIT_DISABLE_DMABUF_RENDERER=1 handySome users on WebKitGTK 2.54 report a flickering or partially drawn recording overlay with the renderer disabled (#2166). If affected, try opting out of the default workaround:
WEBKIT_DISABLE_DMABUF_RENDERER=0 handyThis allows WebKit to use the renderer when supported, but can reintroduce the GPU/driver-specific crashes described above. Remove the override or use =1 if that happens.
Fully quit Handy, including its tray instance, before testing either value. Running a second instance with --toggle-transcription does not change the running process's environment.
Making a workaround permanent
Set the variable in the environment of the launcher that actually starts Handy. Shell profile exports may not apply to desktop-menu or autostart launches. If you launch Handy from a .desktop file, you can prefix the Exec= line, e.g.:
Exec=env HANDY_NO_GTK_LAYER_SHELL=1 handyHandy's built-in autostart rewrites its generated desktop entry, so editing that entry is not a durable workaround. For autostart, use an appropriate session/service environment, or disable Handy's built-in autostart and manage your own startup entry with the required variable.
If a workaround helps you, please open an issue describing your distro, desktop environment, and session type โ that information helps us narrow down the underlying bug.
Empty recording overlay on Hyprland / Omarchy
If the recording overlay is empty or bordered, fully quit Handy and launch a
native installation with Wayland enabled:
env -u HANDY_NO_GTK_LAYER_SHELL GDK_BACKEND=wayland handyIf this works, apply GDK_BACKEND=wayland only to Handy's launcher. This
workaround does not work with the 0.9.6 AppImage, which forces X11.
Vulkan Overlays and Capture Tools on Windows (`HANDY_KEEP_VULKAN_IMPLICIT_LAYERS`)
On Windows, Handy asks the Vulkan loader to skip implicit layers to avoid crashes caused by overlay and capture hooks (#2049). GPU acceleration remains enabled; this does not change system-wide settings.
To opt out for GPU selection or debugging tools, fully quit Handy (including the tray icon), then run both commands in the same PowerShell window:
$env:HANDY_KEEP_VULKAN_IMPLICIT_LAYERS = "1"
& "$env:ProgramFiles\Handy\handy.exe"Adjust the executable path if needed. This override only applies to apps launched from that PowerShell session, not the Start menu. Handy also preserves any existing VK_LOADER_LAYERS_DISABLE value.
How to Contribute
- Check existing issues at github.com/cjpais/Handy/issues
- Fork the repository and create a feature branch
- Test thoroughly on your target platform
- Submit a pull request with clear description of changes
- Join the discussion - reach out at [email protected]
The goal is to create both a useful tool and a foundation for others to build uponโa well-patterned, simple codebase that serves the community.
Related Projects
- Handy CLI - The original Python command-line version
- handy.computer - Project website with demos and documentation
License
MIT License - see LICENSE file for details.
Handy is open-source software, but the Handy name, logo, icon, and brand assets are not open-source. Unofficial forks, rewrites, and redistributions must use their own branding and must not imply endorsement or affiliation.
Acknowledgments
- Whisper by OpenAI for the speech recognition model
- ggml for an amazing cross-platform tensor library
- Silero for great lightweight VAD
- Tauri team for the excellent Rust-based app framework
- Community contributors helping make Handy better
File: AGENTS.md
AGENTS.md
This file provides guidance to AI coding assistants working with code in this repository.
Development Commands
Prerequisites:
Core Development:
# Install dependencies
bun install
# Run in development mode
bun run tauri dev
# If cmake error on macOS:
CMAKE_POLICY_VERSION_MINIMUM=3.5 bun run tauri dev
# Build for production
bun run tauri build
# Frontend only development
bun run dev # Start Vite dev server
bun run build # Build frontend (TypeScript + Vite)
bun run preview # Preview built frontendLinting and Formatting (run before committing):
bun run lint # ESLint for frontend
bun run lint:fix # ESLint with auto-fix
bun run format # Prettier + cargo fmt
bun run format:check # Check formatting without changes
bun run format:frontend # Prettier only
bun run format:backend # cargo fmt onlyModel Setup (Required for Development):
mkdir -p src-tauri/resources/models
curl -L -o src-tauri/resources/models/silero-vad-v6.2-F32.gguf https://huggingface.co/handy-computer/silero-vad-v6.2-gguf/resolve/main/silero-vad-v6.2-F32.ggufFor detailed platform-specific build setup, see BUILD.md.
Architecture Overview
Handy is a cross-platform desktop speech-to-text application built with Tauri 2.x (Rust backend + React/TypeScript frontend).
Backend Structure (src-tauri/src/)
lib.rs- Main entry point, Tauri setup, manager initializationmanagers/- Core business logic:audio.rs- Audio recording and device managementmodel.rs- Model downloading and managementtranscription.rs- Speech-to-text processing pipelinehistory.rs- Transcription history storage
audio_toolkit/- Low-level audio processing:audio/- Recording sink (VAD, levels, live streaming feed), output devices, WAV I/Ovad/- Voice Activity Detection (Silero VAD)
commands/- Tauri command handlers for frontend communicationcli.rs- CLI argument definitions (clap derive)shortcut.rs- Global keyboard shortcut handlingsettings.rs- Application settings managementoverlay.rs- Recording overlay window (platform-specific)signal_handle.rs-send_transcription_input()reusable functionutils.rs- Platform detection helpers
Frontend Structure (src/)
App.tsx- Main component with onboarding flowcomponents/- React UI components:settings/- Settings UImodel-selector/- Model management interfaceonboarding/- First-run experienceoverlay/- Recording overlay UIupdate-checker/- App update notificationsshared/,ui/,icons/,footer/- Shared components
hooks/useSettings.ts- Settings state management hookstores/settingsStore.ts- Zustand store for settingsbindings.ts- Auto-generated Tauri type bindings (via tauri-specta)overlay/- Recording overlay window entry pointlib/types.ts- Shared TypeScript type definitions
Key Architecture Patterns
Manager Pattern: Core functionality organized into managers (Audio, Model, Transcription) initialized at startup and managed via Tauri state.
Command-Event Architecture: Frontend โ Backend via Tauri commands; Backend โ Frontend via events.
Pipeline Processing: Audio โ VAD โ Whisper/Parakeet โ Text output โ Clipboard/Paste
State Flow: Zustand โ Tauri Command โ Rust State โ Persistence (tauri-plugin-store)
Technology Stack
Core Libraries:
transcribe-cpp- Local speech recognition (Whisper, Parakeet, Moonshine, SenseVoice, etc.; GGML/GGUF) with GPU accelerationhandy-recorder- Microphone capture: device selection, resampling to 16 kHz, failure detectiontranscribe-cpp(Silero VAD v6, CPU-only, in-process) /earshot- Voice Activity Detectionrdev- Global keyboard shortcutsrodio- Audio playback for feedback sounds
Application Flow
- Initialization: App starts minimized to tray, loads settings, initializes managers
- Model Setup: First-run downloads preferred Whisper model (Small/Medium/Turbo/Large)
- Recording: Global shortcut triggers audio recording with VAD filtering
- Processing: Audio sent to Whisper model for transcription
- Output: Text pasted to active application via system clipboard
Settings System
Settings are stored using Tauri's store plugin with reactive updates:
- Keyboard shortcuts (configurable, supports push-to-talk)
- Audio devices (microphone/output selection)
- Model preferences (Small/Medium/Turbo/Large Whisper variants)
- Audio feedback and translation options
Single Instance Architecture
The app enforces single instance behavior โ launching when already running brings the settings window to front rather than creating a new process. Remote control flags (--toggle-transcription, etc.) work by launching a second instance that sends args to the running instance via tauri_plugin_single_instance, then exits.
Internationalization (i18n)
All user-facing strings must use i18next translations. ESLint enforces this (no hardcoded strings in JSX).
Adding new text:
- Add key to
src/i18n/locales/en/translation.json - Use in component:
const { t } = useTranslation(); t('key.path')
File structure:
src/i18n/
โโโ index.ts # i18n setup
โโโ languages.ts # Language metadata
โโโ locales/
โโโ en/translation.json # English (source)
โโโ de/, es/, fr/, ja/, ru/, zh/, ...
โโโ ...For translation contribution guidelines, see CONTRIBUTING_TRANSLATIONS.md.
Code Style
Rust:
- Run
cargo fmtandcargo clippybefore committing - Handle errors explicitly (avoid unwrap in production)
- Use descriptive names, add doc comments for public APIs
TypeScript/React:
- Strict TypeScript, avoid
anytypes - Functional components with hooks
- Tailwind CSS for styling
- Path aliases:
@/โ./src/
CLI Parameters
Handy supports command-line parameters on all platforms for integration with scripts, window managers, and autostart configurations.
Implementation: cli.rs (definitions), main.rs (parsing), lib.rs (applying), signal_handle.rs (shared logic)
| Flag | Description |
|---|---|
--toggle-transcription |
Toggle recording on/off on a running instance |
--toggle-post-process |
Toggle recording with post-processing on/off |
--cancel |
Cancel the current operation on a running instance |
--start-hidden |
Launch without showing the main window (tray icon visible) |
--no-tray |
Launch without system tray (closing window quits the app) |
--debug |
Enable debug mode with verbose (Trace) logging |
Key design decisions:
- CLI flags are runtime-only overrides โ they do NOT modify persisted settings
- Remote control flags work via
tauri_plugin_single_instance: second instance sends args, then exits send_transcription_input()insignal_handle.rsis shared between signal handlers and CLI
Debug Mode
Access debug features: Cmd+Shift+D (macOS) or Ctrl+Shift+D (Windows/Linux)
Platform Notes
- macOS: Metal acceleration, accessibility permissions required for keyboard shortcuts
- Windows: Vulkan acceleration, code signing. Implicit Vulkan layers (overlays, capture hooks) are disabled for the Handy process via
VK_LOADER_LAYERS_DISABLE=~implicit~set inmain.rs; opt out withHANDY_KEEP_VULKAN_IMPLICIT_LAYERS=1or by settingVK_LOADER_LAYERS_DISABLEyourself - Linux: OpenBLAS + Vulkan, limited Wayland support, overlay uses GTK layer shell (disable with
HANDY_NO_GTK_LAYER_SHELL=1) - Nix/NixOS: the Nix package sets
HANDY_DISABLE_UPDATER=1to force-disable the self-updater at runtime without touching the persisted setting (self-update can't work against an immutable/nix/store)
Troubleshooting
See the Troubleshooting section in README.md.
GitHub workflow for AI coding assistants
MANDATORY. Before opening any PR, issue, or discussion in this repo: you MUST read the relevant template file and follow it strictly. That includes sections that look "ceremonial" โ checklists, AI Assistance disclosures, "Human Written Description". A generic Summary/Test-plan layout is not acceptable.
- Opening a PR: Read
.github/PULL_REQUEST_TEMPLATE.md. Every section listed there is mandatory. If a section requires a human-written paragraph (e.g. "Human Written Description"), leave a clear TODO placeholder and ask the human contributor to fill it in โ do not invent their voice. - Opening an issue: Read
.github/ISSUE_TEMPLATE/. Blank issues are disabled; pick the right template (bug_report.mdfor bugs). Feature requests do not belong in issues โ they go to Discussions (see.github/ISSUE_TEMPLATE/config.yml). - Proposing a feature: Handy is under a feature freeze. New features require community support gathered in Discussions before any PR is opened โ see the PR template's "Community Feedback" section.
- Translations: Follow CONTRIBUTING_TRANSLATIONS.md.
- Full contributor workflow: CONTRIBUTING.md.
Commits: Use conventional commit prefixes (feat:, fix:, docs:, refactor:, chore:). Focus the message on why, not what.
File: BUILD.md
Build Instructions
This guide covers how to set up the development environment and build Handy from source across different platforms.
Prerequisites
All Platforms
- Rust (latest stable)
- Bun package manager
- Tauri Prerequisites
Platform-Specific Requirements
macOS
- Xcode Command Line Tools
- Install with:
xcode-select --install
Windows
Microsoft C++ Build Tools: Visual Studio 2019/2022 with C++ development
tools, or Visual Studio Build Tools 2019/2022CMake (must be on
PATH):powershellwinget install Kitware.CMakeVulkan SDK from LunarG โ required to
build the Vulkan GPU backend (vulkan-shaders-genneeds the SDK's headers
andglslc):powershellwinget install KhronosGroup.VulkanSDKOpen a new terminal afterward so
VULKAN_SDKis set.
[!NOTE]
Windows' 260-character path limit used to break the native Vulkan build in
most checkouts. Sincetranscribe-cpp0.1.3 the build works around it
automatically (it compiles through a short NTFS junction โ no admin rights
or setup needed), so a normal checkout just builds. If you still hit
path-limit errors, see
Windows build fails with path-limit errors
in Troubleshooting.
Linux
Build essentials
ALSA development libraries
Install with:
bash# Ubuntu/Debian sudo apt update sudo apt install build-essential clang libclang-dev libevdev-dev libasound2-dev pkg-config libssl-dev libvulkan-dev vulkan-tools glslc spirv-headers glslang-tools libgtk-3-dev libwebkit2gtk-4.1-dev libayatana-appindicator3-dev librsvg2-dev libgtk-layer-shell0 libgtk-layer-shell-dev patchelf cmake # Fedora/RHEL sudo dnf groupinstall "Development Tools" sudo dnf install alsa-lib-devel pkgconf openssl-devel vulkan-devel glslc \ clang clang-devel libevdev-devel \ spirv-headers-devel spirv-tools-devel glslang \ gtk3-devel webkit2gtk4.1-devel libappindicator-gtk3-devel librsvg2-devel \ gtk-layer-shell gtk-layer-shell-devel \ cmake # Arch Linux sudo pacman -S base-devel clang libevdev shaderc spirv-headers glslang alsa-lib pkgconf openssl vulkan-devel \ gtk3 webkit2gtk-4.1 libappindicator-gtk3 librsvg gtk-layer-shell \ cmake
Setup Instructions
1. Clone the Repository
git clone [email protected]:cjpais/Handy.git
cd Handy2. Install Dependencies
bun install3. Start Dev Server
bun tauri dev4. Build for Production
bun run tauri buildThis compiles a release binary and generates platform-specific bundles (deb, rpm, AppImage on Linux; dmg on macOS; msi on Windows).
Linux Install (from source)
The raw binary (src-tauri/target/release/handy) cannot run standalone โ it needs Tauri resource files (tray icons, sounds, VAD model) to be co-located at the expected path.
Install from the deb bundle (works on any Linux distro):
cd /tmp
ar x /path/to/Handy/src-tauri/target/release/bundle/deb/Handy_*_amd64.deb data.tar.gz
tar xzf data.tar.gz
sudo cp usr/bin/handy /usr/bin/
sudo cp -a usr/lib/. /usr/lib/
sudo cp -r usr/share/icons/hicolor/* /usr/share/icons/hicolor/
sudo cp usr/share/applications/Handy.desktop /usr/share/applications/The runtime libraries live in the app-private /usr/lib/Handy/ (on the binary's rpath), so no ldconfig step is needed.
After subsequent rebuilds, copy the binary and any refreshed runtime libraries:
sudo cp src-tauri/target/release/handy /usr/bin/
sudo mkdir -p /usr/lib/Handy
sudo cp -a src-tauri/transcribe-libs/. /usr/lib/Handy/Resources only need re-copying if they change upstream (new icons, sounds, models, etc.).
Troubleshooting
macOS Accessibility remains enabled after a local rebuild
Local builds use the ad-hoc signingIdentity: "-". A rebuild can have a new macOS code
identity while the old System Settings > Privacy & Security > Accessibility entry
remains visibly enabled, leaving Handy on Waiting....
After installing the final bundle at /Applications/Handy.app, quit Handy, clear only its
stale Accessibility record, then reopen it:
osascript -e 'tell application id "com.pais.handy" to quit' || true
tccutil reset Accessibility com.pais.handy
open /Applications/Handy.appGrant Accessibility again when prompted. This does not reset Microphone or other TCC
services, and official releases normally do not need it.
For optional diagnosis, compare the designated requirements of the previous and rebuilt
bundles:
codesign -dr - /path/to/previous/Handy.app 2>&1
codesign -dr - /Applications/Handy.app 2>&1An ad-hoc requirement contains a cdhash; a changed requirement confirms the rebuild is
not covered by the old grant. The reset procedure does not require this check.
See issue #1618 for the related onboarding
and stale-permission report.
AppImage build fails on Arch / rolling-release distros
linuxdeploy bundles its own strip binary which is too old to process system libraries built with newer toolchains on rolling-release distros (Arch, CachyOS, Manjaro, EndeavourOS).
The error from Tauri:
Bundling Handy_*_amd64.AppImage
failed to bundle project `failed to run linuxdeploy`Tauri swallows the real linuxdeploy error. To see it, run linuxdeploy manually:
cd src-tauri/target/release/bundle/appimage
~/.cache/tauri/linuxdeploy-x86_64.AppImage --appimage-extract-and-run \
--appdir Handy.AppDir --plugin gtk --output appimageWorkaround: The binary, deb, and rpm bundles all build fine โ only the AppImage step fails. To skip it:
bun run tauri build -- --bundles debThen install using the deb extraction method above.
Windows build fails with path-limit errors (`MSB3491` / `FTK1011` / `MSB6003`)
On Windows the native build can fail partway through transcribe-cpp-sys with
any of these (all the same root cause):
error MSB3491: Could not write lines to file "...VCTargetsPath.tlog\VCTargetsPath.lastbuildstate".
Path: ... exceeds the OS max path limit. The fully qualified file name must be less than 260 characters.FileTracker : error FTK1011: could not create the new file tracking log file:
...\vulkan-shaders-gen-build\...\cmTC_xxxxx.tlog\link.write.1.tlog.
The system cannot find the path specified.error MSB6003: The specified task executable "CL.exe" could not be run.
System.IO.DirectoryNotFoundException: Could not find a part of the path ...This is not a code or toolchain problem โ it's Windows' legacy 260-character
path limit (MAX_PATH), overflowed by the Vulkan shader generator's nested
CMake build tree on top of Cargo's already-deeptarget\release\build\<crate>-<hash>\out\build\... directory.
Since transcribe-cpp 0.1.3 this is mitigated automatically: the native build
compiles through a short NTFS junction under %LOCALAPPDATA%\tcs (created
without admin rights), so a normal checkout builds with no setup. Enabling
Windows long paths does not reliably help here โ MSBuild's nativeFileTracker (tracker.exe) ignores the long-paths flag โ which is why the
junction, not the registry flag, is the fix.
If you still see the errors above, junction creation was likely blocked
(filesystem or corporate policy) โ the failing build's log then contains atranscribe-cpp-sys: could not create short build junction ... warning โ or
your checkout is deep enough to overflow even the shortened layout. Work
around either case with a short Cargo target directory:
# Per-shell:
$env:CARGO_TARGET_DIR = "C:\h"
# Or persist it for all future terminals (note: redirects ALL your
# Rust projects' build output, not just Handy):
[Environment]::SetEnvironmentVariable('CARGO_TARGET_DIR', 'C:\h', 'User')Artifacts then land in C:\h\release\... instead of the repo'ssrc-tauri\target\. Open a **new terminal** if you persisted the variable โ
it is only picked up by freshly started processes. Then bun run tauri dev
and bun run tauri build work normally.
Windows `tauri build` fails at bundling with `program not found`
If the build compiles all the way to Built application at: ...\handy.exe and
then fails with:
Signing C:\...\handy.exe with a custom signing command
failed to bundle project `program not found`that's the code-signing step: tauri.conf.json configures a customsignCommand (trusted-signing-cli, Azure Trusted Signing) that only exists
in the release CI environment. Local development doesn't need it:
# Development (no bundling/signing at all):
bun run tauri dev
# Or compile a release binary without the installer/signing step:
bun run tauri build --no-bundleFile: CLAUDE.md
Read @AGENTS.md
File: CONTRIBUTING.md
Contributing to Handy
Thank you for your interest in contributing to Handy! This guide will help you get started with contributing to this open source speech-to-text application.
โ ๏ธ Feature Freeze
Handy is currently undergoing a feature freeze. If you are submitting a PR which is a new feature that the community has not asked for, it will be rejected. If the community has asked for it, or you have explicitly gathered support, it may still be considered.
Bug fixes are the top priority. There are 60+ issues to fix. Please focus your contributions on fixing bugs and improving stability.
๐ Philosophy
Handy aims to be the most forkable speech-to-text app. The goal is to create both a useful tool and a foundation for others to build uponโa well-patterned, simple codebase that serves the community. We prioritize:
- Simplicity: Clear, maintainable code over clever solutions
- Extensibility: Make it easy for others to fork and customize
- Privacy: Keep everything local and offline
- Accessibility: Free tooling that belongs in everyone's hands
๐ Getting Started
Prerequisites
Before you begin, ensure you have the following installed:
Setting Up Your Development Environment
Fork the repository on GitHub
Clone your fork:
bashgit clone [email protected]:YOUR_USERNAME/Handy.git cd HandyAdd upstream remote:
bashgit remote add upstream [email protected]:cjpais/Handy.gitInstall dependencies:
bashbun installDownload required models:
bashmkdir -p src-tauri/resources/models curl -L -o src-tauri/resources/models/silero-vad-v6.2-F32.gguf https://huggingface.co/handy-computer/silero-vad-v6.2-gguf/resolve/main/silero-vad-v6.2-F32.ggufRun in development mode:
bashbun run tauri dev # On macOS if you encounter cmake errors: CMAKE_POLICY_VERSION_MINIMUM=3.5 bun run tauri dev
For detailed platform-specific setup instructions, see BUILD.md.
Understanding the Codebase
Handy follows a clean architecture pattern:
Backend (Rust - src-tauri/src/):
lib.rs- Main application entry point with Tauri setupmanagers/- Core business logic (audio, model, transcription)audio_toolkit/- Low-level audio processing (recording, VAD)commands/- Tauri command handlers for frontend communicationshortcut.rs- Global keyboard shortcut handlingsettings.rs- Application settings management
Frontend (React/TypeScript - src/):
App.tsx- Main application componentcomponents/- React UI componentshooks/- Reusable React hookslib/types.ts- Shared TypeScript types
For more details, see the Architecture section in README.md or AGENTS.md.
๐ Reporting Bugs
Before Submitting a Bug Report
- Search existing issues at github.com/cjpais/Handy/issues
- Check discussions at github.com/cjpais/Handy/discussions
- Try the latest release to see if the issue has been fixed
- Enable debug mode (
Cmd/Ctrl+Shift+D) to gather diagnostic information
Submitting a Bug Report
When creating a bug report, please include:
System Information:
- App version (found in settings or about section)
- Operating System (e.g., macOS 14.1, Windows 11, Ubuntu 22.04)
- CPU (e.g., Apple M2, Intel i7-12700K, AMD Ryzen 7 5800X)
- GPU (e.g., Apple M2 GPU, NVIDIA RTX 4080, Intel UHD Graphics)
Bug Details:
- Clear description of the bug
- Steps to reproduce
- Expected behavior
- Actual behavior
- Screenshots or logs if applicable
- Information from debug mode if relevant
Use the Bug Report template when creating an issue.
๐ก Suggesting Features
We use GitHub Discussions for feature requests rather than issues. This keeps issues focused on bugs and actionable tasks while allowing more open-ended conversations about features.
Before Suggesting a Feature
- Search existing discussions at github.com/cjpais/Handy/discussions
- Check common feature requests:
Submitting a Feature Request
- Go to Discussions
- Click "New discussion"
- Choose the appropriate category (Ideas, Feature Requests, etc.)
- Describe your feature idea including:
- The problem you're trying to solve
- Your proposed solution
- Any alternatives you've considered
- How it fits with Handy's philosophy
๐ง Making Code Contributions
Before You Start
This is critical: Before writing any code, please do the following:
Search existing issues and PRs - Check both open AND closed issues and pull requests. Someone may have already addressed this, or there may be a reason it was closed.
If something was previously closed - If you want to revisit a closed issue or PR, you need to:
- Provide a strong argument for why it should be reconsidered
- Gather community feedback first via Discussions
- Link to that discussion in your PR
Get community feedback for features - PRs with demonstrated community interest are much more likely to be merged. Start a discussion, get feedback, and link to it in your PR. This helps ensure Handy stays focused and useful for the most people without becoming bloated.
Community feedback is essential to keeping Handy the best it can be for everyone. It helps prioritize what matters most and prevents feature creep.
Development Workflow
Create a feature branch:
bashgit checkout -b feature/your-feature-name # or git checkout -b fix/your-bug-fixMake your changes:
- Write clean, maintainable code
- Follow existing code style and patterns
- Add comments for complex logic
- Keep commits focused and atomic
Test thoroughly:
- Test on your target platform(s)
- Verify existing functionality still works
- Test edge cases and error conditions
- Use debug mode to verify audio/transcription behavior
Commit your changes:
bashgit add . git commit -m "feat: add your feature description" # or git commit -m "fix: describe the bug fix"Use conventional commit messages:
feat:for new featuresfix:for bug fixesdocs:for documentation changesrefactor:for code refactoringtest:for test additions/changeschore:for maintenance tasks
Keep your fork updated:
bashgit fetch upstream git rebase upstream/mainPush to your fork:
bashgit push origin feature/your-feature-nameCreate a Pull Request:
- Go to the Handy repository
- Click "New Pull Request"
- Select your fork and branch
- Fill out the PR template completely, including:
- Clear description of changes
- Links to related issues or discussions
- Community feedback (especially important for features)
- How you tested the changes
- Screenshots/videos if applicable
- Breaking changes (if any)
Remember: PRs with community support are prioritized. If you haven't already, start a discussion to gather feedback before or alongside your PR. It is not explicitly required to gather feedback, but it certainly helps your PR get merged faster.
AI Assistance Disclosure
AI-assisted PRs are welcome! Use whatever tools help you contribute, just be upfront about it.
In your PR description, please include:
- Whether AI was used (yes/no)
- Which tools were used (e.g., "Claude Code", "GitHub Copilot", "ChatGPT")
- How extensively it was used (e.g., "generated boilerplate", "helped debug", "wrote most of the code")
Code Style Guidelines
Rust:
- Follow standard Rust formatting (
cargo fmt) - Run
cargo clippyand address warnings - Use descriptive variable and function names
- Add doc comments for public APIs
- Handle errors explicitly (avoid unwrap in production code)
TypeScript/React:
- Use TypeScript strictly, avoid
anytypes - Follow React hooks best practices
- Use functional components
- Keep components small and focused
- Use Tailwind CSS for styling
General:
- Write self-documenting code
- Add comments for non-obvious logic
- Keep functions small and single-purpose
- Prioritize readability over cleverness
Testing Your Changes
Manual Testing:
- Run the app in development mode:
bun run tauri dev - Test your changes with debug mode enabled
- Verify on multiple platforms if possible
- Test with different audio devices
- Try various transcription scenarios
Building for Production:
bun run tauri buildTest the production build to ensure it works as expected.
๐ Documentation Contributions
Documentation improvements are highly valued! You can contribute by:
- Improving README.md, BUILD.md, or this CONTRIBUTING.md
- Adding code comments and doc comments
- Creating tutorials or guides
- Improving error messages
- Updating the project website content
๐ค Community Guidelines
- Be respectful and inclusive - We welcome contributors of all skill levels
- Be patient - This is maintained by a small team, responses may take time
- Be constructive - Focus on solutions and improvements
- Be collaborative - Help others and share knowledge
- Search first - Check existing issues/discussions before creating new ones
๐ฏ Good First Issues
Look for issues labeled good first issue or help wanted if you're new to the project. These are typically:
- Well-defined and scoped
- Good for learning the codebase
- Mentor support available
๐ Getting Help
- Discord: Join our Discord community
- Discussions: Ask questions in GitHub Discussions
- Email: Reach out at [email protected]
๐ License
By contributing to Handy, you agree that your contributions will be licensed under the MIT License. See LICENSE for details.
Thank you for contributing to Handy! Your efforts help make speech-to-text technology more accessible, private, and extensible for everyone.
File: CONTRIBUTING_TRANSLATIONS.md
Contributing Translations to Handy
Thank you for helping translate Handy! This guide explains how to add or improve translations.
Quick Start
- Fork the repository
- Check the currently supported languages. For an existing language, edit its translation file; for a new language, copy the English translation file to a new language folder
- Translate the values (not the keys!)
- Submit a pull request
File Structure
Translation files are located in:
src/i18n/locales/
โโโ en/
โ โโโ translation.json # English (source)
โโโ vi/
โ โโโ translation.json # Vietnamese
โโโ fr/
โ โโโ translation.json # French
โโโ [your-language]/
โโโ translation.json # Your contribution!Adding a New Language
Step 1: Create the Language Folder
Create a new folder using the ISO 639-1 language code:
mkdir src/i18n/locales/[language-code]Examples:
defor Germanesfor Spanishjafor Japanesezhfor Chinesekofor Koreanptfor Portuguese
Step 2: Copy the English File
cp src/i18n/locales/en/translation.json src/i18n/locales/[language-code]/translation.jsonStep 3: Translate the Values
Open the file and translate only the values (right side), not the keys (left side):
{
"sidebar": {
"general": "General", // โ Translate this value
"advanced": "Advanced", // โ Translate this value
...
}
}Important:
- Keep all keys exactly the same
- Preserve any
{{variables}}in the text (e.g.,{{error}},{{model}}) - Keep the JSON structure and formatting intact
Step 4: Register Your Language
Edit src/i18n/languages.ts and add your language metadata:
export const LANGUAGE_METADATA: Record<
string,
{ name: string; nativeName: string }
> = {
en: { name: "English", nativeName: "English" },
es: { name: "Spanish", nativeName: "Espaรฑol" },
fr: { name: "French", nativeName: "Franรงais" },
vi: { name: "Vietnamese", nativeName: "Tiแบฟng Viแปt" },
de: { name: "German", nativeName: "Deutsch" }, // โ Add your language
};Step 5: Test Your Translation
- Run the app:
bun run tauri dev - Go to Settings โ General โ App Language
- Select your language
- Verify all text displays correctly
Step 6: Submit a Pull Request
- Commit your changes
- Push to your fork
- Open a pull request with:
- Language name in the title (e.g., "Add German translation")
- Any notes about the translation
Improving Existing Translations
Found a typo or better translation?
- Edit the relevant
translation.jsonfile - Submit a PR with a brief description of the change
Translation Guidelines
Do:
- Use natural, native-sounding language
- Keep translations concise (UI space is limited)
- Match the tone of the English text (friendly, clear)
- Preserve technical terms when appropriate (e.g., "API", "GPU")
Don't:
- Translate brand names (Handy, transcribe.cpp, ggml, OpenAI)
- Change or remove
{{variables}} - Modify JSON keys
- Add extra spaces or formatting
Handling Variables
Some strings contain variables like {{error}} or {{model}}. Keep these exactly as-is:
// English
"downloadModel": "Failed to download model: {{error}}"
// French (correct)
"downloadModel": "รchec du tรฉlรฉchargement du modรจle : {{error}}"
// French (incorrect - don't translate the variable!)
"downloadModel": "รchec du tรฉlรฉchargement du modรจle : {{erreur}}"Handling Plurals
Some languages have complex plural rules. For now, use a general form that works for all cases. We may add proper plural support in the future.
Questions?
- Open an issue on GitHub
- Join the discussion in existing translation PRs
Currently Supported Languages
See language metadata for the current language names and codes, and locale folders for their translation files. The app discovers supported languages from these folders.
English is the source language. Existing translations may still need corrections or updates.
Requested Languages
We welcome additional languages that are not yet in the locale folders, as well as improvements to existing translations.
Thank you for making Handy accessible to more people around the world!
File: package.json
{
"name": "handy-app",
"private": true,
"version": "0.9.8",
"type": "module",
"scripts": {
"dev": "vite",
"build": "tsc && vite build",
"preview": "vite preview",
"tauri": "tauri",
"lint": "eslint src",
"lint:fix": "eslint src --fix",
"format": "prettier --write . && cd src-tauri && cargo fmt",
"format:check": "prettier --check . && cd src-tauri && cargo fmt -- --check",
"format:frontend": "prettier --write .",
"format:backend": "cd src-tauri && cargo fmt",
"test:keyboard": "bun src/lib/utils/keyboard.test.ts",
"test:playwright": "playwright test",
"test:playwright:ui": "playwright test --ui",
"check:translations": "bun scripts/check-translations.ts",
"check:model-languages": "bun scripts/check-model-language-coverage.ts",
"sync:catalog": "bun scripts/sync-catalog.ts",
"check:catalog": "bun scripts/sync-catalog.ts --check",
"postinstall": "bun scripts/check-nix-deps.ts"
},
"dependencies": {
"@handy-computer/models": "0.2.2",
"@tailwindcss/vite": "^4.1.16",
"@tauri-apps/api": "^2.11.0",
"@tauri-apps/plugin-autostart": "~2.5.1",
"@tauri-apps/plugin-clipboard-manager": "~2.3.2",
"@tauri-apps/plugin-dialog": "~2.6",
"@tauri-apps/plugin-fs": "~2.4.4",
"@tauri-apps/plugin-global-shortcut": "~2.3.2",
"@tauri-apps/plugin-opener": "^2.5.2",
"@tauri-apps/plugin-os": "~2.3.2",
"@tauri-apps/plugin-process": "~2.3.1",
"@tauri-apps/plugin-sql": "~2.3.1",
"@tauri-apps/plugin-store": "~2.4.1",
"@tauri-apps/plugin-updater": "~2.10.1",
"i18next": "^25.7.2",
"immer": "^11.1.3",
"lucide-react": "^0.542.0",
"react": "^18.3.1",
"react-dom": "^18.3.1",
"react-i18next": "^16.4.1",
"react-markdown": "^10.1.0",
"react-select": "^5.8.0",
"sonner": "^2.0.7",
"tailwindcss": "^4.1.16",
"tauri-plugin-macos-permissions-api": "2.3.0",
"zod": "^3.25.76",
"zustand": "^5.0.8"
},
"devDependencies": {
"@playwright/test": "^1.58.0",
"@tauri-apps/cli": "^2.11.0",
"@types/node": "^24.9.1",
"@types/react": "^18.3.26",
"@types/react-dom": "^18.3.7",
"@types/react-select": "^5.0.1",
"@typescript-eslint/eslint-plugin": "^8.49.0",
"@typescript-eslint/parser": "^8.49.0",
"@vitejs/plugin-react": "^4.7.0",
"eslint": "^9.39.1",
"eslint-plugin-i18next": "^6.1.3",
"prettier": "^3.6.2",
"typescript": "~5.6.3",
"vite": "^6.4.1"
}
}
File: tsconfig.json
{
"compilerOptions": {
"target": "ES2020",
"useDefineForClassFields": true,
"lib": ["ES2020", "DOM", "DOM.Iterable"],
"types": ["node"],
"module": "ESNext",
"skipLibCheck": true,
/* Bundler mode */
"moduleResolution": "bundler",
"allowImportingTsExtensions": true,
"resolveJsonModule": true,
"isolatedModules": true,
"noEmit": true,
"jsx": "react-jsx",
/* Path Aliases */
"baseUrl": ".",
"paths": {
"@/*": ["./src/*"],
"@/bindings": ["./src/bindings.ts"]
},
/* Linting */
"strict": true,
"noUnusedLocals": false,
"noUnusedParameters": false,
"noFallthroughCasesInSwitch": true },
"include": ["src"],
"references": [{ "path": "./tsconfig.node.json" }]
}
File: tsconfig.node.json
{
"compilerOptions": {
"composite": true,
"skipLibCheck": true,
"module": "ESNext",
"moduleResolution": "bundler",
"allowSyntheticDefaultImports": true
},
"include": ["vite.config.ts"]
}
File: docs/troubleshooting/ubuntu-26-04-gnome-wayland/README.md
Handy on Ubuntu 26.04 GNOME Wayland
Tested on Ubuntu 26.04.1 LTS, GNOME Wayland, Handy 0.9.8.
The fix is to use ydotool for typing and handy_keys for shortcuts.
Note: Run commands one by one in terminal
1. Check Wayland and uinput
echo "$XDG_SESSION_TYPE"
id
ls -l /dev/uinput
grep -R 'uinput' /etc/udev/rules.d /usr/lib/udev/rules.d 2>/dev/nullYou should be using Wayland, be in the input group, and have /dev/uinput owned by root:input with mode 0660. Ubuntu provides the required udev rule in 80-uinput.rules.
If you are not in input:
sudo usermod -aG input "$USER"Log out and back in after adding the group.
2. Install and test ydotool
sudo apt install ydotool
systemctl --user start ydotool
systemctl --user status ydotool --no-pager
ydotool type "HELLO FROM YDOTOOL"The service should show active (running) and the test should type into the focused application.
3. Configure Handy
Edit Handy's settings with:
sed -i 's/"typing_tool": "auto"/"typing_tool": "ydotool"/' ~/.local/share/com.pais.handy/settings_store.json
sed -i 's/"keyboard_implementation": "tauri"/"keyboard_implementation": "handy_keys"/' ~/.local/share/com.pais.handy/settings_store.jsonRestart Handy:
pkill handy
handy --start-hidden &Check the Handy log for:
handy-keys manager thread started
handy-keys shortcuts initializedThen use your existing Handy shortcut and test dictation.
4. Hide the overlay
On GNOME, the overlay is a regular window that can take the focus, so nothing is pasted. Set Overlay to None.
5. Install wl-clipboard
Handy uses wl-copy on Wayland when it is installed:
sudo apt install wl-clipboard6. Non-QWERTY keyboard layouts
ydotool sends physical keys, so the built-in paste methods fail on layouts such as bรฉpo or Dvorak: Ctrl+V presses the QWERTY V key, and Shift+Insert breaks while a modifier of your shortcut is still held.
Use an external script instead: it presses Ctrl and the key that types v on your layout, KEY_U (22) on bรฉpo or KEY_DOT (52) on Dvorak (codes in /usr/include/linux/input-event-codes.h).
Create ~/.local/bin/handy-paste, here for bรฉpo:
#!/bin/sh
printf '%s' "$1" | wl-copy
sleep 0.1
ydotool key 29:1 22:1 22:0 29:0chmod +x ~/.local/bin/handy-pasteSet Paste Method to External Script with this path.
File: src/content/release-notes/README.md
Release Notes
Add user-facing release notes as Markdown files named by app version:
src/content/release-notes/0.8.4.mdThe update modal shows the highest bundled release note newer than the
persisted whats_new_last_seen_version and not newer than the running app
version.
Keep these files focused on headline user-facing changes. Release notes support
paragraphs, headings, lists, links, code, quotes, separators, hard line breaks,
and local images under /release-notes/.... Raw HTML is ignored before
rendering.
Place image assets in public/release-notes/{version}/ and reference them from
Markdown with absolute paths:
File: src/content/release-notes/0.9.0.md
transcribe.cpp
transcribe.cpp
is now the primary transcription engine across the app.
transcribe.cpp enables new features in Handy, and also should speed
up transcriptions for most users. The most notable new feature is
the support for streaming models. You will be able to see the
transcribed text as you are speaking. When using streaming models,
typically the transcriptions will also complete much quicker.
Streaming Support
Handy now supports native streaming models. We encourage you to try
them out. Especially:
- Parakeet Unified for English Speakers
- Nemotron Streaming 3.5 for Multilingual Speakers
A new streaming overlay lets you see what is being written or transcribed as you are speaking.
The new default is to use this overlay when using a compatible streaming model.
If you do not like it you can change to the minimal style in the Advanced Settings.
New Model Support
There are a ton of new models that Handy supports as a result of the upgrade to transcribe.cpp.
If you're interested in trying a variety of speech-to-text models, go take a look at the Models page.
Some of the families are:
- IBM's Granite Family
- Mistral's Voxtral Family
- Google's MedASR
- Alibaba's Qwen3 ASR
Notes
This is a big upgrade and theoretically everything will work out of the box.
However there likely will be issues, so please don't hesitate
to report issues on the GitHub Issues Tracker.
In the future we plan to deprecate the "Legacy" models. We will provide
an upgrade path for any people who are still using those models before
we remove support for them. All this means is that you will need to
re-download the model into a format which is supported by transcribe.cpp.
File: src/content/release-notes/0.9.7.md
New Shortcut Behavior
Handy now has an Auto shortcut mode, so the same shortcut can work as both push-to-talk and a toggle. It is the default for new installs.
- Auto โ Hold to record and release to stop, or tap once to start and tap again to stop.
- Hold โ Records only while you hold the shortcut. This is the old push-to-talk behavior.
- Toggle โ Tap once to start recording and tap again to stop.
Existing users will keep their current shortcut behavior after updating. To try Auto, go to General โ Shortcut Behavior.
File: src/i18n/locales/ar/translation.json
{
"tray": {
"settings": "ุงูุฅุนุฏุงุฏุงุช...",
"checkUpdates": "ุงูุชุญูู ู
ู ูุฌูุฏ ุชุญุฏูุซุงุช...",
"copyLastTranscript": "ูุณุฎ ุขุฎุฑ ูุต ุชู
ุชูุฑูุบู",
"unloadModel": "ุชูุฑูุบ ุงููู
ูุฐุฌ",
"model": "ุงููู
ูุฐุฌ",
"quit": "ุฅููุงุก",
"cancel": "ุฅูุบุงุก",
"secureInputWarning": "โ ุงูุงุฎุชุตุงุฑุงุช ู
ุญุฌูุจุฉ ุจูุงุณุทุฉ Secure Input"
},
"sidebar": {
"general": "ุนุงู
",
"advanced": "ู
ุชูุฏู
",
"postProcessing": "ู
ุนุงูุฌุฉ ูุงุญูุฉ",
"history": "ุงูุณุฌู",
"debug": "ุชุตุญูุญ ุงูุฃุฎุทุงุก",
"about": "ุญูู",
"models": "ุงููู
ุงุฐุฌ"
},
"onboarding": {
"subtitle": "ููุจุฏุกุ ุงุฎุชุฑ ูู
ูุฐุฌ ุงูุชูุฑูุบ ุงูุตูุชู",
"existingModelsTitle": "ุงููู
ุงุฐุฌ ุงูู
ุชูุงููุฉ",
"downloadModelsTitle": "ู
ุชุงุญ ููุชูุฒูู",
"showAllModels": "ุนุฑุถ ูู ุงููู
ุงุฐุฌ ({{total}})",
"showFewerModels": "ุนุฑุถ ุนุฏุฏ ุฃูู ู
ู ุงููู
ุงุฐุฌ",
"recommended": "ู
ูุตู ุจู",
"customModelDescription": "ุบูุฑ ู
ุฏุนูู
ุฑุณู
ููุง",
"migration": {
"title": "ูู
ุงุฐุฌู ุจุญุงุฌุฉ ุฅูู ุชุญุฏูุซ",
"description": "ูุณุชุฎุฏู
Handy ุงูุขู ููุนูุง ุฃุญุฏุซ ู
ู ุงููู
ุงุฐุฌ. ูุฒูู ุงูุฅุตุฏุงุฑ ุงูุฌุฏูุฏ ูู
ูุงุตูุฉ ุงูุชูุฑูุบ ุงูุตูุชู. ุณุชุชู
ุฅุฒุงูุฉ ุงูุฅุตุฏุงุฑุงุช ุงููุฏูู
ุฉ.",
"replaces": "ูุญู ู
ุญู {{name}}",
"oldFormat": "ุชูุณูู ูุฏูู
",
"failed": "ูุดู ุงูุชูุฒูู",
"retry": "ุญุงูู ู
ุฑุฉ ุฃุฎุฑู",
"chooseAnother": "ุงุฎุชุฑ ูู
ูุฐุฌูุง ู
ุฎุชูููุง",
"download": "ุชูุฒูู ุงููู
ุงุฐุฌ ({{size}})",
"continue": "ู
ุชุงุจุนุฉ",
"timeRemaining": "ู
ุชุจูู {{time}}"
},
"modelCard": {
"accuracy": "ุงูุฏูุฉ",
"speed": "ุงูุณุฑุนุฉ"
},
"models": {
"small": {
"name": "Whisper Small",
"description": ".ุณุฑูุน ูุฏููู ุฅูู ุญุฏ ู
ุง"
},
"medium": {
"name": "Whisper Medium",
"description": ".ุฏูุฉ ุฌูุฏุฉุ ุณุฑุนุฉ ู
ุชูุณุทุฉ"
},
"turbo": {
"name": "Whisper Turbo",
"description": ".ุชูุงุฒู ุจูู ุงูุฏูุฉ ูุงูุณุฑุนุฉ"
},
"large": {
"name": "Whisper Large",
"description": ".ุฏูุฉ ุฌูุฏุฉุ ูููู ุจุทูุก"
},
"breeze-asr": {
"name": "Breeze ASR",
"description": "ู
ุญุณูู ููู
ุงูุฏุฑูู ุงูุชุงููุงููุฉ. ุฏุนู
ุงูุชุจุฏูู ุจูู ุงููุบุงุช."
}
},
"errors": {
"selectModel": "ูุดู ุชุญุฏูุฏ ุงููู
ูุฐุฌ"
},
"permissions": {
"title": "ุงูุฃุฐููุงุช ุงูู
ุทููุจุฉ",
"description": ".ูุญุชุงุฌ Handy ุฅูู ุจุนุถ ุงูุฃุฐููุงุช ููุนู
ู ุจุดูู ุตุญูุญ",
"microphone": {
"title": "ุงููุตูู ุฅูู ุงูู
ููุฑูููู",
"description": ".ู
ุทููุจ ูุณู
ุงุน ุตูุชู ู
ู ุฃุฌู ุงูุชูุฑูุบ ุงูุตูุชู"
},
"accessibility": {
"title": "ุฅู
ูุงููุฉ ุงููุตูู",
"description": ".ู
ุทููุจ ููุชุงุจุฉ ุงููุต ุงูู
ูุฑุบ ูู ุชุทุจููุงุชู"
},
"grant": "ู
ูุญ ุงูุฅุฐู",
"granted": "ุชู
ุงูู
ูุญ",
"waiting": "ูู ุงูุงูุชุธุงุฑ...",
"allGranted": "ูู ุดูุก ุฌุงูุฒ!",
"errors": {
"checkFailed": "ูุดู ุงูุชุญูู ู
ู ุงูุฃุฐููุงุช. ูุฑุฌูุฑ ุงูู
ุญุงููุฉ ู
ุฑุฉ ุฃุฎุฑู.",
"requestFailed": "ูุดู ุทูุจ ุงูุฅุฐู. ูุฑุฌู ุงูู
ุญุงููุฉ ู
ุฑุฉ ุฃุฎุฑู."
}
}
},
"modelSelector": {
"custom": "ู
ุฎุตุต",
"streaming": "ุงูุจุซ",
"active": "ูุดุท",
"noModelsAvailable": "ูุง ุชูุฌุฏ ูู
ุงุฐุฌ ู
ุชุงุญุฉ",
"verifying": "ุฌุงุฑู ุงูุชุญูู ู
ู {{modelName}}...",
"verifyingGeneric": "ุฌุงุฑู ุงูุชุญูู...",
"downloading": "ุฌุงุฑู ุงูุชูุฒูู {{percentage}}%",
"downloadingMultiple": "ุฌุงุฑู ุชูุฒูู {{count}} ู
ู ุงููู
ุงุฐุฌ...",
"modelReady": "ุงููู
ูุฐุฌ ุฌุงูุฒ",
"loading": "ุฌุงุฑู ุชุญู
ูู {{modelName}}...",
"loadingGeneric": "ุฌุงุฑู ุงูุชุญู
ูู...",
"modelError": "ุฎุทุฃ ูู ุงููู
ูุฐุฌ",
"modelUnloaded": "ุชู
ุฅูุบุงุก ุชุญู
ูู ุงููู
ูุฐุฌ",
"noModelDownloadRequired": "ูุง ููุฌุฏ ูู
ูุฐุฌ - ุงูุชูุฒูู ู
ุทููุจ",
"deleteModel": "ุญุฐู {{modelName}}",
"switching": "ุฌุงุฑู ุงูุชุจุฏูู...",
"downloadSpeed": "{{speed}} ู
ูุฌุงุจุงูุช/ุซ",
"cancel": "ุฅูุบุงุก",
"cancelDownload": "ุฅูุบุงุก ุงูุชูุฒูู",
"capabilities": {
"languageSelection": "ูุฏุนู
ุงุฎุชูุงุฑ ุงููุบุฉ",
"singleLanguage": "ูุฏุนู
ูุฐู ุงููุบุฉ ููุท",
"languageCount": "{{total}} ูุบุฉ",
"languageOnly": "{{language}} ููุท",
"translation": "ูุฏุนู
ุงูุชุฑุฌู
ุฉ",
"translate": "ุชุฑุฌู
ุฉ",
"streaming": "ูุนุฑุถ ุงููุณุฎ ุงูู
ุจุงุดุฑ ุฃุซูุงุก ุงูุชุญุฏุซ"
},
"legacy": "ูุฏูู
"
},
"settings": {
"general": {
"title": "ุนุงู
",
"shortcut": {
"title": "ุงุฎุชุตุงุฑุงุช Handy",
"description": "ุฅุนุฏุงุฏ ุงุฎุชุตุงุฑุงุช ููุญุฉ ุงูู
ูุงุชูุญ ูุจุฏุก ุชุณุฌูู ุงูุชูุฑูุบ ุงูุตูุชู",
"loading": "ุฌุงุฑู ุชุญู
ูู ุงูุงุฎุชุตุงุฑุงุช...",
"none": "ูุง ุชูุฌุฏ ุงุฎุชุตุงุฑุงุช ู
ุฌูุฒุฉ",
"notFound": "ุงูุงุฎุชุตุงุฑ ุบูุฑ ู
ูุฌูุฏ",
"pressKeys": "ุงุถุบุท ุนูู ุงูู
ูุงุชูุญ...",
"bindings": {
"transcribe": {
"name": "ุงุฎุชุตุงุฑ ุงูุชูุฑูุบ ุงูุตูุชู",
"description": ".ุงุฎุชุตุงุฑ ููุญุฉ ุงูู
ูุงุชูุญ ูุชุณุฌูู ูุชูุฑูุบ ุตูุชู"
},
"cancel": {
"name": "ุงุฎุชุตุงุฑ ุงูุฅูุบุงุก",
"description": ".ุงุฎุชุตุงุฑ ููุญุฉ ุงูู
ูุงุชูุญ ูุฅูุบุงุก ุงูุชุณุฌูู ุงูุญุงูู"
},
"transcribe_with_post_process": {
"name": "ู
ูุชุงุญ ุงูู
ุนุงูุฌุฉ ุงููุงุญูุฉ",
"description": "ุงุฎุชูุงุฑู: ู
ูุชุงุญ ุงุฎุชุตุงุฑ ู
ุฎุตุต ูุทุจู ุฏุงุฆู
ุงู ุงูู
ุนุงูุฌุฉ ุงููุงุญูุฉ ุจุงูุฐูุงุก ุงูุงุตุทูุงุนู ุนูู ุงูุชูุฑูุบ ุงูุตูุชู."
}
},
"errors": {
"restore": "ูุดู ุงุณุชุนุงุฏุฉ ุงูุงุฎุชุตุงุฑ ุงูุฃุตูู",
"set": "ูุดู ุชุนููู ุงูุงุฎุชุตุงุฑ: {{error}}",
"reset": "ูุดู ุฅุนุงุฏุฉ ุชุนููู ุงูุงุฎุชุตุงุฑ ุฅูู ููู
ุชู ุงูุฃุตููุฉ"
}
},
"language": {
"title": "ุงููุบุฉ",
"description": ".ุงุฎุชุฑ ูุบุฉ ุงูุชุนุฑู ุนูู ุงูููุงู
. ุณูุญุฏุฏ 'ุชููุงุฆู' ุงููุบุฉ ุชููุงุฆูุงูุ ุจููู
ุง ูุคุฏู ุงุฎุชูุงุฑ ูุบุฉ ู
ุนููุฉ ุฅูู ุชุญุณูู ุงูุฏูุฉ ูุชูู ุงููุบุฉ",
"searchPlaceholder": "ุงูุจุญุซ ุนู ุงููุบุงุช...",
"noResults": "ูู
ูุชู
ุงูุนุซูุฑ ุนูู ูุบุงุช",
"auto": "ุชููุงุฆู"
},
"shortcutActivation": {
"title": "ุณููู ุงูุงุฎุชุตุงุฑ",
"description": "ุงุฎุชุฑ ููููุฉ ุจุฏุก ุงูุชุณุฌูู ูุฅููุงูู ุจุงุณุชุฎุฏุงู
ุงุฎุชุตุงุฑ ุงูุชูุฑูุบ ุงูุตูุชู.",
"options": {
"holdOrToggle": "ุชููุงุฆู",
"pushToTalk": "ุถุบุท ู
ุทููู",
"toggle": "ุชุจุฏูู"
},
"descriptions": {
"hold_or_toggle": "ุงุถุบุท ู
ุทููููุง ููุชุณุฌูู ุฃู ุงููุฑ ููุชุจุฏูู",
"push_to_talk": "ูุณุฌูู ุฃุซูุงุก ุงูุถุบุท ุนูู ุงูุงุฎุชุตุงุฑ",
"toggle": "ุงููุฑ ุนูู ุงูุงุฎุชุตุงุฑ ูุจุฏุก ุงูุชุณุฌููุ ูุงููุฑ ู
ุฑุฉ ุฃุฎุฑู ููุฅููุงู"
}
}
},
"sound": {
"title": "ุงูุตูุช",
"microphone": {
"title": "ุงูู
ููุฑูููู",
"description": "ุงุฎุชุฑ ุฌูุงุฒ ุงูู
ููุฑูููู ุงูู
ูุถู ูุฏูู",
"placeholder": "ุงุฎุชุฑ ุงูู
ููุฑูููู...",
"loading": "ุฌุงุฑู ุงูุชุญู
ูู..."
},
"channel": {
"title": "ููุงุฉ ุงูุฅุฏุฎุงู",
"description": "ุงุฎุชุฑ ููุงุฉ ุงูุฅุฏุฎุงู ุงูุชู ุชุฑูุฏ ุงูุชุณุฌูู ู
ููุง. ุงุณุชุฎุฏู
ูุฐุง ุงูุฎูุงุฑ ุฅุฐุง ูุงูุช ูุงุฌูุฉ ุงูุตูุช ูุฏูู ุชุญุชูู ุนูู ุนุฏุฉ ู
ุฏุงุฎู.",
"average": "ู
ุชูุณุท ุฌู
ูุน ุงููููุงุช",
"channel": "ุงูููุงุฉ {{n}}"
},
"audioFeedback": {
"label": "ุชูุจููุงุช ุตูุชูุฉ",
"description": "ุชุดุบูู ุตูุช ุนูุฏ ุจุฏุก ุงูุชุณุฌูู ูุชูููู"
},
"outputDevice": {
"title": "ุฌูุงุฒ ุงูุฅุฎุฑุงุฌ",
"description": "ุงุฎุชุฑ ุฌูุงุฒ ุฅุฎุฑุงุฌ ุงูุตูุช ุงูู
ูุถู ูุชูุจููุงุช ุงูุตูุช",
"placeholder": "ุงุฎุชุฑ ุฌูุงุฒ ุงูุฅุฎุฑุงุฌ...",
"loading": "ุฌุงุฑู ุงูุชุญู
ูู..."
},
"volume": {
"title": "ู
ุณุชูู ุงูุตูุช",
"description": "ุถุจุท ู
ุณุชูู ุตูุช ุชูุจููุงุช ุงูุตูุช"
}
},
"advanced": {
"groups": {
"app": "ุงูุชุทุจูู",
"output": "ุงูุฅุฎุฑุงุฌ",
"transcription": "ุงูุชูุฑูุบ ุงูุตูุชู",
"history": "ุงูุณุฌู",
"experimental": "ุชุฌุฑูุจู"
},
"experimentalToggle": {
"label": "ุงูู
ูุฒุงุช ุงูุชุฌุฑูุจูุฉ",
"description": ".ุชู
ููู ุงูู
ูุฒุงุช ุงูุชุฌุฑูุจูุฉ ุงูุชู ูุง ุชุฒุงู ููุฏ ุงูุชุทููุฑ"
},
"lazyStreamClose": {
"label": "ุฅุจูุงุก ุงูู
ููุฑูููู ู
ูุชูุญูุง ุจูู ุนู
ููุงุช ุงููุณุฎ",
"description": "ูุจูู ุจุซ ุงูู
ููุฑูููู ู
ูุชูุญูุง ูู
ุฏุฉ 30 ุซุงููุฉ ุจุนุฏ ุชููู ุงูุชุณุฌููุ ู
ู
ุง ูููู ุงูุชุฃุฎูุฑ ุนูุฏ ุงููุณุฎ ุงูู
ุชุชุงูู. ูุฏ ูุคุซุฑ ุนูู ุฌูุฏุฉ ุตูุช ุงูุจููุชูุซ ุฃุซูุงุก ุงูุชูุนูู."
},
"acceleration": {
"transcribe": {
"title": "ุชุณุฑูุน ุงูุฃุฌูุฒุฉ",
"description": "ุงุฎุชุฑ ุงูุฃุฌูุฒุฉ ุงูู
ุณุชุฎุฏู
ุฉ ููุชูุฑูุบ ุงูุตูุชู. ุงููุถุน ุงูุชููุงุฆู ูุณุชุฎุฏู
GPU ุฅู ุชููุฑุ ูุฅูุง ููุณุชุฎุฏู
CPU."
},
"gpuDevice": {
"auto": "ุชููุงุฆู"
}
},
"startHidden": {
"label": "ุจุฏุก ู
ุฎูู",
"description": ".ุงูุชุดุบูู ูู ุตูููุฉ ุงููุธุงู
ุฏูู ูุชุญ ุงููุงูุฐุฉ"
},
"autostart": {
"label": "ุงูุชุดุบูู ุนูุฏ ุจุฏุก ุงูุชุดุบูู",
"description": ".ุจุฏุก ุชุดุบูู Handy ุชููุงุฆูุงู ุนูุฏ ุชุณุฌูู ุงูุฏุฎูู ุฅูู ุฌูุงุฒ ุงููู
ุจููุชุฑ ุงูุฎุงุต ุจู"
},
"showTrayIcon": {
"label": "ุฅุธูุงุฑ ุฃููููุฉ ุดุฑูุท ุงููุธุงู
",
"description": ".ุนุฑุถ ุฃููููุฉ Handy ูู ุดุฑูุท ุงููุธุงู
"
},
"overlay": {
"style": {
"title": "ุงูุชุฑุงูุจ",
"description": "ุงุฎุชุฑ ุชุฑุงูุจ ุงูุชุณุฌูู: ยซุจูุงยป ูุฎูููุ ูยซู
ุจุณุทยป ูุนุฑุถ ุดุงุฑุฉ ุตุบูุฑุฉุ ูยซู
ุจุงุดุฑยป ูุนุฑุถ ุงููุต ุงูู
ูุชูุจ ููุฑููุง ุฃุซูุงุก ุงูุชุญุฏุซ (ุงููู
ุงุฐุฌ ุงูุชู ุชุฏุนู
ุงูุจุซ ููุท โ ุงุจุญุซ ุนู ุดุงุฑุฉ ยซุงูุจุซยป ูู ู
ูุชูู ุงููู
ุงุฐุฌ). ุนูู Linux ูููุตุญ ุจุงุฎุชูุงุฑ ยซุจูุงยป.",
"options": {
"none": "ุจูุง",
"minimal": "ู
ุจุณุท",
"live": "ู
ุจุงุดุฑ"
}
},
"position": {
"title": "ู
ููุน ุงูุชุฑุงูุจ",
"description": "ุนุฑุถ ุชุฑุงูุจ ุงูู
ูุงุญุธุงุช ุงูู
ุฑุฆูุฉ ุฃุซูุงุก ุงูุชุณุฌูู ูุงูุชูุฑูุบ. ุนูู ูุธุงู
Linux ููุตู ุจู 'ุจูุง'.",
"options": {
"bottom": "ุฃุณูู",
"top": "ุฃุนูู"
}
}
},
"pasteMethod": {
"title": "ุทุฑููุฉ ุงููุตู",
"description": ".ุงุฎุชุฑ ููููุฉ ุฅุฏุฑุงุฌ ุงููุต. ู
ุจุงุดุฑ: ูุญุงูู ุงููุชุงุจุฉ ุนุจุฑ ุฅุฏุฎุงู ุงููุธุงู
. ุจูุง: ูุชุฎุทู ุงููุตูุ ููุญุฏุซ ุงูุณุฌู/ุงูุญุงูุธุฉ ููุท",
"options": {
"clipboard": "ุงูุญุงูุธุฉ ({{modifier}}+V)",
"clipboardCtrlShiftV": "ุงูุญุงูุธุฉ (Ctrl+Shift+V)",
"clipboardShiftInsert": "ุงูุญุงูุธุฉ (Shift+Insert)",
"direct": "ู
ุจุงุดุฑ",
"none": "ุจูุง",
"externalScript": "ูุต ุจุฑู
ุฌู ุฎุงุฑุฌู"
},
"externalScriptPlaceholder": "/path/to/your/script.sh"
},
"typingTool": {
"title": "ุฃุฏุงุฉ ุงููุชุงุจุฉ",
"description": ".ุงุฎุชุฑ ุฃุฏุงุฉ ุงููุชุงุจุฉ ูู Linux ูุงุณุชุฎุฏุงู
ูุง ู
ุน ุทุฑููุฉ ุงููุตู ุงูู
ุจุงุดุฑ. ุณููุชุดู "ุชููุงุฆู" ุชููุงุฆูุงู ุฃูุถู ุฃุฏุงุฉ ู
ุชุงุญุฉ ููุธุงู
ู ููุณุชุฎุฏู
ูุง",
"options": {
"auto": "ุชููุงุฆู (ู
ูุตู ุจู)"
}
},
"clipboardHandling": {
"title": "ุงูุชุนุงู
ู ู
ุน ุงูุญุงูุธุฉ",
"description": ".'ุนุฏู
ุชุนุฏูู ุงูุญุงูุธุฉ' ูุญุงูุธ ุนูู ู
ุญุชููุงุช ุญุงูุธุชู ุงูุญุงููุฉ ุจุนุฏ ุงูุชูุฑูุบ. 'ูุณุฎ ุฅูู ุงูุญุงูุธุฉ' ูุชุฑู ูุชูุฌุฉ ุงูุชูุฑูุบ ูู ุญุงูุธุชู ุจุนุฏ ุงููุตู",
"options": {
"dontModify": "ุนุฏู
ุชุนุฏูู ุงูุญุงูุธุฉ",
"copyToClipboard": "ูุณุฎ ุฅูู ุงูุญุงูุธุฉ"
}
},
"autoSubmit": {
"title": "ุฅุฑุณุงู ุชููุงุฆู",
"description": "ุฅุฑุณุงู ู
ุฌู
ูุนุฉ ุงูู
ูุงุชูุญ ุงูู
ุญุฏุฏุฉ ุชููุงุฆูุงู ุจุนุฏ ุฅุฏุฑุงุฌ ุงููุต. Cmd+Enter ููุทุจู ุนูู macOSุ ุจููู
ุง ูุณุชุฎุฏู
Windows/Linux ู
ูุชุงุญ Super+Enter.",
"options": {
"off": "ุฅููุงู",
"enter": "Enter",
"cmdEnter": "Cmd+Enter",
"superEnter": "Super+Enter",
"ctrlEnter": "Ctrl+Enter"
}
},
"translateToEnglish": {
"label": "ุงูุชุฑุฌู
ุฉ ุฅูู ุงูุฅูุฌููุฒูุฉ",
"description": ".ุชุฑุฌู
ุฉ ุงูููุงู
ู
ู ุงููุบุงุช ุงูุฃุฎุฑู ุชููุงุฆูุงู ุฅูู ุงูุฅูุฌููุฒูุฉ ุฃุซูุงุก ุงูุชูุฑูุบ"
},
"modelUnload": {
"title": "ุฅูุบุงุก ุชุญู
ูู ุงููู
ูุฐุฌ",
"description": "ุชุญุฑูุฑ ุฐุงูุฑุฉ GPU/CPU ุชููุงุฆูุงู ุนูุฏู
ุง ูุง ูุชู
ุงุณุชุฎุฏุงู
ุงููู
ูุฐุฌ ููููุช ุงูู
ุญุฏุฏ",
"options": {
"never": "ุฃุจุฏุงู",
"immediately": "ููุฑุงู",
"min2": "ุจุนุฏ ุฏูููุชูู",
"min5": "ุจุนุฏ 5 ุฏูุงุฆู",
"min10": "ุจุนุฏ 10 ุฏูุงุฆู",
"min15": "ุจุนุฏ 15 ุฏูููุฉ",
"hour1": "ุจุนุฏ ุณุงุนุฉ ูุงุญุฏุฉ",
"sec15": "ุจุนุฏ 15 ุซูุงูู (ุชุตุญูุญ ุฃุฎุทุงุก)"
}
},
"customWords": {
"title": "ููู
ุงุช ู
ุฎุตุตุฉ",
"description": "ุณุงุนุฏ ุงููู
ุงุฐุฌ ุงูู
ุฏุนูู
ุฉ ุนูู ุงูุชุนุฑูู ุนูู ุงูุฃุณู
ุงุก ูุงูู
ุตุทูุญุงุช ุงูู
ุชุฎุตุตุฉ. ููุชุตุฑ ุงูุชุตุญูุญ ุงูุชูุฑูุจู ุญุงูููุง ุนูู ุงูููู
ุงุช ุงูุชู ุชุณุชุฎุฏู
ุงูุฃุญุฑู AโZ ูุงูุฃุฑูุงู
.",
"placeholder": "ุฃุถู ููู
ุฉ",
"add": "ุฅุถุงูุฉ",
"remove": "ุฅุฒุงูุฉ {{word}}",
"duplicate": ""{{word}}" ู
ูุฌูุฏ ุจุงููุนู"
},
"voiceActivityDetection": {
"title": "ูุดู ุงููุดุงุท ุงูุตูุชู",
"description": "ุชุตููุฉ ุงูุตู
ุช ู
ู ุงูุชุณุฌููุงุช. ุงููู
ุงุฐุฌ ุงูุชู ุชุฏุนู
ุงูุจุซ ุชุณุชุฎุฏู
ูุชุฑุฉ VAD ุฃุทููุ ูุชุนุทูู VAD ูุณุฌูู ุงูุตูุช ุงูุฎุงู
."
},
"longFormChunking": {
"title": "ุชูุณูู
ุงูุตูุช ุงูุทููู",
"description": "ููุณูู
ุงูุชุณุฌููุงุช ุงูุทูููุฉ ุนูุฏ ูุชุฑุงุช ุงูุชููู ูุจู ูุณุฎูุงุ ู
ู
ุง ูุญุณูู ุฃุฏุงุก ุงููุณุฎ ุนุงุฏุฉู."
},
"vadBackend": {
"title": "ู
ุญุฑู ูุดู ุงููุดุงุท ุงูุตูุชู",
"description": "ุงุฎุชุฑ ุงููุงุดู ุงูู
ุณุชุฎุฏู
ูุชุตููุฉ ุงูุตู
ุช. Earshot ุชุฌุฑูุจูุ ุงุฑุฌุน ุฅูู Silero ุฅุฐุง ุชู
ุงูุชุทุงุน ุงูููุงู
ุฃู ุงูุงุญุชูุงุธ ุจุงูุถูุถุงุก.",
"options": {
"silero": "Silero",
"earshot": "Earshot"
}
},
"fillerWordRemoval": {
"title": "ุฅุฒุงูุฉ ููู
ุงุช ุงูุญุดู",
"description": "ูุฒูู ููู
ุงุช ุงูุชุฑุฏุฏ ุงูุดุงุฆุนุฉ ู
ู ุงููุตูุต. ุนุทูู ูุฐุง ุงูุฎูุงุฑ ููุงุญุชูุงุธ ุจูุง."
},
"chineseScript": {
"title": "ุงููุชุงุจุฉ ุงูุตูููุฉ",
"description": "ููุชุจ ูุตูุต ุงูู
ุงูุฏุฑูู ูุงููุงูุชูููุฉ ุจุงูุฃุญุฑู ุงูู
ุจุณุทุฉ ุฃู ุงูุชูููุฏูุฉ. ูุง ุชุชุบูุฑ ุงููุบุงุช ุงูุฃุฎุฑู.",
"options": {
"asTranscribed": "ูู
ุง ููุณุฎ",
"simplified": "ู
ุจุณุทุฉ",
"traditional": "ุชูููุฏูุฉ"
}
}
},
"postProcessing": {
"hotkey": {
"title": "ู
ูุชุงุญ ุงูุงุฎุชุตุงุฑ"
},
"api": {
"title": "API",
"provider": {
"title": "ุงูู
ุฒูุฏ",
"description": "ุงุฎุชุฑ ู
ุฒูุฏุงู ู
ุชูุงููุงู ู
ุน OpenAI ุฃู Anthropic."
},
"apiFormat": {
"title": "ุชูุณูู API",
"description": "ุชูุณูู ุงูุทูุจ ุงูุฐู ุชุชููุนู ููุทุฉ ุงูููุงูุฉ ุงูู
ุฎุตุตุฉ ุงูุฎุงุตุฉ ุจู.",
"options": {
"openai": "ู
ุชูุงูู ู
ุน OpenAI (Chat Completions)",
"anthropic": "Anthropic Messages"
}
},
"appleIntelligence": {
"unavailable": "Apple Intelligence ุบูุฑ ู
ุชุงุญ ุนูู ูุฐุง ุงูุฌูุงุฒ. ูุชุทูุจ ุฌูุงุฒ Mac ุจู
ุนุงูุฌ Apple Silicon ูุนู
ู ุจูุธุงู
macOS Tahoe (26.0) ุฃู ุฃุญุฏุซ ู
ุน ุชู
ููู Apple Intelligence ูู ุฅุนุฏุงุฏุงุช ุงููุธุงู
."
},
"baseUrl": {
"title": "URL ุงูุฃุณุงุณู",
"description": "URL ุงูุฃุณุงุณู ูู API ููู
ุฒูุฏ ุงูู
ุฎุชุงุฑ. ูู
ูู ุชุนุฏูู ุงูู
ุฒูุฏ ุงูู
ุฎุตุต ููุท.",
"placeholder": "https://api.openai.com/v1",
"placeholderAnthropic": "https://api.anthropic.com/v1"
},
"apiKey": {
"title": "ู
ูุชุงุญ API",
"description": "ู
ูุชุงุญ API ููู
ุฒูุฏ ุงูู
ุฎุชุงุฑ.",
"placeholder": "sk-..."
},
"model": {
"title": "ุงููู
ูุฐุฌ",
"descriptionCustom": "ูุฏู
ู
ุนุฑู ุงููู
ูุฐุฌ ุงูู
ุชููุน ู
ู ูุจู ููุทุฉ ุงูููุงูุฉ ุงูู
ุฎุตุตุฉ ุงูุฎุงุตุฉ ุจู.",
"descriptionDefault": "ุงุฎุชุฑ ูู
ูุฐุฌุงู ูุนุฑุถู ุงูู
ุฒูุฏ ุงูู
ุฎุชุงุฑ.",
"placeholderWithOptions": "ุงุจุญุซ ุนู ูู
ูุฐุฌ ุฃู ุงุฎุชุฑู",
"placeholderNoOptions": "ุงูุชุจ ุงุณู
ุงููู
ูุฐุฌ",
"refreshModels": "ุชุญุฏูุซ ุงููู
ุงุฐุฌ"
}
},
"prompts": {
"title": "ุงูู
ุทุงูุจุฉ",
"selectedPrompt": {
"title": "ุงูู
ุทุงูุจุฉ ุงูู
ุฎุชุงุฑุฉ",
"description": ".ุงุฎุชุฑ ูุงูุจุงู ูุชุญุณูู ุงูุชูุฑูุบ ุงูุตูุชู ุฃู ุฃูุดุฆ ูุงูุจุงู ุฌุฏูุฏุงู. ุงุณุชุฎุฏู
${output} ุฏุงุฎู ูุต ุงูู
ุทุงูุจุฉ ููุฅุดุงุฑุฉ ุฅูู ุงููุต ุงูู
ูุชูุท"
},
"noPrompts": "ูุง ุชูุฌุฏ ู
ุทุงูุจุงุช ู
ุชุงุญุฉ",
"selectPrompt": "ุงุฎุชุฑ ู
ุทุงูุจุฉ",
"createNew": "ุฅูุดุงุก ู
ุทุงูุจุฉ ุฌุฏูุฏุฉ",
"promptLabel": "ุชุณู
ูุฉ ุงูู
ุทุงูุจุฉ",
"promptLabelPlaceholder": "ุฃุฏุฎู ุงุณู
ุงูู
ุทุงูุจุฉ",
"promptInstructions": "ุชุนููู
ุงุช ุงูู
ุทุงูุจุฉ",
"promptInstructionsPlaceholder": ".ุงูุชุจ ุงูุชุนููู
ุงุช ุงูู
ุฑุงุฏ ุชุดุบูููุง ุจุนุฏ ุงูุชูุฑูุบ ุงูุตูุชู. ู
ุซุงู: ูู
ุจุชุญุณูู ุงูููุงุนุฏ ูุงููุถูุญ ูููุต ุงูุชุงูู: ${output}",
"promptTip": "ุชูู
ูุญ: ุงุณุชุฎุฏู
${output} ูุฅุฏุฑุงุฌ ุงููุต ุงูู
ูุฑุบ ูู ู
ุทุงูุจุชู.",
"updatePrompt": "ุชุญุฏูุซ ุงูู
ุทุงูุจุฉ",
"deletePrompt": "ุญุฐู ุงูู
ุทุงูุจุฉ",
"createPrompt": "ุฅูุดุงุก ู
ุทุงูุจุฉ",
"cancel": "ุฅูุบุงุก",
"selectToEdit": ".ุงุฎุชุฑ ู
ุทุงูุจุฉ ุฃุนูุงู ูุนุฑุถ ูุชุนุฏูู ุชูุงุตูููุง",
"createFirst": ".ุงููุฑ ุนูู 'ุฅูุดุงุก ู
ุทุงูุจุฉ ุฌุฏูุฏุฉ' ุฃุนูุงู ูุฅูุดุงุก ุฃูู ู
ุทุงูุจุฉ ู
ุนุงูุฌุฉ ูุงุญูุฉ ูู"
}
},
"history": {
"title": "ุงูุณุฌู",
"openFolder": "ูุชุญ ู
ุฌูุฏ ุงูุชุณุฌููุงุช",
"loading": "ุฌุงุฑู ุชุญู
ูู ุงูุณุฌู...",
"empty": "!ูุง ููุฌุฏ ุชูุฑูุบ ุตูุชู ุจุนุฏ. ุงุจุฏุฃ ุงูุชุณุฌูู ูุจูุงุก ุณุฌูู",
"copyToClipboard": "ูุณุฎ ุงูุชูุฑูุบ ุฅูู ุงูุญุงูุธุฉ",
"copyError": "ุชุนุฐุฑ ูุณุฎ ุงูุชูุฑูุบ ุฅูู ุงูุญุงูุธุฉ.",
"save": "ุญูุธ ุงูุชูุฑูุบ",
"unsave": "ุฅุฒุงูุฉ ู
ู ุงูู
ุญููุธุงุช",
"delete": "ุญุฐู ุงูุฅุฏุฎุงู",
"deleteError": ".ูุดู ุญุฐู ุงูุฅุฏุฎุงู. ูุฑุฌู ุงูู
ุญุงููุฉ ู
ุฑุฉ ุฃุฎุฑู",
"retranscribe": "ุฅุนุงุฏุฉ ุงููุณุฎ",
"retranscribeError": "ูุดูุช ุฅุนุงุฏุฉ ุงููุณุฎ. ูุฑุฌู ุงูู
ุญุงููุฉ ู
ุฑุฉ ุฃุฎุฑู.",
"transcribing": "ุฌุงุฑู ุงููุณุฎ...",
"transcriptionFailed": "ูุดู ุงููุณุฎ. ูู
ููู ุฅุนุงุฏุฉ ุงููุณุฎ ุจุงุณุชุฎุฏุงู
ุฃููููุฉ ุฅุนุงุฏุฉ ุงูู
ุญุงููุฉ."
},
"debug": {
"title": "ุชุตุญูุญ ุงูุฃุฎุทุงุก",
"logDirectory": {
"title": "ู
ุฌูุฏ ุงูุณุฌูุงุช",
"description": "ุงูู
ููุน ุงูุฐู ูุชู
ููู ุชุฎุฒูู ู
ููุงุช ุงูุณุฌู"
},
"logLevel": {
"title": "ู
ุณุชูู ุงูุณุฌู",
"description": "ุถุจุท ุฏุฑุฌุฉ ุชูุตูู ุงูุณุฌูุงุช"
},
"liveLogs": {
"title": "ุงูุณุฌูุงุช ุงูู
ุจุงุดุฑุฉ",
"description": "ุงุนุฑุถ ุณุฌูุงุช ุงูุชุทุจูู ูู ุงูููุช ุงููุนูู ูุชุดุฎูุต ุงูู
ุดููุงุช ุฏูู ูุชุญ ู
ูู ุงูุณุฌู. ุชูุนุฑุถ ููุท ุงูุณุฌูุงุช ุงูุตุงุฏุฑุฉ ุฃุซูุงุก ูุชุญ ูุฐู ุงูููุญุฉุ ูุชุฑุงุนู ุฅุนุฏุงุฏ ยซู
ุณุชูู ุงูุณุฌูยป ุฃุนูุงู.",
"live": "ู
ุจุงุดุฑ",
"paused": "ู
ุชููู ู
ุคูุชูุง",
"pause": "ุฅููุงู ู
ุคูุช",
"resume": "ุงุณุชุฆูุงู",
"copied": "ุชู
ุงููุณุฎ",
"lineCount": "{{count}} ุณุทุฑ",
"empty": "ุจุงูุชุธุงุฑ ุงูุณุฌูุงุชโฆ ุณุชุธูุฑ ุงูุฅุฏุฎุงูุงุช ููุง ููุฑ ุฅุตุฏุงุฑ ุงูุชุทุจูู ููุง."
},
"updateChecks": {
"label": "ุงูุชุญูู ู
ู ูุฌูุฏ ุชุญุฏูุซุงุช",
"description": "ุงูุชุญูู ุชููุงุฆูุงู ู
ู ูุฌูุฏ ุฅุตุฏุงุฑุงุช ุฌุฏูุฏุฉ ู
ู Handy",
"lockedDescription": "ู
ุนุทูู ุจูุงุณุทุฉ ุฅุนุฏุงุฏุงุช ุงููุธุงู
(HANDY_DISABLE_UPDATER)"
},
"soundTheme": {
"label": "ุณู
ุฉ ุงูุตูุช",
"description": "ุงุฎุชุฑ ุณู
ุฉ ุตูุช ูุชูุจููุงุช ุจุฏุก ูุชููู ุงูุชุณุฌูู"
},
"wordCorrectionThreshold": {
"title": "ุนุชุจุฉ ุชุตุญูุญ ุงูููู
ุงุช",
"description": "ุญุณุงุณูุฉ ุชุตุญูุญ ุงูููู
ุงุช ุงูู
ุฎุตุตุฉ"
},
"historyLimit": {
"title": "ุญุฏ ุงูุณุฌู",
"description": "ุงูุญุฏ ุงูุฃูุตู ูุนุฏุฏ ุฅุฏุฎุงูุงุช ุงูุณุฌู ุงูู
ุฑุงุฏ ุงูุงุญุชูุงุธ ุจูุง",
"entries": "ุฅุฏุฎุงูุงุช"
},
"recordingRetention": {
"title": "ุญุฐู ุงูุชุณุฌููุงุช ุชููุงุฆูุงู",
"description": "ุญุฐู ุงูุชุณุฌููุงุช ุงููุฏูู
ุฉ ุชููุงุฆูุงู ูุชูููุฑ ุงูู
ุณุงุญุฉ",
"never": "ุฃุจุฏุงู",
"preserveLimit": "ุงูุงุญุชูุงุธ ุจุขุฎุฑ {{count}}",
"days3": "ุจุนุฏ 3 ุฃูุงู
",
"weeks2": "ุจุนุฏ ุฃุณุจูุนูู",
"months3": "ุจุนุฏ 3 ุฃุดูุฑ",
"placeholder": "ุงุฎุชุฑ ูุชุฑุฉ ุงูุงุญุชูุงุธ..."
},
"alwaysOnMicrophone": {
"label": "ู
ููุฑูููู ูุนู
ู ุฏุงุฆู
ุงู",
"description": "ุฅุจูุงุก ุงูู
ููุฑูููู ูุดุทุงู ูุงุณุชุฌุงุจุฉ ุฃุณุฑุน"
},
"clamshellMicrophone": {
"title": "ู
ููุฑูููู ูุถุน ุงูุฅุบูุงู",
"description": "ุงูู
ููุฑูููู ุงูู
ุฑุงุฏ ุงุณุชุฎุฏุงู
ู ุนูุฏู
ุง ูููู ุบุทุงุก ุงูู
ุญู
ูู ู
ุบููุงู"
},
"postProcessingToggle": {
"label": "ู
ุนุงูุฌุฉ ูุงุญูุฉ",
"description": "ุชู
ููู ุชุญุณูู ุงููุต ุงูู
ุฏุนูู
ุจุงูุฐูุงุก ุงูุงุตุทูุงุนู ุจุนุฏ ุงูุชูุฑูุบ ุงูุตูุชู"
},
"muteWhileRecording": {
"label": "ูุชู
ุงูุตูุช ุฃุซูุงุก ุงูุชุณุฌูู",
"description": "ูุชู
ุตูุช ุงููุธุงู
ุฃุซูุงุก ุงูุชุณุฌูู"
},
"appendTrailingSpace": {
"label": "ุฅุถุงูุฉ ู
ุณุงูุฉ ุชุงุจุนุฉ",
"description": "ุฅุถุงูุฉ ู
ุณุงูุฉ ุจุนุฏ ุงูุชูุฑูุบ ุงูู
ูุตู"
},
"keyboardImplementation": {
"title": "ุชูููุฐ ููุญุฉ ุงูู
ูุงุชูุญ",
"description": ".ุงุฎุชุฑ ุงููุงุฌูุฉ ุงูุฎูููุฉ ูุงุฎุชุตุงุฑุงุช ููุญุฉ ุงูู
ูุงุชูุญ",
"bindingsReset": "ูุงูุช ุงุฎุชุตุงุฑุงุช ููุญุฉ ุงูู
ูุงุชูุญ ุบูุฑ ู
ุชูุงููุฉ ูุชู
ุช ุฅุนุงุฏุฉ ุชุนููููุง ุฅูู ุงูููู
ุงูุงูุชุฑุงุถูุฉ"
},
"paths": {
"appData": "ุจูุงูุงุช ุงูุชุทุจูู:",
"models": "ุงููู
ุงุฐุฌ:",
"settings": "ุงูุฅุนุฏุงุฏุงุช:"
},
"pasteDelay": {
"title": "ุชุฃุฎูุฑ ุงููุตู (ูุจู)",
"description": "ุงูุชุฃุฎูุฑ (ุจุงูู
ููู ุซุงููุฉ) ุจุนุฏ ูุณุฎ ุงููุต ููุจู ุฅุฑุณุงู ุถุบุทุฉ ู
ูุชุงุญ ุงููุตู. ูู
ุจุฒูุงุฏุชู ุฅุฐุง ูู
ูุชู
ูุตู ุฃู ุดูุก."
},
"pasteDelayAfter": {
"title": "ุชุฃุฎูุฑ ุงููุตู (ุจุนุฏ)",
"description": "ุงูุชุฃุฎูุฑ (ุจุงูู
ููู ุซุงููุฉ) ุจุนุฏ ุถุบุทุฉ ู
ูุชุงุญ ุงููุตู ููุจู ุงุณุชุนุงุฏุฉ ู
ุญุชูู ุงูุญุงูุธุฉ ุงูุณุงุจู. ูู
ุจุฒูุงุฏุชู ุฅุฐุง ุชู
ูุตู ู
ุญุชูู ุงูุญุงูุธุฉ ุงููุฏูู
ุจุฏูุงู ู
ู ุงููุต ุงูู
ููุฑููุบ."
},
"holdThreshold": {
"title": "ุญุฏ ุงูุถุบุท ุงูู
ุทููู",
"description": "ูู ุงููุถุน ุงูุชููุงุฆู ููุท: ุงูู
ุฏุฉ (ุจุงูู
ููู ุซุงููุฉ) ุงูุชู ูุฌุจ ุงูุงุณุชู
ุฑุงุฑ ูู ุงูุถุบุท ุนูู ุงูุงุฎุชุตุงุฑ ุฎูุงููุง ูููุนุฏู ุถุบุทูุง ู
ุทููููุง ุจุฏููุง ู
ู ููุฑุฉ. ูููููุง ุฅุฐุง ุธูู ุงูุชุณุฌูู ู
ุณุชู
ุฑูุง ุจุนุฏ ุถุบุทุงุช ู
ุทูููุฉ ูุตูุฑุฉุ ูุฒุฏูุง ุฅุฐุง ุนููู
ูุช ุงูููุฑุงุช ุงูู
ูุตูุฏุฉ ุนูู ุฃููุง ุถุบุท ู
ุทููู."
},
"reliablePaste": {
"title": "ูุตู ู
ูุซูู (Beta)",
"description": "ุงุณุชุนุงุฏุฉ ุงูุญุงูุธุฉ ููุท ุจุนุฏ ุฃู ููุฑุฃ ุงูุชุทุจูู ุงูู
ุณุชูุฏู ุงููุต ุงูู
ููุฑููุบ ูุนููุงูุ ุจุฏูุงู ู
ู ุงูุงุนุชู
ุงุฏ ุนูู ุชุฃุฎูุฑ ุซุงุจุช. ููุฏู ุฅูู ุฅุตูุงุญ ูุตู ู
ุญุชูู ุงูุญุงูุธุฉ ุงููุฏูู
ุนูุฏ ูุฌูุฏ ุญู
ู ุนูู ุงููุธุงู
. ูุชุทูุจ ุทุฑููุฉ ูุตู ุชุนุชู
ุฏ ุนูู ุงูุญุงูุธุฉุ ุนูู macOS ูWindows ููุท."
},
"recordingBuffer": {
"title": "ู
ุฎุฒู ุงูุชุณุฌูู ุงูุฅุถุงูู",
"description": "ููุช ุฅุถุงูู (ุจุงูู
ููู ุซุงููุฉ) ููุงุณุชู
ุฑุงุฑ ูู ุงูุชุณุฌูู ุจุนุฏ ุชุญุฑูุฑ ุงูู
ูุชุงุญุ ูุงูุชูุงุท ุงูุตูุช ุงูู
ุชุจูู. 0 = ูุง ู
ุฎุฒู ุฅุถุงูู."
},
"keyboardDiagnostic": {
"title": "ุชุดุฎูุต ููุญุฉ ุงูู
ูุงุชูุญ",
"description": "ูุชุญูู ู
ู
ุง ุฅุฐุง ูุงูุช ุฃุญุฏุงุซ ููุญุฉ ุงูู
ูุงุชูุญ ุชุตู ุฅูู Handy. ููุณุฌููู ุนุฏุฏ ุงูุฃุญุฏุงุซ ููุท โ ููุง ุชูุณุฌููู ุฃุจุฏูุง ุงูู
ูุงุชูุญ ุงูุชู ุชุถุบุท ุนูููุง.",
"run": "ุชุดุบูู ุชุดุฎูุต ูู
ุฏุฉ 10 ุซูุงูู",
"running": "ุฌุงุฑู ุงูุงุณุชู
ุงุนโฆ ุงุถุบุท ุงุฎุชุตุงุฑู ุนุฏุฉ ู
ุฑุงุช (ู
ุซู Option+Space)",
"secureInputLabel": "Secure Input",
"enabled": "ู
ููุนููู",
"disabled": "ู
ูุนุทููู",
"holder": "ูุญุชุฌุฒู {{name}} (pid {{pid}})",
"holderUnknown": "ูุง ููุฌุฏ ู
ุญุชุฌูุฒ ุธุงูุฑ",
"keyDown": "ุถุบุท ู
ูุชุงุญ",
"keyUp": "ุชุญุฑูุฑ ู
ูุชุงุญ",
"flagsChanged": "ู
ูุงุชูุญ ุงูุชุนุฏูู",
"mouse": "ุงูู
ุงูุณ",
"verdictBlocked": "ูุญุฌุจ Secure Input ุฃุญุฏุงุซ ุงูู
ูุงุชูุญ โ ูุง ูู
ูู ููุงุฎุชุตุงุฑุงุช ุงูุชู ุชุชุถู
ู ู
ูุชุงุญูุง ุนุงุฏููุง ุฃู ุชุนู
ู ุญุชู ุชูุญูู ุงูู
ุดููุฉ.",
"verdictSuspicious": "ูุตูุช ุฃุญุฏุงุซ ู
ูุงุชูุญ ุงูุชุนุฏูู ููู ูู
ูุตู ุฃู ุญุฏุซ ู
ูุชุงุญ โ ููุงู ุดูุก ูู
ูุน ุงูู
ูุงุชูุญ ุฑุบู
ุฃู Secure Input ูุธูุฑ ู
ุนุทูุงู. ููุฑุฌู ุงูุฅุจูุงุบ ุนู ุฐูู ุนูู GitHub.",
"verdictOk": "ุฃุญุฏุงุซ ุงูู
ูุงุชูุญ ุชุตู ุฅูู Handy ุจุดูู ุทุจูุนู.",
"verdictNoEvents": "ูู
ููุณุฌููู ุฃู ุญุฏุซ โ ูู ุถุบุทุช ุฃู ู
ูุงุชูุญ ุฃุซูุงุก ุงูุงุฎุชุจุงุฑุ",
"failed": "ูุดู ุงูุชุดุฎูุต: {{error}}"
},
"whatsNewPreview": {
"title": "ู
ุนุงููุฉ ุงูุฌุฏูุฏ",
"description": "ุงูุชุญ ุฃุญุฏุซ ู
ูุงุญุธุงุช ุฅุตุฏุงุฑ ู
ุถู
ูุฉ ุฏูู ูุถุน ุนูุงู
ุฉ ุนูููุง ูู
ูุฑูุกุฉ",
"button": "ู
ุนุงููุฉ",
"noNotes": "ูู
ูุชู
ุงูุนุซูุฑ ุนูู ู
ูุงุญุธุงุช ุฅุตุฏุงุฑ ู
ุถู
ูุฉ",
"error": "ุชุนุฐุฑุช ู
ุนุงููุฉ ู
ูุงุญุธุงุช ุงูุฅุตุฏุงุฑ"
},
"onboardingPreview": {
"title": "ู
ุนุงููุฉ ุงูุฅุนุฏุงุฏ ุงูุฃููู",
"description": "ุนุงูู ุดุงุดุงุช ุงูุฅุนุฏุงุฏ ุงูุฃููู ุฏูู ุชุบููุฑ ุงูุฃุฐููุงุช ุฃู ุงููู
ุงุฐุฌ ุฃู ุญุงูุฉ ุงูุฅูู
ุงู",
"permissionsButton": "ุงูุฃุฐููุงุช",
"modelsButton": "ุงุฎุชูุงุฑ ุงููู
ูุฐุฌ",
"exitButton": "ุฅููุงุก ุงูู
ุนุงููุฉ"
}
},
"about": {
"title": "ุญูู",
"version": {
"title": "ุงูุฅุตุฏุงุฑ",
"description": "ุงูุฅุตุฏุงุฑ ุงูุญุงูู ู
ู Handy"
},
"appDataDirectory": {
"title": "ู
ุฌูุฏ ุจูุงูุงุช ุงูุชุทุจูู",
"description": "ุงูู
ููุน ุงูุฐู ูุฎุฒู ููู Handy ุจูุงูุงุชู"
},
"sourceCode": {
"title": "ููุฏ ุงูู
ุตุฏุฑ",
"description": "ุนุฑุถ ููุฏ ุงูู
ุตุฏุฑ ูุงูู
ุณุงูู
ุฉ",
"button": "ุนุฑุถ ุนูู GitHub"
},
"supportDevelopment": {
"title": "ุฏุนู
ุงูุชุทููุฑ",
"description": "ุณุงุนุฏูุง ูู ู
ูุงุตูุฉ ุจูุงุก Handy",
"button": "ุชุจุฑุน"
},
"acknowledgments": {
"title": "ุดูุฑ ูุชูุฏูุฑ",
"ggml": {
"title": "ggml",
"description": "ุงุณุชูุชุงุฌ ุนุงูู ุงูุฃุฏุงุก ููู
ูุฐุฌ ุงูุชุนุฑู ุงูุชููุงุฆู ุนูู ุงูููุงู
Whisper ู
ู OpenAI",
"details": ".ูุณุชุฎุฏู
Handy ุจุฑูุงู
ุฌ ggml ูู
ุนุงูุฌุฉ ุณุฑูุนุฉ ูู
ุญููุฉ ูุชุญููู ุงูููุงู
ุฅูู ูุต. ุดูุฑุงู ููุนู
ู ุงูุฑุงุฆุน ุงูุฐู ูุงู
ุจู Georgi Gerganov ูุงูู
ุณุงูู
ูู"
}
},
"whatsNewUpdates": {
"label": "ุฅุธูุงุฑ ุงูุฌุฏูุฏ",
"description": "ุฅุธูุงุฑ ู
ูุงุญุธุงุช ุงูุฅุตุฏุงุฑ ุจุนุฏ ุชุญุฏูุซุงุช Handy"
}
},
"modelSettings": {
"title": "ุฅุนุฏุงุฏุงุช {{model}}"
},
"models": {
"title": "ูู
ุงุฐุฌ ุงููุณุฎ",
"description": "ุงุฎุชุฑ ูู
ูุฐุฌ ูุณุฎ ุฃู ูู
ุจุชูุฒูู ูู
ุงุฐุฌ ุฅุถุงููุฉ. ุชูุฏู
ุงููู
ุงุฐุฌ ุงูู
ุฎุชููุฉ ู
ุณุชููุงุช ู
ุชูุงูุชุฉ ู
ู ุงูุฏูุฉ ูุงูุณุฑุนุฉ.",
"yourModels": "ุงููู
ุงุฐุฌ ุงูู
ุญู
ููุฉ",
"availableModels": "ู
ุชุงุญ ููุชูุฒูู",
"deleteConfirm": "ูู ุฃูุช ู
ุชุฃูุฏ ุฃูู ุชุฑูุฏ ุญุฐู {{modelName}}ุ ุณุชุญุชุงุฌ ุฅูู ุชูุฒููู ู
ุฑุฉ ุฃุฎุฑู ูุงุณุชุฎุฏุงู
ู.",
"deleteActiveConfirm": "{{modelName}} ูู ุงููู
ูุฐุฌ ุงููุดุท ุญุงูููุง. ุญุฐูู ุณูููู ุงููุณุฎ ุญุชู ุชุฎุชุงุฑ ูู
ูุฐุฌูุง ุฌุฏูุฏูุง. ูู ุฃูุช ู
ุชุฃูุฏุ",
"deleteTitle": "ุญุฐู ุงููู
ูุฐุฌ",
"retiredNotice": {
"title": "ุงููู
ุงุฐุฌ ุงููุฏูู
ุฉ ูู
ุชุนุฏ ุชุนู
ู ู
ุน Handy",
"description": "ุฅููุง ุชุดุบู {{size}} ุนูู ุฌูุงุฒ ุงููู
ุจููุชุฑ ุงูุฎุงุต ุจู.",
"delete": "ุญุฐู ุงููู
ุงุฐุฌ",
"deleted": "ุชู
ุญุฐู ุงููู
ุงุฐุฌ ุงููุฏูู
ุฉ",
"deleteFailed": "ุชุนุฐูุฑ ุญุฐู ุจุนุถ ุงููู
ุงุฐุฌ ุงููุฏูู
ุฉ. ุชุญูู ู
ู ุงูุณุฌู ูู
ุฒูุฏ ู
ู ุงูุชูุงุตูู."
},
"filters": {
"allLanguages": "ุฌู
ูุน ุงููุบุงุช",
"streaming": "ุชุตููุฉ ุงููู
ุงุฐุฌ ุงูุชู ุชุฏุนู
ุงููุณุฎ ุงูู
ุจุงุดุฑ",
"translation": "ุชุตููุฉ ุงููู
ุงุฐุฌ ุงูุชู ุชุฏุนู
ุงูุชุฑุฌู
ุฉ ุฅูู ุงูุฅูุฌููุฒูุฉ"
},
"noModelsMatch": "ูุง ุชูุฌุฏ ูู
ุงุฐุฌ ู
ุทุงุจูุฉ ููุฐุง ุงูููุชุฑ.",
"searchPlaceholder": "ุงุจุญุซ ุนู ุงููู
ุงุฐุฌ ุจุงูุงุณู
โฆ",
"rescan": {
"label": "ุฅุนุงุฏุฉ ุงููุญุต",
"tooltip": "ุฅุนุงุฏุฉ ุงููุญุต ุจุญุซูุง ุนู ุงููู
ุงุฐุฌ ุงูู
ุถุงูุฉ ุฅูู ู
ุฌูุฏ ุงููู
ุงุฐุฌ ุฃู ุฐุงูุฑุฉ Hugging Face ุงูุชุฎุฒูููุฉ ุงูู
ุคูุชุฉ ุฎุงุฑุฌ Handy"
}
}
},
"footer": {
"checkingUpdates": "ุฌุงุฑู ุงูุชุญูู ู
ู ูุฌูุฏ ุชุญุฏูุซุงุช...",
"updateAvailableShort": "ุชุญุฏูุซ ู
ุชุงุญ",
"upToDate": "ู
ุญุฏุซ",
"updateCheckingDisabled": "ุชู
ุชุนุทูู ุงูุชุญูู ู
ู ุงูุชุญุฏูุซ",
"downloading": "ุฌุงุฑู ุงูุชูุฒูู {{progress}}%...",
"installing": "ุฌุงุฑู ุงูุชุซุจูุช...",
"preparing": "ุฌุงุฑู ุงูุชุญุถูุฑ...",
"checkForUpdates": "ุงูุชุญูู ู
ู ูุฌูุฏ ุชุญุฏูุซุงุช",
"portableUpdateTitle": "ุงูุชุญุฏูุซ ุงููุฏูู ู
ุทููุจ",
"portableUpdateMessage": "ูุง ูู
ูู ุชุญุฏูุซ ุงูุชุซุจูุชุงุช ุงูู
ุญู
ููุฉ ุชููุงุฆููุง. ูุฒูู ุงูู
ุซุจูุช ุงูู
ูุงุณุจ ููุธุงู
ู ู
ู ุงูุฒุฑ ุฃุฏูุงูุ ุดุบูููุ ูุซุจูุชู ูู ุงูู
ุฌูุฏ ููุณู โ ูุจูู ู
ุฌูุฏ Data/ (ุงูุฅุนุฏุงุฏุงุช ูุงููู
ุงุฐุฌ ูุงูุชุณุฌููุงุช) ูู ู
ูุงูู.",
"portableUpdateButton": "ุชูุฒูู ุงูู
ุซุจูุช",
"portableUpdateBrowseMessage": "ูุง ูู
ูู ุชุญุฏูุซ ุงูุชุซุจูุชุงุช ุงูู
ุญู
ููุฉ ุชููุงุฆููุง. ูุฒูู ุฃุญุฏุซ ุฅุตุฏุงุฑ ู
ูุงุณุจ ููุธุงู
ู ู
ู GitHub Releases ูุซุจูุชู ูู ุงูู
ุฌูุฏ ููุณู โ ูุจูู ู
ุฌูุฏ Data/ (ุงูุฅุนุฏุงุฏุงุช ูุงููู
ุงุฐุฌ ูุงูุชุณุฌููุงุช) ูู ู
ูุงูู.",
"portableUpdateBrowseButton": "ูุชุญ GitHub Releases"
},
"common": {
"loading": "ุฌุงุฑู ุงูุชุญู
ูู...",
"delete": "ุญุฐู",
"back": "ุฑุฌูุน",
"close": "ุฅุบูุงู",
"open": "ูุชุญ",
"copy": "ูุณุฎ",
"clear": "ู
ุณุญ",
"noOptionsFound": "ูู
ูุชู
ุงูุนุซูุฑ ุนูู ุฎูุงุฑุงุช"
},
"accessibility": {
"permissionsDescription": ".ูุญุชุงุฌ Handy ุฅูู ุฃุฐููุงุช ุฅู
ูุงููุฉ ุงููุตูู ููุชุงุจุฉ ุงููุต ุงูู
ูุฑุบ",
"openSettings": "ูุชุญ ุฅุนุฏุงุฏุงุช ุงููุธุงู
"
},
"errors": {
"loadDirectory": "ุฎุทุฃ ูู ุชุญู
ูู ุงูู
ุฌูุฏ: {{error}}",
"micPermissionDeniedTitle": "ุชู
ุฑูุถ ุงููุตูู ุฅูู ุงูู
ููุฑูููู",
"micPermissionDenied": {
"generic": "ุชู
ุฑูุถ ุงููุตูู ุฅูู ุงูู
ููุฑูููู ู
ู ูุจู ูุธุงู
ุงูุชุดุบูู. ูุฑุฌู ู
ูุญ ุฅุฐู ุงูู
ููุฑูููู ูู ุฅุนุฏุงุฏุงุช ุงููุธุงู
.",
"windows": "ูู
ุจุชู
ููู ุงููุตูู ุฅูู ุงูู
ููุฑูููู ูู ุงูุฅุนุฏุงุฏุงุช โ ุงูุฎุตูุตูุฉ ูุงูุฃู
ุงู โ ุงูู
ููุฑูููู (ุจู
ุง ูู ุฐูู ูุตูู ุชุทุจููุงุช ุณุทุญ ุงูู
ูุชุจ).",
"macos": "ุงู
ูุญ ุงููุตูู ุฅูู ุงูู
ููุฑูููู ูู ุฅุนุฏุงุฏุงุช ุงููุธุงู
โ ุงูุฎุตูุตูุฉ ูุงูุฃู
ุงู โ ุงูู
ููุฑูููู.",
"linux": "ุงู
ูุญ ุงููุตูู ุฅูู ุงูู
ููุฑูููู ูู ุฅุนุฏุงุฏุงุช ุงูุตูุช ุฃู ุงูุฎุตูุตูุฉ ูู ูุธุงู
ู."
},
"noInputDeviceTitle": "ูู
ูุชู
ุงูุนุซูุฑ ุนูู ู
ููุฑูููู",
"noInputDevice": "ูู
ูุชู
ุงูุชุดุงู ุฃู ุฌูุงุฒ ุฅุฏุฎุงู ุตูุชู. ูุฑุฌู ุชูุตูู ู
ููุฑูููู ุฃู ุณู
ุงุนุฉ ุฑุฃุณ ูุงูู
ุญุงููุฉ ู
ุฑุฉ ุฃุฎุฑู.",
"recordingFailed": "ูุดู ูู ุจุฏุก ุงูุชุณุฌูู: {{error}}",
"modelLoadFailed": "ูุดู ูู ุชุญู
ูู ุงููู
ูุฐุฌ: {{model}}",
"modelLoadFailedUnknown": "ูู
ูุฐุฌ ุบูุฑ ู
ุนุฑูู",
"pasteFailedTitle": "ูุดู ูุตู ุงููุต",
"pasteFailed": "ุชุนุฐุฑ ูุตู ุงููุต ูู ุงูุชุทุจูู ุงููุดุท.",
"transcriptionFailedTitle": "ูุดู ุงูุชูุฑูุบ ุงููุตู"
},
"appLanguage": {
"title": "ูุบุฉ ุงูุชุทุจูู",
"description": "ุชุบููุฑ ูุบุฉ ูุงุฌูุฉ Handy"
},
"theme": {
"title": "ุณู
ุฉ ุงูุชุทุจูู",
"description": "ุงุฎุชุฑ ู
ุง ุฅุฐุง ูุงู Handy ูุชุจุน ู
ุธูุฑ ุงููุธุงู
ุฃู ูุจูู ูุงุชุญูุง ุฃู ุฏุงูููุง",
"options": {
"system": "ุงููุธุงู
",
"light": "ูุงุชุญ",
"dark": "ุฏุงูู"
}
},
"overlay": {
"transcribing": "ุฌุงุฑู ุงูุชูุฑูุบ...",
"processing": "ุฌุงุฑู ุงูู
ุนุงูุฌุฉ...",
"loadingModel": "ุฌุงุฑู ุชุญู
ูู ุงููู
ูุฐุฌ..."
},
"whatsNew": {
"title": "ุงูุฌุฏูุฏ ูู Handy v{{version}}"
},
"secureInput": {
"blockedWithCulprit_one": "ูุฏ ูุญุธุฑ {{name}} ุงุฎุชุตุงุฑูุง ูุงุญุฏูุง",
"blockedWithCulprit_other": "ูุฏ ูุญุธุฑ {{name}} {{count}} ุงุฎุชุตุงุฑุงุช",
"blockedNoCulprit_one": "ูุญุธุฑ macOS ู
ุคูุชูุง ุงุฎุชุตุงุฑูุง ูุงุญุฏูุง",
"blockedNoCulprit_other": "ูุญุธุฑ macOS ู
ุคูุชูุง {{count}} ุงุฎุชุตุงุฑุงุช",
"recorderBlockedWithCulprit": "ูุฏ ูู
ูุน {{name}} ุชุบููุฑ ุงูุงุฎุชุตุงุฑุงุช",
"recorderBlockedNoCulprit": "ูู
ูุน macOS ู
ุคูุชูุง ุชุบููุฑ ุงูุงุฎุชุตุงุฑุงุช",
"learnMore": "ููููุฉ ุงูุฅุตูุงุญ",
"recorderBlocked": "ูุง ูู
ูู ุชุณุฌูู ุงูุงุฎุชุตุงุฑุงุช ุงูุขู โ ูุญุฌุจ Secure Input ูู macOS ุฃุญุฏุงุซ ุงูู
ูุงุชูุญ. ุนุงูุฌ ุชุญุฐูุฑ Secure Input ุฃููุงู.",
"dismiss": "ุชุฌุงูู"
}
}
File: src/i18n/locales/bg/translation.json
{
"tray": {
"settings": "ะะฐัััะพะนะบะธ...",
"checkUpdates": "ะัะพะฒะตัะบะฐ ะทะฐ ะฐะบััะฐะปะธะทะฐัะธะธ...",
"copyLastTranscript": "ะะพะฟะธัะฐะฝะต ะฝะฐ ะฟะพัะปะตะดะฝะธั ััะฐะฝัะบัะธะฟั",
"unloadModel": "ะ ะฐะทัะพะฒะฐัะฒะฐะฝะต ะฝะฐ ะผะพะดะตะปะฐ",
"model": "ะะพะดะตะป",
"quit": "ะะทั
ะพะด",
"cancel": "ะัะบะฐะท",
"secureInputWarning": "โ ะััะทะธัะต ะบะปะฐะฒะธัะธ ัะฐ ะฑะปะพะบะธัะฐะฝะธ ะพั Secure Input"
},
"sidebar": {
"general": "ะะฑัะธ",
"models": "ะะพะดะตะปะธ",
"advanced": "ะ ะฐะทัะธัะตะฝะธ",
"postProcessing": "ะะพััะพะฑัะฐะฑะพัะบะฐ",
"history": "ะััะพัะธั",
"debug": "ะััััะฐะฝัะฒะฐะฝะต",
"about": "ะะฐ ะฟัะธะปะพะถะตะฝะธะตัะพ"
},
"onboarding": {
"subtitle": "ะะฐ ะดะฐ ะทะฐะฟะพัะฝะตัะต, ะธะทะฑะตัะตัะต ะผะพะดะตะป ะทะฐ ััะฐะฝัะบัะธะฟัะธั",
"existingModelsTitle": "ะกัะฒะผะตััะธะผะธ ะผะพะดะตะปะธ",
"downloadModelsTitle": "ะะพัััะฟะฝะธ ะทะฐ ะธะทัะตะณะปัะฝะต",
"showAllModels": "ะะพะบะฐะทะฒะฐะฝะต ะฝะฐ ะฒัะธัะบะธ {{total}} ะผะพะดะตะปะฐ",
"showFewerModels": "ะะพะบะฐะทะฒะฐะฝะต ะฝะฐ ะฟะพ-ะผะฐะปะบะพ ะผะพะดะตะปะธ",
"recommended": "ะัะตะฟะพัััะฐะฝ",
"customModelDescription": "ะะต ัะต ะฟะพะดะดััะถะฐ ะพัะธัะธะฐะปะฝะพ",
"migration": {
"title": "ะะพะดะตะปะธัะต ะฒะธ ัะต ะฝัะถะดะฐัั ะพั ะพะฑะฝะพะฒัะฒะฐะฝะต",
"description": "Handy ะฒะตัะต ะธะทะฟะพะปะทะฒะฐ ะฟะพ-ะฝะพะฒ ะฒะธะด ะผะพะดะตะปะธ. ะะทัะตะณะปะตัะต ะฝะพะฒะฐัะฐ ะฒะตััะธั, ะทะฐ ะดะฐ ะฟัะพะดัะปะถะธัะต ะดะฐ ััะฐะฝัะบัะธะฑะธัะฐัะต. ะกัะฐัะธัะต ะฒะตััะธะธ ัะต ะฑัะดะฐั ะฟัะตะผะฐั
ะฝะฐัะธ.",
"replaces": "ะะฐะผะตะฝั {{name}}",
"oldFormat": "ะกัะฐั ัะพัะผะฐั",
"failed": "ะะทัะตะณะปัะฝะตัะพ ะต ะฝะตััะฟะตัะฝะพ",
"retry": "ะะฟะธัะฐะนัะต ะพัะฝะพะฒะพ",
"chooseAnother": "ะะทะฑะตัะตัะต ะดััะณ ะผะพะดะตะป",
"download": "ะะทัะตะณะปัะฝะต ะฝะฐ ะผะพะดะตะปะธ ({{size}})",
"continue": "ะัะพะดัะปะถะธ",
"timeRemaining": "ะััะฐะฒะฐั {{time}}"
},
"modelCard": {
"accuracy": "ัะพัะฝะพัั",
"speed": "ัะบะพัะพัั"
},
"models": {
"small": {
"name": "Whisper Small",
"description": "ะััะท ะธ ะดะพััะฐ ัะพัะตะฝ."
},
"medium": {
"name": "Whisper Medium",
"description": "ะะพะฑัะฐ ัะพัะฝะพัั, ััะตะดะฝะฐ ัะบะพัะพัั."
},
"turbo": {
"name": "Whisper Turbo",
"description": "ะะฐะปะฐะฝั ะผะตะถะดั ัะพัะฝะพัั ะธ ัะบะพัะพัั."
},
"large": {
"name": "Whisper Large",
"description": "ะะพะฑัะฐ ัะพัะฝะพัั, ะฝะพ ะฟะพ-ะฑะฐะฒะตะฝ."
},
"breeze-asr": {
"name": "Breeze ASR",
"description": "ะะฟัะธะผะธะทะธัะฐะฝ ะทะฐ ัะฐะนะฒะฐะฝัะบะธ ะผะฐะฝะดะฐัะธะฝ. ะะพะดะดััะถะบะฐ ะฝะฐ ัะผะตัะฒะฐะฝะต ะฝะฐ ะตะทะธัะธ."
}
},
"errors": {
"selectModel": "ะะตััะฟะตัะฝะพ ะธะทะฑะธัะฐะฝะต ะฝะฐ ะผะพะดะตะป"
},
"permissions": {
"title": "ะะตะพะฑั
ะพะดะธะผะธ ัะฐะทัะตัะตะฝะธั",
"description": "Handy ัะต ะฝัะถะดะฐะต ะพั ะฝัะบะพะปะบะพ ัะฐะทัะตัะตะฝะธั, ะทะฐ ะดะฐ ัะฐะฑะพัะธ ะฟัะฐะฒะธะปะฝะพ.",
"microphone": {
"title": "ะะพัััะฟ ะดะพ ะผะธะบัะพัะพะฝ",
"description": "ะะตะพะฑั
ะพะดะธะผ ะต, ะทะฐ ะดะฐ ััะต ะณะปะฐัะฐ ะฒะธ ะฟัะธ ััะฐะฝัะบัะธะฟัะธั."
},
"accessibility": {
"title": "ะะพัััะฟ ะทะฐ ะดะพัััะฟะฝะพัั",
"description": "ะะตะพะฑั
ะพะดะธะผ ะต, ะทะฐ ะดะฐ ะฒัะฒะตะถะดะฐ ััะฐะฝัะบัะธะฑะธัะฐะฝะธั ัะตะบัั ะฒัะฒ ะฒะฐัะธัะต ะฟัะธะปะพะถะตะฝะธั."
},
"grant": "ะะฐะฒะฐะฝะต ะฝะฐ ัะฐะทัะตัะตะฝะธะต",
"granted": "ะ ะฐะทัะตัะตะฝะพ",
"waiting": "ะะทัะฐะบะฒะฐะฝะต...",
"allGranted": "ะะพัะพะฒะพ!",
"errors": {
"checkFailed": "ะัะพะฒะตัะบะฐัะฐ ะฝะฐ ัะฐะทัะตัะตะฝะธััะฐ ะฝะต ะฑะต ััะฟะตัะฝะฐ. ะะฟะธัะฐะนัะต ะพัะฝะพะฒะพ.",
"requestFailed": "ะะฐัะฒะบะฐัะฐ ะทะฐ ัะฐะทัะตัะตะฝะธะต ะฝะต ะฑะต ััะฟะตัะฝะฐ. ะะฟะธัะฐะนัะต ะพัะฝะพะฒะพ."
}
}
},
"modelSelector": {
"custom": "ะะตััะพะฝะฐะปะธะทะธัะฐะฝ",
"streaming": "ะกััะธะนะผะธะฝะณ",
"active": "ะะบัะธะฒะตะฝ",
"switching": "ะัะตะฒะบะปััะฒะฐะฝะต...",
"noModelsAvailable": "ะัะผะฐ ะฝะฐะปะธัะฝะธ ะผะพะดะตะปะธ",
"verifying": "ะัะพะฒะตัะบะฐ ะฝะฐ {{modelName}}...",
"verifyingGeneric": "ะัะพะฒะตัะบะฐ...",
"downloading": "ะะทัะตะณะปัะฝะต {{percentage}}%",
"downloadingMultiple": "ะะทัะตะณะปัะฝะต ะฝะฐ {{count}} ะผะพะดะตะปะฐ...",
"modelReady": "ะะพะดะตะปัั ะต ะณะพัะพะฒ",
"loading": "ะะฐัะตะถะดะฐะฝะต ะฝะฐ {{modelName}}...",
"loadingGeneric": "ะะฐัะตะถะดะฐะฝะต...",
"modelError": "ะัะตัะบะฐ ะฒ ะผะพะดะตะปะฐ",
"modelUnloaded": "ะะพะดะตะปัั ะต ัะฐะทัะพะฒะฐัะตะฝ",
"noModelDownloadRequired": "ะัะผะฐ ะผะพะดะตะป โ ะฝะตะพะฑั
ะพะดะธะผะพ ะต ะธะทัะตะณะปัะฝะต",
"deleteModel": "ะะทััะธะฒะฐะฝะต ะฝะฐ {{modelName}}",
"downloadSpeed": "{{speed}} MB/s",
"cancel": "ะัะบะฐะท",
"cancelDownload": "ะัะบะฐะท ะฝะฐ ะธะทัะตะณะปัะฝะตัะพ",
"capabilities": {
"languageSelection": "ะะพะดะดััะถะฐ ะฝัะบะพะปะบะพ ะฒั
ะพะดะฝะธ ะตะทะธะบะฐ",
"singleLanguage": "ะะพะดะดััะถะฐ ัะฐะผะพ ัะพะทะธ ะตะทะธะบ",
"languageCount": "{{total}} ะตะทะธะบะฐ",
"languageOnly": "ะกะฐะผะพ {{language}}",
"translation": "ะะพะถะต ะดะฐ ะฟัะตะฒะตะถะดะฐ ะฝะฐ ะฐะฝะณะปะธะนัะบะธ",
"translate": "ะัะตะฒะพะด ะฝะฐ ะฐะฝะณะปะธะนัะบะธ",
"streaming": "ะะพะบะฐะทะฒะฐ ััะฐะฝัะบัะธะฟัะธั ะฝะฐ ะถะธะฒะพ, ะดะพะบะฐัะพ ะณะพะฒะพัะธัะต"
},
"legacy": "ะะฐัะปะตะดะตะฝ"
},
"settings": {
"modelSettings": {
"title": "ะะฐัััะพะนะบะธ ะฝะฐ {{model}}"
},
"general": {
"title": "ะะฑัะธ",
"shortcut": {
"title": "ะััะทะธ ะบะปะฐะฒะธัะธ ะฝะฐ Handy",
"description": "ะะฐัััะพะนัะต ะบะปะฐะฒะธัะฝะธ ะบะพะผะฑะธะฝะฐัะธะธ ะทะฐ ััะฐััะธัะฐะฝะต ะฝะฐ ะทะฐะฟะธั ะทะฐ ัะตั ะบัะผ ัะตะบัั",
"loading": "ะะฐัะตะถะดะฐะฝะต ะฝะฐ ะฑััะทะธัะต ะบะปะฐะฒะธัะธ...",
"none": "ะัะผะฐ ะฝะฐัััะพะตะฝะธ ะฑััะทะธ ะบะปะฐะฒะธัะธ",
"notFound": "ะััะทะธัั ะบะปะฐะฒะธั ะฝะต ะต ะฝะฐะผะตัะตะฝ",
"pressKeys": "ะะฐัะธัะฝะตัะต ะบะปะฐะฒะธัะธัะต...",
"bindings": {
"transcribe": {
"name": "ะััะท ะบะปะฐะฒะธั ะทะฐ ััะฐะฝัะบัะธะฟัะธั",
"description": "ะะปะฐะฒะธัะฝะฐัะฐ ะบะพะผะฑะธะฝะฐัะธั ะทะฐ ะทะฐะฟะธั ะธ ััะฐะฝัะบัะธะฑะธัะฐะฝะต ะฝะฐ ะณะปะฐัะฐ ะฒะธ."
},
"cancel": {
"name": "ะััะท ะบะปะฐะฒะธั ะทะฐ ะพัะบะฐะท",
"description": "ะะปะฐะฒะธัะฝะฐัะฐ ะบะพะผะฑะธะฝะฐัะธั ะทะฐ ะพัะผัะฝะฐ ะฝะฐ ัะตะบััะธั ะทะฐะฟะธั."
},
"transcribe_with_post_process": {
"name": "ะััะท ะบะปะฐะฒะธั ะทะฐ ะฟะพััะพะฑัะฐะฑะพัะบะฐ",
"description": "ะะพ ะธะทะฑะพั: ะพัะดะตะปะฝะฐ ะบะพะผะฑะธะฝะฐัะธั, ะบะพััะพ ะฒะธะฝะฐะณะธ ะฟัะธะปะฐะณะฐ ะะ ะฟะพััะพะฑัะฐะฑะพัะบะฐ ะฒััั
ั ััะฐะฝัะบัะธะฟัะธััะฐ."
}
},
"errors": {
"restore": "ะะตััะฟะตัะฝะพ ะฒัะทััะฐะฝะพะฒัะฒะฐะฝะต ะฝะฐ ะพัะธะณะธะฝะฐะปะฝะธั ะฑััะท ะบะปะฐะฒะธั",
"set": "ะะตััะฟะตัะฝะพ ะทะฐะดะฐะฒะฐะฝะต ะฝะฐ ะฑััะทะธั ะบะปะฐะฒะธั: {{error}}",
"reset": "ะะตััะฟะตัะฝะพ ะฝัะปะธัะฐะฝะต ะฝะฐ ะฑััะทะธั ะบะปะฐะฒะธั ะบัะผ ะฟััะฒะพะฝะฐัะฐะปะฝะฐัะฐ ััะพะนะฝะพัั"
}
},
"language": {
"title": "ะะทะธะบ",
"description": "ะะทะฑะตัะตัะต ะตะทะธะบะฐ ะทะฐ ัะฐะทะฟะพะทะฝะฐะฒะฐะฝะต ะฝะฐ ัะตั. โะะฒัะพะผะฐัะธัะฝะพโ ะพะฟัะตะดะตะปั ะตะทะธะบะฐ ัะฐะผ, ะฐ ะธะทะฑะพััั ะฝะฐ ะบะพะฝะบัะตัะตะฝ ะตะทะธะบ ะผะพะถะต ะดะฐ ะฟะพะดะพะฑัะธ ัะพัะฝะพัััะฐ ะทะฐ ะฝะตะณะพ.",
"searchPlaceholder": "ะขัััะตะฝะต ะฝะฐ ะตะทะธัะธ...",
"noResults": "ะัะผะฐ ะฝะฐะผะตัะตะฝะธ ะตะทะธัะธ",
"auto": "ะะฒัะพะผะฐัะธัะฝะพ"
},
"shortcutActivation": {
"title": "ะะพะฒะตะดะตะฝะธะต ะฝะฐ ะบะปะฐะฒะธัะฝะฐัะฐ ะบะพะผะฑะธะฝะฐัะธั",
"description": "ะะทะฑะตัะตัะต ะบะฐะบ ะฑััะทะธัั ะบะปะฐะฒะธั ะทะฐ ััะฐะฝัะบัะธะฟัะธั ััะฐััะธัะฐ ะธ ัะฟะธัะฐ ะทะฐะฟะธัะฐ.",
"options": {
"holdOrToggle": "ะะฒัะพะผะฐัะธัะฝะพ",
"pushToTalk": "ะะฐะดััะถะฐะฝะต",
"toggle": "ะัะตะฒะบะปััะฒะฐะฝะต"
},
"descriptions": {
"hold_or_toggle": "ะะฐะดััะถัะต ะทะฐ ะทะฐะฟะธั ะธะปะธ ะฝะฐัะธัะฝะตัะต ะบัะฐัะบะพ ะทะฐ ะฟัะตะฒะบะปััะฒะฐะฝะต",
"push_to_talk": "ะะฐะฟะธัะฒะฐ, ะดะพะบะฐัะพ ะดััะถะธัะต ะบะพะผะฑะธะฝะฐัะธััะฐ ะฝะฐัะธัะฝะฐัะฐ",
"toggle": "ะะฐัะธัะฝะตัะต ะบัะฐัะบะพ ะบะพะผะฑะธะฝะฐัะธััะฐ, ะทะฐ ะดะฐ ะทะฐะฟะพัะฝะต ะทะฐะฟะธััั, ะธ ะพัะฝะพะฒะพ, ะทะฐ ะดะฐ ัะฟัะต"
}
}
},
"models": {
"title": "ะะพะดะตะปะธ ะทะฐ ััะฐะฝัะบัะธะฟัะธั",
"description": "ะะทะฑะตัะตัะต ะผะพะดะตะป ะทะฐ ััะฐะฝัะบัะธะฟัะธั ะธะปะธ ะธะทัะตะณะปะตัะต ะดะพะฟัะปะฝะธัะตะปะฝะธ. ะ ะฐะทะปะธัะฝะธัะต ะผะพะดะตะปะธ ะฟัะตะดะปะฐะณะฐั ัะฐะทะปะธัะฝะฐ ัะพัะฝะพัั ะธ ัะบะพัะพัั.",
"yourModels": "ะะทัะตะณะปะตะฝะธ ะผะพะดะตะปะธ",
"availableModels": "ะะฐะปะธัะฝะธ ะทะฐ ะธะทัะตะณะปัะฝะต",
"deleteConfirm": "ะกะธะณััะฝะธ ะปะธ ััะต, ัะต ะธัะบะฐัะต ะดะฐ ะธะทััะธะตัะต {{modelName}}? ะฉะต ัััะฑะฒะฐ ะดะฐ ะณะพ ะธะทัะตะณะปะธัะต ะพัะฝะพะฒะพ, ะทะฐ ะดะฐ ะณะพ ะธะทะฟะพะปะทะฒะฐัะต.",
"deleteActiveConfirm": "{{modelName}} ะต ะฒะฐัะธัั ะฐะบัะธะฒะตะฝ ะผะพะดะตะป. ะะทััะธะฒะฐะฝะตัะพ ะผั ัะต ัะฟัะต ััะฐะฝัะบัะธะฟัะธะธัะต, ะดะพะบะฐัะพ ะฝะต ะธะทะฑะตัะตัะต ะฝะพะฒ ะผะพะดะตะป. ะกะธะณััะฝะธ ะปะธ ััะต?",
"deleteTitle": "ะะทััะธะฒะฐะฝะต ะฝะฐ ะผะพะดะตะป",
"retiredNotice": {
"title": "ะกัะฐัะธัะต ะผะพะดะตะปะธ ะฒะตัะต ะฝะต ัะฐะฑะพััั ั Handy",
"description": "ะะฐะตะผะฐั {{size}} ะฝะฐ ะบะพะผะฟััััะฐ ะฒะธ.",
"delete": "ะะทััะธะน ะผะพะดะตะปะธัะต",
"deleted": "ะกัะฐัะธัะต ะผะพะดะตะปะธ ัะฐ ะธะทััะธัะธ",
"deleteFailed": "ะัะบะพะธ ััะฐัะธ ะผะพะดะตะปะธ ะฝะต ะผะพะถะฐั
ะฐ ะดะฐ ะฑัะดะฐั ะธะทััะธัะธ. ะัะพะฒะตัะตัะต ะถััะฝะฐะปะฐ ะทะฐ ะฟะพะดัะพะฑะฝะพััะธ."
},
"filters": {
"allLanguages": "ะัะธัะบะธ ะตะทะธัะธ",
"streaming": "ะคะธะปััะธัะฐะฝะต ะฝะฐ ะผะพะดะตะปะธัะต, ะบะพะธัะพ ะฟะพะดะดััะถะฐั ััะฐะฝัะบัะธะฟัะธั ะฝะฐ ะถะธะฒะพ",
"translation": "ะคะธะปััะธัะฐะฝะต ะฝะฐ ะผะพะดะตะปะธัะต, ะบะพะธัะพ ะฟะพะดะดััะถะฐั ะฟัะตะฒะพะด ะฝะฐ ะฐะฝะณะปะธะนัะบะธ"
},
"noModelsMatch": "ะัะผะฐ ะผะพะดะตะปะธ, ะพัะณะพะฒะฐัััะธ ะฝะฐ ัะพะทะธ ัะธะปััั.",
"searchPlaceholder": "ะขัััะตะฝะต ะฝะฐ ะผะพะดะตะปะธ ะฟะพ ะธะผะตโฆ",
"rescan": {
"label": "ะกะบะฐะฝะธัะฐะฝะต ะพัะฝะพะฒะพ",
"tooltip": "ะกะบะฐะฝะธัะฐะฝะต ะพัะฝะพะฒะพ ะทะฐ ะผะพะดะตะปะธ, ะดะพะฑะฐะฒะตะฝะธ ะฒ ะฟะฐะฟะบะฐัะฐ ั ะผะพะดะตะปะธ ะธะปะธ ะบะตัะฐ ะฝะฐ Hugging Face ะธะทะฒัะฝ Handy"
}
},
"sound": {
"title": "ะะฒัะบ",
"microphone": {
"title": "ะะธะบัะพัะพะฝ",
"description": "ะะทะฑะตัะตัะต ะฟัะตะดะฟะพัะธัะฐะฝะพ ะผะธะบัะพัะพะฝะฝะพ ััััะพะนััะฒะพ",
"placeholder": "ะะทะฑะตัะตัะต ะผะธะบัะพัะพะฝ...",
"loading": "ะะฐัะตะถะดะฐะฝะต..."
},
"channel": {
"title": "ะั
ะพะดะตะฝ ะบะฐะฝะฐะป",
"description": "ะะทะฑะตัะตัะต ะฒั
ะพะดะฝะธั ะบะฐะฝะฐะป, ะพั ะบะพะนัะพ ะดะฐ ะทะฐะฟะธัะฒะฐัะต. ะะทะฟะพะปะทะฒะฐะนัะต ัะฐะทะธ ะพะฟัะธั, ะฐะบะพ ะฐัะดะธะพ ะธะฝัะตััะตะนััั ะฒะธ ะธะผะฐ ะฝัะบะพะปะบะพ ะฒั
ะพะดะฐ.",
"average": "ะััะตะดะฝัะฒะฐะฝะต ะฝะฐ ะฒัะธัะบะธ ะบะฐะฝะฐะปะธ",
"channel": "ะะฐะฝะฐะป {{n}}"
},
"audioFeedback": {
"label": "ะะฒัะบะพะฒะฐ ะพะฑัะฐัะฝะฐ ะฒััะทะบะฐ",
"description": "ะัะทะฟัะพะธะทะฒะตะถะดะฐะฝะต ะฝะฐ ะทะฒัะบ ะฟัะธ ััะฐัั ะธ ะบัะฐะน ะฝะฐ ะทะฐะฟะธัะฐ"
},
"outputDevice": {
"title": "ะะทั
ะพะดะฝะพ ััััะพะนััะฒะพ",
"description": "ะะทะฑะตัะตัะต ะฟัะตะดะฟะพัะธัะฐะฝะพ ะธะทั
ะพะดะฝะพ ะฐัะดะธะพ ััััะพะนััะฒะพ ะทะฐ ะทะฒััะธ ะทะฐ ะพะฑัะฐัะฝะฐ ะฒััะทะบะฐ",
"placeholder": "ะะทะฑะตัะตัะต ะธะทั
ะพะดะฝะพ ััััะพะนััะฒะพ...",
"loading": "ะะฐัะตะถะดะฐะฝะต..."
},
"volume": {
"title": "ะกะธะปะฐ ะฝะฐ ะทะฒัะบะฐ",
"description": "ะ ะตะณัะปะธัะฐะนัะต ัะธะปะฐัะฐ ะฝะฐ ะทะฒััะธัะต ะทะฐ ะพะฑัะฐัะฝะฐ ะฒััะทะบะฐ"
}
},
"advanced": {
"groups": {
"app": "ะัะธะปะพะถะตะฝะธะต",
"output": "ะะทั
ะพะด",
"transcription": "ะขัะฐะฝัะบัะธะฟัะธั",
"history": "ะััะพัะธั",
"experimental": "ะะบัะฟะตัะธะผะตะฝัะฐะปะฝะธ"
},
"experimentalToggle": {
"label": "ะะบัะฟะตัะธะผะตะฝัะฐะปะฝะธ ััะฝะบัะธะธ",
"description": "ะะบะปััะฒะฐะฝะต ะฝะฐ ะตะบัะฟะตัะธะผะตะฝัะฐะปะฝะธ ััะฝะบัะธะธ, ะบะพะธัะพ ัะฐ ะพัะต ะฒ ัะฐะทัะฐะฑะพัะบะฐ."
},
"lazyStreamClose": {
"label": "ะััะถะฐะฝะต ะฝะฐ ะผะธะบัะพัะพะฝะฐ ะพัะฒะพัะตะฝ ะผะตะถะดั ััะฐะฝัะบัะธะฟัะธะธ",
"description": "ะััะถะธ ะฟะพัะพะบัั ะพั ะผะธะบัะพัะพะฝะฐ ะพัะฒะพัะตะฝ 30 ัะตะบัะฝะดะธ ัะปะตะด ัะฟะธัะฐะฝะต ะฝะฐ ะทะฐะฟะธัะฐ, ะบะพะตัะพ ะฝะฐะผะฐะปัะฒะฐ ะทะฐะฑะฐะฒัะฝะตัะพ ะฟัะธ ะฟะพัะตะดะฝะธ ััะฐะฝัะบัะธะฟัะธะธ. ะะพะถะต ะดะฐ ะฒะปะพัะธ ะบะฐัะตััะฒะพัะพ ะฝะฐ Bluetooth ะฐัะดะธะพ, ะดะพะบะฐัะพ ะต ะฐะบัะธะฒะฝะพ."
},
"acceleration": {
"transcribe": {
"title": "ะฅะฐัะดัะตัะฝะพ ััะบะพัะตะฝะธะต",
"description": "ะะทะฑะตัะตัะต ั
ะฐัะดัะตัะฐ, ะธะทะฟะพะปะทะฒะฐะฝ ะทะฐ ััะฐะฝัะบัะธะฟัะธั. โะะฒัะพะผะฐัะธัะฝะพโ ะธะทะฟะพะปะทะฒะฐ GPU ะฟัะธ ะฝะฐะปะธัะฝะพัั, ะฐ ะฒ ะฟัะพัะธะฒะตะฝ ัะปััะฐะน ะฟัะตะผะธะฝะฐะฒะฐ ะบัะผ CPU."
},
"gpuDevice": {
"auto": "ะะฒัะพะผะฐัะธัะฝะพ"
}
},
"startHidden": {
"label": "ะกัะฐััะธัะฐะฝะต ัะบัะธัะพ",
"description": "ะกัะฐััะธัะฐะฝะต ะฒ ัะธััะตะผะฝะฐัะฐ ะพะฑะปะฐัั ะฑะตะท ะพัะฒะฐััะฝะต ะฝะฐ ะฟัะพะทะพัะตัะฐ."
},
"autostart": {
"label": "ะกัะฐััะธัะฐะฝะต ััั ัะธััะตะผะฐัะฐ",
"description": "ะะฒัะพะผะฐัะธัะฝะพ ััะฐััะธัะฐะฝะต ะฝะฐ Handy ะฟัะธ ะฒะปะธะทะฐะฝะต ะฒ ะฟัะพัะธะปะฐ ะฒะธ."
},
"showTrayIcon": {
"label": "ะะบะพะฝะฐ ะฒ ัะธััะตะผะฝะฐัะฐ ะพะฑะปะฐัั",
"description": "ะะพะบะฐะทะฒะฐะฝะต ะฝะฐ ะธะบะพะฝะฐัะฐ ะฝะฐ Handy ะฒ ัะธััะตะผะฝะฐัะฐ ะพะฑะปะฐัั."
},
"overlay": {
"style": {
"title": "ะะฐัะปะฐะณะฒะฐะฝะต",
"description": "ะะทะฑะตัะตัะต ะฝะฐัะปะฐะณะฒะฐะฝะตัะพ ะฟัะธ ะทะฐะฟะธั: ยซะัะผะฐยป ะณะพ ัะบัะธะฒะฐ, ยซะะธะฝะธะผะฐะปะฝะพยป ะฟะพะบะฐะทะฒะฐ ะบะพะผะฟะฐะบัะตะฝ ะธะฝะดะธะบะฐัะพั, ยซะะฐ ะถะธะฒะพยป ะฟะพะบะฐะทะฒะฐ ััะฐะฝัะบัะธะฟัะธััะฐ ะฒ ัะตะฐะปะฝะพ ะฒัะตะผะต, ะดะพะบะฐัะพ ะณะพะฒะพัะธัะต (ัะฐะผะพ ะผะพะดะตะปะธ ั ะฟะพะดะดััะถะบะฐ ะฝะฐ ัััะธะนะผะธะฝะณ โ ะฟะพััััะตัะต ะตัะธะบะตัะฐ ยซะกััะธะนะผะธะฝะณยป ะฒ ะธะทะฑะพัะฐ ะฝะฐ ะผะพะดะตะป). ะะฐ Linux ัะต ะฟัะตะฟะพัััะฒะฐ ยซะัะผะฐยป.",
"options": {
"none": "ะัะผะฐ",
"minimal": "ะะธะฝะธะผะฐะปะฝะพ",
"live": "ะะฐ ะถะธะฒะพ"
}
},
"position": {
"title": "ะะพะทะธัะธั ะฝะฐ ะฝะฐัะปะฐะณะฒะฐะฝะตัะพ",
"description": "ะะพะบะฐะทะฒะฐะฝะต ะฝะฐ ะฒะธะทัะฐะปะฝะฐ ะพะฑัะฐัะฝะฐ ะฒััะทะบะฐ ะฟัะธ ะทะฐะฟะธั ะธ ััะฐะฝัะบัะธะฟัะธั. ะะฐ Linux ัะต ะฟัะตะฟะพัััะฒะฐ โะัะผะฐโ.",
"options": {
"bottom": "ะะพะปั",
"top": "ะะพัะต"
}
}
},
"pasteMethod": {
"title": "ะะฐัะธะฝ ะฝะฐ ะฟะพััะฐะฒัะฝะต",
"description": "ะะทะฑะตัะตัะต ะบะฐะบ ัะต ะฒะผัะบะฒะฐ ัะตะบัััั. ะะธัะตะบัะฝะพ: ัะธะผัะปะธัะฐ ะฟะธัะฐะฝะต ััะตะท ัะธััะตะผะฝะธั ะฒั
ะพะด. ะัะผะฐ: ะฟัะพะฟััะบะฐ ะฟะพััะฐะฒัะฝะตัะพ, ะฐะบััะฐะปะธะทะธัะฐ ัะฐะผะพ ะธััะพัะธััะฐ/ะบะปะธะฟะฑะพัะดะฐ.",
"options": {
"clipboard": "ะะปะธะฟะฑะพัะด ({{modifier}}+V)",
"clipboardCtrlShiftV": "ะะปะธะฟะฑะพัะด (Ctrl+Shift+V)",
"clipboardShiftInsert": "ะะปะธะฟะฑะพัะด (Shift+Insert)",
"direct": "ะะธัะตะบัะฝะพ",
"none": "ะัะผะฐ",
"externalScript": "ะัะฝัะตะฝ ัะบัะธะฟั"
},
"externalScriptPlaceholder": "/ะฟัั/ะบัะผ/ะฒะฐัะธั/script.sh"
},
"typingTool": {
"title": "ะะฝััััะผะตะฝั ะทะฐ ะฟะธัะฐะฝะต",
"description": "ะะทะฑะตัะตัะต ะบะพะน Linux ะธะฝััััะผะตะฝั ะทะฐ ะฟะธัะฐะฝะต ะดะฐ ัะต ะธะทะฟะพะปะทะฒะฐ ะฟัะธ ะดะธัะตะบัะฝะพ ะฟะพััะฐะฒัะฝะต. โะะฒัะพะผะฐัะธัะฝะพโ ะพัะบัะธะฒะฐ ะธ ะธะทะฟะพะปะทะฒะฐ ะฝะฐะน-ะฟะพะดั
ะพะดััะธั ะทะฐ ะฒะฐัะฐัะฐ ัะธััะตะผะฐ.",
"options": {
"auto": "ะะฒัะพะผะฐัะธัะฝะพ (ะฟัะตะฟะพัััะธัะตะปะฝะพ)"
}
},
"clipboardHandling": {
"title": "ะ ะฐะฑะพัะฐ ั ะบะปะธะฟะฑะพัะดะฐ",
"description": "โะะตะท ะฟัะพะผัะฝะฐ ะฝะฐ ะบะปะธะฟะฑะพัะดะฐโ ะทะฐะฟะฐะทะฒะฐ ััะดััะถะฐะฝะธะตัะพ ะฝะฐ ะบะปะธะฟะฑะพัะดะฐ ัะปะตะด ััะฐะฝัะบัะธะฟัะธั. โะะพะฟะธัะฐะฝะต ะฒ ะบะปะธะฟะฑะพัะดะฐโ ะพััะฐะฒั ัะตะทัะปัะฐัะฐ ะฒ ะบะปะธะฟะฑะพัะดะฐ ัะปะตะด ะฟะพััะฐะฒัะฝะต.",
"options": {
"dontModify": "ะะตะท ะฟัะพะผัะฝะฐ ะฝะฐ ะบะปะธะฟะฑะพัะดะฐ",
"copyToClipboard": "ะะพะฟะธัะฐะฝะต ะฒ ะบะปะธะฟะฑะพัะดะฐ"
}
},
"autoSubmit": {
"title": "ะะฒัะพะผะฐัะธัะฝะพ ะธะทะฟัะฐัะฐะฝะต",
"description": "ะะฒัะพะผะฐัะธัะฝะพ ะธะทะฟัะฐัะฐะฝะต ะฝะฐ ะธะทะฑัะฐะฝะฐัะฐ ะบะปะฐะฒะธัะฝะฐ ะบะพะผะฑะธะฝะฐัะธั ัะปะตะด ะฒะผัะบะฒะฐะฝะต ะฝะฐ ัะตะบััะฐ. Cmd+Enter ะฒะฐะถะธ ะทะฐ macOS, ะฐ Windows/Linux ะธะทะฟะพะปะทะฒะฐั Super+Enter.",
"options": {
"off": "ะะทะบะป.",
"enter": "Enter",
"cmdEnter": "Cmd+Enter",
"superEnter": "Super+Enter",
"ctrlEnter": "Ctrl+Enter"
}
},
"translateToEnglish": {
"label": "ะัะตะฒะพะด ะฝะฐ ะฐะฝะณะปะธะนัะบะธ",
"description": "ะะฒัะพะผะฐัะธัะตะฝ ะฟัะตะฒะพะด ะฝะฐ ัะตั ะพั ะดััะณะธ ะตะทะธัะธ ะฝะฐ ะฐะฝะณะปะธะนัะบะธ ะฟะพ ะฒัะตะผะต ะฝะฐ ััะฐะฝัะบัะธะฟัะธั."
},
"modelUnload": {
"title": "ะ ะฐะทัะพะฒะฐัะฒะฐะฝะต ะฝะฐ ะผะพะดะตะปะฐ",
"description": "ะะฒัะพะผะฐัะธัะฝะพ ะพัะฒะพะฑะพะถะดะฐะฒะฐะฝะต ะฝะฐ ะฟะฐะผะตั ะฝะฐ GPU/CPU, ะฐะบะพ ะผะพะดะตะปัั ะฝะต ะต ะธะทะฟะพะปะทะฒะฐะฝ ะทะฐ ะทะฐะดะฐะดะตะฝะพัะพ ะฒัะตะผะต",
"options": {
"never": "ะะธะบะพะณะฐ",
"immediately": "ะะตะดะฝะฐะณะฐ",
"min2": "ะกะปะตะด 2 ะผะธะฝััะธ",
"min5": "ะกะปะตะด 5 ะผะธะฝััะธ",
"min10": "ะกะปะตะด 10 ะผะธะฝััะธ",
"min15": "ะกะปะตะด 15 ะผะธะฝััะธ",
"hour1": "ะกะปะตะด 1 ัะฐั",
"sec15": "ะกะปะตะด 15 ัะตะบัะฝะดะธ (ะพััััะฐะฝัะฒะฐะฝะต)"
}
},
"customWords": {
"title": "ะะตััะพะฝะฐะปะธะทะธัะฐะฝะธ ะดัะผะธ",
"description": "ะะพะผะพะณะฝะตัะต ะฝะฐ ะฟะพะดะดััะถะฐะฝะธัะต ะผะพะดะตะปะธ ะดะฐ ัะฐะทะฟะพะทะฝะฐะฒะฐั ะธะผะตะฝะฐ ะธ ัะฟะตัะธะฐะปะธะทะธัะฐะฝะธ ัะตัะผะธะฝะธ. ะัะธะฑะปะธะทะธัะตะปะฝะฐัะฐ ะบะพัะตะบัะธั ะฒ ะผะพะผะตะฝัะฐ ะต ะพะณัะฐะฝะธัะตะฝะฐ ะดะพ ะดัะผะธ ั ะฑัะบะฒะธ AโZ ะธ ัะธััะธ.",
"placeholder": "ะะพะฑะฐะฒะตัะต ะดัะผะฐ",
"add": "ะะพะฑะฐะฒัะฝะต",
"remove": "ะัะตะผะฐั
ะฒะฐะฝะต ะฝะฐ {{word}}",
"duplicate": "โ{{word}}โ ะฒะตัะต ัััะตััะฒัะฒะฐ"
},
"voiceActivityDetection": {
"title": "ะัะบัะธะฒะฐะฝะต ะฝะฐ ะณะปะฐัะพะฒะฐ ะฐะบัะธะฒะฝะพัั",
"description": "ะคะธะปััะธัะฐ ัะธัะธะฝะฐัะฐ ะพั ะทะฐะฟะธัะธัะต. ะะพะดะตะปะธัะต ั ะฟะพะดะดััะถะบะฐ ะฝะฐ ัััะธะนะผะธะฝะณ ะธะทะฟะพะปะทะฒะฐั ะฟะพ-ะดัะปะณะฐ ะพะฟะฐัะบะฐ ะฝะฐ VAD; ะธะทะบะปััะฒะฐะฝะตัะพ ะฝะฐ VAD ะทะฐะฟะธัะฒะฐ ะฝะตะพะฑัะฐะฑะพัะตะฝ ะทะฒัะบ."
},
"longFormChunking": {
"title": "ะ ะฐะทะดะตะปัะฝะต ะฝะฐ ะดัะปะณะพ ะฐัะดะธะพ",
"description": "ะ ะฐะทะดะตะปั ะดัะปะณะธัะต ะทะฐะฟะธัะธ ะฝะฐ ะฟะฐัะทะธัะต ะฟัะตะดะธ ััะฐะฝัะบัะธะฑะธัะฐะฝะต, ะบะพะตัะพ ะพะฑะธะบะฝะพะฒะตะฝะพ ะฟะพะดะพะฑััะฒะฐ ะบะฐัะตััะฒะพัะพ ะฝะฐ ััะฐะฝัะบัะธะฟัะธััะฐ."
},
"vadBackend": {
"title": "ะะตะบะตะฝะด ะทะฐ ะพัะบัะธะฒะฐะฝะต ะฝะฐ ะณะปะฐั",
"description": "ะะทะฑะตัะตัะต ะดะตัะตะบัะพัะฐ, ะธะทะฟะพะปะทะฒะฐะฝ ะทะฐ ัะธะปััะธัะฐะฝะต ะฝะฐ ัะธัะธะฝะฐัะฐ. Earshot ะต ะตะบัะฟะตัะธะผะตะฝัะฐะปะตะฝ; ะฒััะฝะตัะต ัะต ะบัะผ Silero, ะฐะบะพ ัะตััะฐ ัะต ะพัััะทะฒะฐ ะธะปะธ ััะผัั ัะต ะทะฐะฟะฐะทะฒะฐ.",
"options": {
"silero": "Silero",
"earshot": "Earshot"
}
},
"fillerWordRemoval": {
"title": "ะัะตะผะฐั
ะฒะฐะฝะต ะฝะฐ ะดัะผะธ ะฟะฐัะฐะทะธัะธ",
"description": "ะัะตะผะฐั
ะฒะฐ ัะตััะพ ััะตัะฐะฝะธัะต ะดัะผะธ ะทะฐ ะบะพะปะตะฑะฐะฝะธะต ะพั ััะฐะฝัะบัะธะฟัะธะธัะต. ะะทะบะปััะตัะต, ะทะฐ ะดะฐ ะณะธ ะทะฐะฟะฐะทะธัะต."
},
"chineseScript": {
"title": "ะะธัะฐะนัะบะฐ ะฟะธัะผะตะฝะพัั",
"description": "ะะฐะฟะธัะฒะฐ ััะฐะฝัะบัะธะฟัะธะธัะต ะฝะฐ ะผะฐะฝะดะฐัะธะฝ ะธ ะบะฐะฝัะพะฝัะบะธ ั ะพะฟัะพััะตะฝะธ ะธะปะธ ััะฐะดะธัะธะพะฝะฝะธ ะนะตัะพะณะปะธัะธ. ะััะณะธัะต ะตะทะธัะธ ะพััะฐะฒะฐั ะฝะตะฟัะพะผะตะฝะตะฝะธ.",
"options": {
"asTranscribed": "ะะฐะบัะพ ะต ััะฐะฝัะบัะธะฑะธัะฐะฝะพ",
"simplified": "ะะฟัะพััะตะฝะธ",
"traditional": "ะขัะฐะดะธัะธะพะฝะฝะธ"
}
}
},
"postProcessing": {
"hotkey": {
"title": "ะััะท ะบะปะฐะฒะธั"
},
"api": {
"title": "API",
"provider": {
"title": "ะะพััะฐะฒัะธะบ",
"description": "ะะทะฑะตัะตัะต ะดะพััะฐะฒัะธะบ, ััะฒะผะตััะธะผ ั OpenAI ะธะปะธ Anthropic."
},
"apiFormat": {
"title": "ะคะพัะผะฐั ะฝะฐ API",
"description": "ะคะพัะผะฐั ะฝะฐ ะทะฐัะฒะบะฐัะฐ, ะพัะฐะบะฒะฐะฝ ะพั ะฒะฐัะธั ะฟะตััะพะฝะฐะปะธะทะธัะฐะฝ ะบัะฐะตะฝ ะฐะดัะตั.",
"options": {
"openai": "ะกัะฒะผะตััะธะผ ั OpenAI (Chat Completions)",
"anthropic": "Anthropic Messages"
}
},
"appleIntelligence": {
"unavailable": "Apple Intelligence ะฝะต ะต ะฝะฐะปะธัะฝะฐ ะฝะฐ ัะพะฒะฐ ััััะพะนััะฒะพ. ะะตะพะฑั
ะพะดะธะผ ะต Mac ั Apple Silicon ะธ macOS Tahoe (26.0) ะธะปะธ ะฟะพ-ะฝะพะฒะฐ ั ะฒะบะปััะตะฝะฐ Apple Intelligence ะฒ ะกะธััะตะผะฝะธัะต ะฝะฐัััะพะนะบะธ."
},
"baseUrl": {
"title": "ะะฐะทะพะฒ URL",
"description": "ะะฐะทะพะฒ API URL ะทะฐ ะธะทะฑัะฐะฝะธั ะดะพััะฐะฒัะธะบ. ะ ะตะดะฐะบัะธััะตะผ ะต ัะฐะผะพ ะฟัะธ ะฟะตััะพะฝะฐะปะธะทะธัะฐะฝ ะดะพััะฐะฒัะธะบ.",
"placeholder": "https://api.openai.com/v1",
"placeholderAnthropic": "https://api.anthropic.com/v1"
},
"apiKey": {
"title": "API ะบะปัั",
"description": "API ะบะปัั ะทะฐ ะธะทะฑัะฐะฝะธั ะดะพััะฐะฒัะธะบ.",
"placeholder": "sk-..."
},
"model": {
"title": "ะะพะดะตะป",
"descriptionCustom": "ะัะฒะตะดะตัะต ะธะดะตะฝัะธัะธะบะฐัะพัะฐ ะฝะฐ ะผะพะดะตะปะฐ, ะพัะฐะบะฒะฐะฝ ะพั ะฒะฐัะธั ะฟะตััะพะฝะฐะปะธะทะธัะฐะฝ ะบัะฐะตะฝ ะฐะดัะตั.",
"descriptionDefault": "ะะทะฑะตัะตัะต ะผะพะดะตะป, ะฟัะตะดะปะฐะณะฐะฝ ะพั ะธะทะฑัะฐะฝะธั ะดะพััะฐะฒัะธะบ.",
"placeholderWithOptions": "ะขัััะตะฝะต ะธะปะธ ะธะทะฑะพั ะฝะฐ ะผะพะดะตะป",
"placeholderNoOptions": "ะัะฒะตะดะตัะต ะธะผะต ะฝะฐ ะผะพะดะตะป",
"refreshModels": "ะะฟัะตัะฝัะฒะฐะฝะต ะฝะฐ ะผะพะดะตะปะธัะต"
}
},
"prompts": {
"title": "ะะพะดะบะฐะฝะฐ",
"selectedPrompt": {
"title": "ะะทะฑัะฐะฝะฐ ะฟะพะดะบะฐะฝะฐ",
"description": "ะะทะฑะตัะตัะต ัะฐะฑะปะพะฝ ะทะฐ ะฟะพะดะพะฑััะฒะฐะฝะต ะฝะฐ ััะฐะฝัะบัะธะฟัะธะธ ะธะปะธ ััะทะดะฐะนัะต ะฝะพะฒ. ะะทะฟะพะปะทะฒะฐะนัะต ${output} ะฒ ัะตะบััะฐ ะฝะฐ ะฟะพะดะบะฐะฝะฐัะฐ, ะทะฐ ะดะฐ ะฟัะตะฟัะฐัะธัะต ะบัะผ ัะปะพะฒะตะฝะธั ััะฐะฝัะบัะธะฟั."
},
"noPrompts": "ะัะผะฐ ะฝะฐะปะธัะฝะธ ะฟะพะดะบะฐะฝะธ",
"selectPrompt": "ะะทะฑะตัะตัะต ะฟะพะดะบะฐะฝะฐ",
"createNew": "ะะพะฒะฐ ะฟะพะดะบะฐะฝะฐ",
"promptLabel": "ะัะธะบะตั ะฝะฐ ะฟะพะดะบะฐะฝะฐัะฐ",
"promptLabelPlaceholder": "ะัะฒะตะดะตัะต ะธะผะต ะฝะฐ ะฟะพะดะบะฐะฝะฐัะฐ",
"promptInstructions": "ะะฝััััะบัะธะธ ะทะฐ ะฟะพะดะบะฐะฝะฐัะฐ",
"promptInstructionsPlaceholder": "ะะฐะฟะธัะตัะต ะธะฝััััะบัะธะธัะต ะทะฐ ะธะทะฟัะปะฝะตะฝะธะต ัะปะตะด ััะฐะฝัะบัะธะฟัะธั. ะัะธะผะตั: ะะพะดะพะฑัะตัะต ะณัะฐะผะฐัะธะบะฐัะฐ ะธ ััะฝะพัะฐัะฐ ะฝะฐ ัะปะตะดะฝะธั ัะตะบัั: ${output}",
"promptTip": "ะกัะฒะตั: ะะทะฟะพะปะทะฒะฐะนัะต ${output}, ะทะฐ ะดะฐ ะฒะผัะบะฝะตัะต ััะฐะฝัะบัะธะฑะธัะฐะฝะธั ัะตะบัั ะฒ ะฟะพะดะบะฐะฝะฐัะฐ.",
"updatePrompt": "ะะฑะฝะพะฒัะฒะฐะฝะต ะฝะฐ ะฟะพะดะบะฐะฝะฐัะฐ",
"deletePrompt": "ะะทััะธะฒะฐะฝะต ะฝะฐ ะฟะพะดะบะฐะฝะฐัะฐ",
"createPrompt": "ะกัะทะดะฐะฒะฐะฝะต ะฝะฐ ะฟะพะดะบะฐะฝะฐ",
"cancel": "ะัะบะฐะท",
"selectToEdit": "ะะทะฑะตัะตัะต ะฟะพะดะบะฐะฝะฐ ะฟะพ-ะณะพัะต, ะทะฐ ะดะฐ ะฒะธะดะธัะต ะธ ัะตะดะฐะบัะธัะฐัะต ะฟะพะดัะพะฑะฝะพััะธัะต ั.",
"createFirst": "ะะฐัะธัะฝะตัะต โะะพะฒะฐ ะฟะพะดะบะฐะฝะฐโ ะฟะพ-ะณะพัะต, ะทะฐ ะดะฐ ััะทะดะฐะดะตัะต ะฟััะฒะฐัะฐ ัะธ ะฟะพะดะบะฐะฝะฐ ะทะฐ ะฟะพััะพะฑัะฐะฑะพัะบะฐ."
}
},
"history": {
"title": "ะััะพัะธั",
"openFolder": "ะัะฒะฐััะฝะต ะฝะฐ ะฟะฐะฟะบะฐัะฐ ั ะทะฐะฟะธัะธ",
"loading": "ะะฐัะตะถะดะฐะฝะต ะฝะฐ ะธััะพัะธััะฐ...",
"empty": "ะัะต ะพัะต ะฝัะผะฐ ััะฐะฝัะบัะธะฟัะธะธ. ะะฐะฟะพัะฝะตัะต ะทะฐะฟะธั, ะทะฐ ะดะฐ ะธะทะณัะฐะดะธัะต ะธััะพัะธั!",
"copyToClipboard": "ะะพะฟะธัะฐะฝะต ะฝะฐ ััะฐะฝัะบัะธะฟัะธััะฐ ะฒ ะบะปะธะฟะฑะพัะดะฐ",
"copyError": "ะขัะฐะฝัะบัะธะฟัะธััะฐ ะฝะต ะฑะต ะบะพะฟะธัะฐะฝะฐ ะฒ ะบะปะธะฟะฑะพัะดะฐ.",
"save": "ะะฐะฟะฐะทะฒะฐะฝะต ะฝะฐ ััะฐะฝัะบัะธะฟัะธััะฐ",
"unsave": "ะัะตะผะฐั
ะฒะฐะฝะต ะพั ะทะฐะฟะฐะทะตะฝะธัะต",
"delete": "ะะทััะธะฒะฐะฝะต ะฝะฐ ะทะฐะฟะธัะฐ",
"deleteError": "ะะทััะธะฒะฐะฝะตัะพ ะฝะฐ ะทะฐะฟะธัะฐ ะฝะต ะฑะต ััะฟะตัะฝะพ. ะะฟะธัะฐะนัะต ะพัะฝะพะฒะพ.",
"retranscribe": "ะะพะฒัะพัะฝะฐ ััะฐะฝัะบัะธะฟัะธั",
"retranscribeError": "ะะพะฒัะพัะฝะฐัะฐ ััะฐะฝัะบัะธะฟัะธั ะฝะต ะฑะต ััะฟะตัะฝะฐ. ะะฟะธัะฐะนัะต ะพัะฝะพะฒะพ.",
"transcribing": "ะขัะฐะฝัะบัะธะฑะธัะฐะฝะต...",
"transcriptionFailed": "ะขัะฐะฝัะบัะธะฟัะธััะฐ ะฝะต ะฑะต ััะฟะตัะฝะฐ. ะะพะถะตัะต ะดะฐ ะพะฟะธัะฐัะต ะพัะฝะพะฒะพ ั ะธะบะพะฝะฐัะฐ ะทะฐ ะฟะพะฒัะพัะตะฝ ะพะฟะธั."
},
"debug": {
"title": "ะััััะฐะฝัะฒะฐะฝะต",
"logDirectory": {
"title": "ะะฐะฟะบะฐ ั ะปะพะณะพะฒะต",
"description": "ะัััะพัะพ, ะบัะดะตัะพ ัะต ััั
ัะฐะฝัะฒะฐั ะปะพะณ ัะฐะนะปะพะฒะตัะต"
},
"logLevel": {
"title": "ะะธะฒะพ ะฝะฐ ะปะพะณะฒะฐะฝะต",
"description": "ะะฐะดะฐะฒะฐะฝะต ะฝะฐ ะฟะพะดัะพะฑะฝะพัััะฐ ะฝะฐ ะปะพะณะพะฒะตัะต"
},
"liveLogs": {
"title": "ะะพะณะพะฒะต ะฝะฐ ะถะธะฒะพ",
"description": "ะัะตะณะปะตะถะดะฐะนัะต ะปะพะณะพะฒะตัะต ะฝะฐ ะฟัะธะปะพะถะตะฝะธะตัะพ ะฒ ัะตะฐะปะฝะพ ะฒัะตะผะต, ะทะฐ ะดะฐ ะดะธะฐะณะฝะพััะธัะธัะฐัะต ะฟัะพะฑะปะตะผะธ, ะฑะตะท ะดะฐ ะพัะฒะฐัััะต ะปะพะณ ัะฐะนะปะฐ. ะะพะบะฐะทะฒะฐั ัะต ัะฐะผะพ ะปะพะณะพะฒะต, ััะทะดะฐะดะตะฝะธ ะดะพะบะฐัะพ ัะพะทะธ ะฟะฐะฝะตะป ะต ะพัะฒะพัะตะฝ; ัะฟะฐะทะฒะฐ ะฝะฐัััะพะนะบะฐัะฐ ยซะะธะฒะพ ะฝะฐ ะปะพะณะฒะฐะฝะตยป ะฟะพ-ะณะพัะต.",
"live": "ะะฐ ะถะธะฒะพ",
"paused": "ะะฐ ะฟะฐัะทะฐ",
"pause": "ะะฐัะทะฐ",
"resume": "ะัะทะพะฑะฝะพะฒัะฒะฐะฝะต",
"copied": "ะะพะฟะธัะฐะฝะพ",
"lineCount": "ะ ะตะดะพะฒะต: {{count}}",
"empty": "ะะทัะฐะบะฒะฐะฝะต ะฝะฐ ะปะพะณะพะฒะตโฆ ะะฐะฟะธัะธัะต ัะต ัะต ะฟะพัะฒัั ััะบ, ัะพะผ ะฟัะธะปะพะถะตะฝะธะตัะพ ะณะธ ะณะตะฝะตัะธัะฐ."
},
"updateChecks": {
"label": "ะัะพะฒะตัะบะฐ ะทะฐ ะฐะบััะฐะปะธะทะฐัะธะธ",
"description": "ะะฒัะพะผะฐัะธัะฝะฐ ะฟัะพะฒะตัะบะฐ ะทะฐ ะฝะพะฒะธ ะฒะตััะธะธ ะฝะฐ Handy",
"lockedDescription": "ะะตะฐะบัะธะฒะธัะฐะฝะพ ะพั ัะธััะตะผะฝะฐัะฐ ะบะพะฝัะธะณััะฐัะธั (HANDY_DISABLE_UPDATER)"
},
"soundTheme": {
"label": "ะะฒัะบะพะฒะฐ ัะตะผะฐ",
"description": "ะะทะฑะพั ะฝะฐ ะทะฒัะบะพะฒะฐ ัะตะผะฐ ะทะฐ ัะธะณะฝะฐะป ะฟัะธ ััะฐัั ะธ ะบัะฐะน ะฝะฐ ะทะฐะฟะธัะฐ"
},
"wordCorrectionThreshold": {
"title": "ะัะฐะณ ะทะฐ ะบะพัะตะบัะธั ะฝะฐ ะดัะผะธ",
"description": "ะงัะฒััะฒะธัะตะปะฝะพัั ะฟัะธ ะบะพัะตะบัะธั ะฝะฐ ะฟะตััะพะฝะฐะปะธะทะธัะฐะฝะธ ะดัะผะธ"
},
"historyLimit": {
"title": "ะะธะผะธั ะฝะฐ ะธััะพัะธััะฐ",
"description": "ะะฐะบัะธะผะฐะปะตะฝ ะฑัะพะน ะทะฐะฟะธัะธ ะฒ ะธััะพัะธััะฐ ะทะฐ ะฟะฐะทะตะฝะต",
"entries": "ะทะฐะฟะธัะฐ"
},
"recordingRetention": {
"title": "ะะฒัะพะผะฐัะธัะฝะพ ะธะทััะธะฒะฐะฝะต ะฝะฐ ะทะฐะฟะธัะธ",
"description": "ะะฒัะพะผะฐัะธัะฝะพ ะธะทััะธะฒะฐะฝะต ะฝะฐ ััะฐัะธ ะทะฐะฟะธัะธ ะทะฐ ะฟะตััะตะฝะต ะฝะฐ ะผัััะพ",
"never": "ะะธะบะพะณะฐ",
"preserveLimit": "ะะฐะฟะฐะทะฒะฐะฝะต ะฝะฐ ะฟะพัะปะตะดะฝะธัะต {{count}}",
"days3": "ะกะปะตะด 3 ะดะฝะธ",
"weeks2": "ะกะปะตะด 2 ัะตะดะผะธัะธ",
"months3": "ะกะปะตะด 3 ะผะตัะตัะฐ",
"placeholder": "ะะทะฑะตัะตัะต ะฟะตัะธะพะด ะฝะฐ ััั
ัะฐะฝะตะฝะธะต..."
},
"alwaysOnMicrophone": {
"label": "ะะพััะพัะฝะฝะพ ะฐะบัะธะฒะตะฝ ะผะธะบัะพัะพะฝ",
"description": "ะััะถะฐะฝะต ะฝะฐ ะผะธะบัะพัะพะฝะฐ ะฐะบัะธะฒะตะฝ ะทะฐ ะฟะพ-ะฑััะท ะพัะณะพะฒะพั"
},
"clamshellMicrophone": {
"title": "ะะธะบัะพัะพะฝ ะฟัะธ ะทะฐัะฒะพัะตะฝ ะบะฐะฟะฐะบ",
"description": "ะะธะบัะพัะพะฝ ะทะฐ ะธะทะฟะพะปะทะฒะฐะฝะต, ะบะพะณะฐัะพ ะบะฐะฟะฐะบัั ะฝะฐ ะปะฐะฟัะพะฟะฐ ะต ะทะฐัะฒะพัะตะฝ"
},
"postProcessingToggle": {
"label": "ะะพััะพะฑัะฐะฑะพัะบะฐ",
"description": "ะะบะปััะฒะฐะฝะต ะฝะฐ ะฟะพะดะพะฑััะฒะฐะฝะต ะฝะฐ ัะตะบััะฐ ั ะะ ัะปะตะด ััะฐะฝัะบัะธะฟัะธั"
},
"muteWhileRecording": {
"label": "ะะฐะณะปััะฐะฒะฐะฝะต ะฟัะธ ะทะฐะฟะธั",
"description": "ะะฐะณะปััะฐะฒะฐะฝะต ะฝะฐ ัะธััะตะผะฝะธั ะทะฒัะบ ะฟะพ ะฒัะตะผะต ะฝะฐ ะทะฐะฟะธั"
},
"appendTrailingSpace": {
"label": "ะะฝัะตัะฒะฐะป ะฒ ะบัะฐั",
"description": "ะะพะฑะฐะฒัะฝะต ะฝะฐ ะธะฝัะตัะฒะฐะป ัะปะตะด ะฟะพััะฐะฒะตะฝะฐัะฐ ััะฐะฝัะบัะธะฟัะธั"
},
"keyboardImplementation": {
"title": "ะ ะตะฐะปะธะทะฐัะธั ะฝะฐ ะบะปะฐะฒะธะฐัััะฐัะฐ",
"description": "ะะทะฑะพั ะฝะฐ ะฑะตะบะตะฝะด ะทะฐ ะณะปะพะฑะฐะปะฝะธัะต ะฑััะทะธ ะบะปะฐะฒะธัะธ.",
"bindingsReset": "ะััะทะธัะต ะบะปะฐะฒะธัะธ ะฑัั
ะฐ ะฝะตััะฒะผะตััะธะผะธ ะธ ัะฐ ะฝัะปะธัะฐะฝะธ ะบัะผ ะฟะพะดัะฐะทะฑะธัะฐะฝะธัะต"
},
"paths": {
"appData": "ะะฐะฝะฝะธ ะฝะฐ ะฟัะธะปะพะถะตะฝะธะตัะพ:",
"models": "ะะพะดะตะปะธ:",
"settings": "ะะฐัััะพะนะบะธ:"
},
"pasteDelay": {
"title": "ะะฐะฑะฐะฒัะฝะต ะฟัะธ ะฟะพััะฐะฒัะฝะต (ะฟัะตะดะธ)",
"description": "ะะฐะฑะฐะฒัะฝะต (ะฒ ะผะธะปะธัะตะบัะฝะดะธ) ัะปะตะด ะบะพะฟะธัะฐะฝะต ะฝะฐ ัะตะบััะฐ, ะฟัะตะดะธ ะธะทะฟัะฐัะฐะฝะต ะฝะฐ ะบะปะฐะฒะธัะฐ ะทะฐ ะฟะพััะฐะฒัะฝะต. ะฃะฒะตะปะธัะตัะต, ะฐะบะพ ะฝะธัะพ ะฝะต ัะต ะฟะพััะฐะฒั."
},
"pasteDelayAfter": {
"title": "ะะฐะฑะฐะฒัะฝะต ะฟัะธ ะฟะพััะฐะฒัะฝะต (ัะปะตะด)",
"description": "ะะฐะฑะฐะฒัะฝะต (ะฒ ะผะธะปะธัะตะบัะฝะดะธ) ัะปะตะด ะบะปะฐะฒะธัะฐ ะทะฐ ะฟะพััะฐะฒัะฝะต, ะฟัะตะดะธ ะฒัะทััะฐะฝะพะฒัะฒะฐะฝะต ะฝะฐ ะฟัะตะดะธัะฝะธั ะบะปะธะฟะฑะพัะด. ะฃะฒะตะปะธัะตัะต, ะฐะบะพ ะฒะผะตััะพ ััะฐะฝัะบัะธะฟัะธััะฐ ัะต ะฟะพััะฐะฒั ััะฐัะพัะพ ััะดััะถะฐะฝะธะต ะฝะฐ ะบะปะธะฟะฑะพัะดะฐ."
},
"holdThreshold": {
"title": "ะัะฐะณ ะฝะฐ ะทะฐะดััะถะฐะฝะต",
"description": "ะกะฐะผะพ ะฒ ะฐะฒัะพะผะฐัะธัะตะฝ ัะตะถะธะผ: ะบะพะปะบะพ ะดัะปะณะพ (ะฒ ะผะธะปะธัะตะบัะฝะดะธ) ัััะฑะฒะฐ ะดะฐ ัะต ะทะฐะดััะถะธ ะบะพะผะฑะธะฝะฐัะธััะฐ, ะทะฐ ะดะฐ ัะต ะฑัะพะธ ะทะฐ ะทะฐะดััะถะฐะฝะต ะฒะผะตััะพ ะทะฐ ะบัะฐัะบะพ ะฝะฐัะธัะบะฐะฝะต. ะะฐะผะฐะปะตัะต, ะฐะบะพ ัะปะตะด ะบัะฐัะบะธ ะทะฐะดััะถะฐะฝะธั ะทะฐะฟะธััั ะฟัะพะดัะปะถะฐะฒะฐ; ัะฒะตะปะธัะตัะต, ะฐะบะพ ัะผะธัะปะตะฝะธัะต ะบัะฐัะบะธ ะฝะฐัะธัะบะฐะฝะธั ัะต ะฟัะธะตะผะฐั ะทะฐ ะทะฐะดััะถะฐะฝะต."
},
"reliablePaste": {
"title": "ะะฐะดะตะถะดะฝะพ ะฟะพััะฐะฒัะฝะต (Beta)",
"description": "ะัะทััะฐะฝะพะฒัะฒะฐ ะบะปะธะฟะฑะพัะดะฐ ัะฐะผะพ ัะปะตะด ะบะฐัะพ ัะตะปะตะฒะพัะพ ะฟัะธะปะพะถะตะฝะธะต ะดะตะนััะฒะธัะตะปะฝะพ ะฟัะพัะตัะต ััะฐะฝัะบัะธะฟัะธััะฐ, ะฒะผะตััะพ ัะปะตะด ัะธะบัะธัะฐะฝะพ ะทะฐะฑะฐะฒัะฝะต. ะัะตะดะฝะฐะทะฝะฐัะตะฝะพ ะดะฐ ะพััััะฐะฝะธ ะฟะพััะฐะฒัะฝะตัะพ ะฝะฐ ััะฐัะพัะพ ััะดััะถะฐะฝะธะต ะฝะฐ ะบะปะธะฟะฑะพัะดะฐ ะฟัะธ ะฝะฐัะพะฒะฐัะฒะฐะฝะต ะฝะฐ ัะธััะตะผะฐัะฐ. ะะทะธัะบะฒะฐ ะฝะฐัะธะฝ ะฝะฐ ะฟะพััะฐะฒัะฝะต ะฟัะตะท ะบะปะธะฟะฑะพัะดะฐ; ัะฐะผะพ ะทะฐ macOS ะธ Windows."
},
"recordingBuffer": {
"title": "ะะพะฟัะปะฝะธัะตะปะตะฝ ะฑััะตั ะฝะฐ ะทะฐะฟะธัะฐ",
"description": "ะะพะฟัะปะฝะธัะตะปะฝะพ ะฒัะตะผะต (ะฒ ะผะธะปะธัะตะบัะฝะดะธ) ะทะฐ ะทะฐะฟะธั ัะปะตะด ะฟััะบะฐะฝะต ะฝะฐ ะบะปะฐะฒะธัะฐ, ะทะฐ ะดะฐ ัะต ัะปะพะฒะธ ะบัะฐัั ะฝะฐ ะฐัะดะธะพัะพ. 0 = ะฑะตะท ะดะพะฟัะปะฝะธัะตะปะตะฝ ะฑััะตั."
},
"keyboardDiagnostic": {
"title": "ะะธะฐะณะฝะพััะธะบะฐ ะฝะฐ ะบะปะฐะฒะธะฐัััะฐัะฐ",
"description": "ะัะพะฒะตััะฒะฐ ะดะฐะปะธ ะบะปะฐะฒะธะฐัััะฝะธัะต ััะฑะธัะธั ะดะพััะธะณะฐั ะดะพ Handy. ะะฐะฟะธัะฒะฐ ัะต ัะฐะผะพ ะฑัะพัั ะฝะฐ ััะฑะธัะธััะฐ โ ะฝะธะบะพะณะฐ ะบะพะธ ะบะปะฐะฒะธัะธ ะฝะฐัะธัะบะฐัะต.",
"run": "ะกัะฐััะธัะฐะฝะต ะฝะฐ 10-ัะตะบัะฝะดะฝะฐ ะดะธะฐะณะฝะพััะธะบะฐ",
"running": "ะกะปััะฐะฝะตโฆ ะฝะฐัะธัะฝะตัะต ะฑััะทะธั ัะธ ะบะปะฐะฒะธั ะฝัะบะพะปะบะพ ะฟััะธ (ะฝะฐะฟั. Option+Space)",
"secureInputLabel": "Secure Input",
"enabled": "ะฒะบะปััะตะฝ",
"disabled": "ะธะทะบะปััะตะฝ",
"holder": "ะทะฐะดััะถะฐะฝ ะพั {{name}} (pid {{pid}})",
"holderUnknown": "ะฝัะผะฐ ะฒะธะดะธะผ ะดััะถะฐัะตะป",
"keyDown": "ะะฐัะธัะฝะฐั ะบะปะฐะฒะธั",
"keyUp": "ะัะฟััะฝะฐั ะบะปะฐะฒะธั",
"flagsChanged": "ะะพะดะธัะธะบะฐัะพัะธ",
"mouse": "ะะธัะบะฐ",
"verdictBlocked": "Secure Input ะฑะปะพะบะธัะฐ ะบะปะฐะฒะธัะฝะธัะต ััะฑะธัะธั โ ะฑััะทะธัะต ะบะปะฐะฒะธัะธ ั ะพะฑะธะบะฝะพะฒะตะฝ ะบะปะฐะฒะธั ะฝะต ะผะพะณะฐั ะดะฐ ัะฐะฑะพััั, ะดะพะบะฐัะพ ัะพะฒะฐ ะฝะต ะฑัะดะต ัะตัะตะฝะพ.",
"verdictSuspicious": "ะัะธััะธะณะฝะฐั
ะฐ ััะฑะธัะธั ะพั ะผะพะดะธัะธะบะฐัะพัะธ, ะฝะพ ะฝะธัะพ ะตะดะฝะพ ะบะปะฐะฒะธัะฝะพ ััะฑะธัะธะต โ ะฝะตัะพ ะฟะพัะธัะบะฐ ะบะปะฐะฒะธัะธัะต, ะฒัะฟัะตะบะธ ัะต Secure Input ัะต ะพััะธัะฐ ะบะฐัะพ ะธะทะบะปััะตะฝ. ะะพะปั, ััะพะฑัะตัะต ะทะฐ ัะพะฒะฐ ะฒ GitHub.",
"verdictOk": "ะะปะฐะฒะธัะฝะธัะต ััะฑะธัะธั ะดะพััะธะณะฐั ะดะพ Handy ะฝะพัะผะฐะปะฝะพ.",
"verdictNoEvents": "ะะต ัะฐ ัะปะพะฒะตะฝะธ ััะฑะธัะธั โ ะฝะฐัะธัะฝะฐั
ัะต ะปะธ ะฝัะบะฐะบะฒะธ ะบะปะฐะฒะธัะธ ะฟะพ ะฒัะตะผะต ะฝะฐ ัะตััะฐ?",
"failed": "ะะธะฐะณะฝะพััะธะบะฐัะฐ ะต ะฝะตััะฟะตัะฝะฐ: {{error}}"
},
"whatsNewPreview": {
"title": "ะัะตะณะปะตะด ะฝะฐ ะฝะพะฒะพััะธัะต",
"description": "ะัะฒะฐัั ะฟะพัะปะตะดะฝะธัะต ะฒะบะปััะตะฝะธ ะฑะตะปะตะถะบะธ ะบัะผ ะธะทะดะฐะฝะธะตัะพ, ะฑะตะท ะดะฐ ะณะธ ะผะฐัะบะธัะฐ ะบะฐัะพ ะฒะธะดะตะฝะธ",
"button": "ะัะตะณะปะตะด",
"noNotes": "ะะต ัะฐ ะฝะฐะผะตัะตะฝะธ ะฒะบะปััะตะฝะธ ะฑะตะปะตะถะบะธ ะบัะผ ะธะทะดะฐะฝะธะตัะพ",
"error": "ะะตััะฟะตัะตะฝ ะฟัะตะณะปะตะด ะฝะฐ ะฑะตะปะตะถะบะธัะต ะบัะผ ะธะทะดะฐะฝะธะตัะพ"
},
"onboardingPreview": {
"title": "ะัะตะณะปะตะด ะฝะฐ ะฟััะฒะพะฝะฐัะฐะปะฝะฐัะฐ ะฝะฐัััะพะนะบะฐ",
"description": "ะัะตะณะปะตะดะฐะนัะต ะตะบัะฐะฝะธัะต ะทะฐ ะฟััะฒะพะฝะฐัะฐะปะฝะฐ ะฝะฐัััะพะนะบะฐ, ะฑะตะท ะดะฐ ะฟัะพะผะตะฝััะต ัะฐะทัะตัะตะฝะธััะฐ, ะผะพะดะตะปะธัะต ะธะปะธ ััััะพัะฝะธะตัะพ ะฝะฐ ะทะฐะฒัััะฒะฐะฝะต",
"permissionsButton": "ะ ะฐะทัะตัะตะฝะธั",
"modelsButton": "ะะทะฑะพั ะฝะฐ ะผะพะดะตะป",
"exitButton": "ะะทั
ะพะด ะพั ะฟัะตะณะปะตะดะฐ"
}
},
"about": {
"title": "ะะฐ ะฟัะธะปะพะถะตะฝะธะตัะพ",
"version": {
"title": "ะะตััะธั",
"description": "ะขะตะบััะฐ ะฒะตััะธั ะฝะฐ Handy"
},
"appDataDirectory": {
"title": "ะะฐะฟะบะฐ ั ะดะฐะฝะฝะธ ะฝะฐ ะฟัะธะปะพะถะตะฝะธะตัะพ",
"description": "ะัััะพัะพ, ะบัะดะตัะพ Handy ััั
ัะฐะฝัะฒะฐ ะดะฐะฝะฝะธัะต ัะธ"
},
"sourceCode": {
"title": "ะะทั
ะพะดะตะฝ ะบะพะด",
"description": "ะัะตะณะปะตะด ะฝะฐ ะธะทั
ะพะดะฝะธั ะบะพะด ะธ ะฟัะธะฝะพั",
"button": "ะะธะถัะต ะฒ GitHub"
},
"supportDevelopment": {
"title": "ะะพะดะบัะตะฟะตัะต ัะฐะทัะฐะฑะพัะบะฐัะฐ",
"description": "ะะพะผะพะณะฝะตัะต ะฝะธ ะดะฐ ะฟัะพะดัะปะถะธะผ ะดะฐ ัะฐะทะฒะธะฒะฐะผะต Handy",
"button": "ะะฐัะตะฝะธะต"
},
"acknowledgments": {
"title": "ะะปะฐะณะพะดะฐัะฝะพััะธ",
"ggml": {
"title": "ggml",
"description": "ะะธัะพะบะพะฟัะพะธะทะฒะพะดะธัะตะปะฝะพ ะธะทะฟัะปะฝะตะฝะธะต ะฝะฐ ะฐะฒัะพะผะฐัะธัะฝะธั ะผะพะดะตะป ะทะฐ ัะฐะทะฟะพะทะฝะฐะฒะฐะฝะต ะฝะฐ ัะตั Whisper ะฝะฐ OpenAI",
"details": "Handy ะธะทะฟะพะปะทะฒะฐ ggml ะทะฐ ะฑััะทะพ ะปะพะบะฐะปะฝะพ ัะตั-ะบัะผ-ัะตะบัั. ะะปะฐะณะพะดะฐัะฝะพััะธ ะฝะฐ Georgi Gerganov ะธ ัััััะดะฝะธัะธัะต ะทะฐ ะพัะปะธัะฝะฐัะฐ ัะฐะฑะพัะฐ."
}
},
"whatsNewUpdates": {
"label": "ะะพะบะฐะทะฒะฐะน ะฝะพะฒะพััะธัะต",
"description": "ะะพะบะฐะทะฒะฐะน ะฑะตะปะตะถะบะธ ะบัะผ ะธะทะดะฐะฝะธะตัะพ ัะปะตะด ะฐะบััะฐะปะธะทะฐัะธะธ ะฝะฐ Handy"
}
}
},
"footer": {
"checkingUpdates": "ะัะพะฒะตัะบะฐ ะทะฐ ะฐะบััะฐะปะธะทะฐัะธะธ...",
"updateAvailableShort": "ะะฐะปะธัะฝะฐ ะฐะบััะฐะปะธะทะฐัะธั",
"upToDate": "ะะบััะฐะปะฝะฐ ะฒะตััะธั",
"updateCheckingDisabled": "ะัะพะฒะตัะบะฐัะฐ ะทะฐ ะฐะบััะฐะปะธะทะฐัะธะธ ะต ะธะทะบะปััะตะฝะฐ",
"downloading": "ะะทัะตะณะปั ัะต... {{progress}}%",
"installing": "ะะฝััะฐะปะธัะฐะฝะต...",
"preparing": "ะะพะดะณะพัะพะฒะบะฐ...",
"checkForUpdates": "ะัะพะฒะตัะบะฐ ะทะฐ ะฐะบััะฐะปะธะทะฐัะธะธ",
"portableUpdateTitle": "ะะตะพะฑั
ะพะดะธะผะฐ ะต ัััะฝะฐ ะฐะบััะฐะปะธะทะฐัะธั",
"portableUpdateMessage": "ะัะตะฝะพัะธะผะธัะต ะธะฝััะฐะปะฐัะธะธ ะฝะต ะผะพะณะฐั ะดะฐ ะฑัะดะฐั ะฐะบััะฐะปะธะทะธัะฐะฝะธ ะฐะฒัะพะผะฐัะธัะฝะพ. ะะทัะตะณะปะตัะต ะธะฝััะฐะปะฐัะพัะฐ ะทะฐ ะฒะฐัะฐัะฐ ัะธััะตะผะฐ ะพั ะฑััะพะฝะฐ ะฟะพ-ะดะพะปั, ััะฐััะธัะฐะนัะต ะณะพ ะธ ะธะฝััะฐะปะธัะฐะนัะต ะฒ ัััะฐัะฐ ะฟะฐะฟะบะฐ โ ะฟะฐะฟะบะฐัะฐ Data/ (ะฝะฐัััะพะนะบะธ, ะผะพะดะตะปะธ, ะทะฐะฟะธัะธ) ะพััะฐะฒะฐ ะฝะฐ ะผัััะพัะพ ัะธ.",
"portableUpdateButton": "ะะทัะตะณะปัะฝะต ะฝะฐ ะธะฝััะฐะปะฐัะพัะฐ",
"portableUpdateBrowseMessage": "ะัะตะฝะพัะธะผะธัะต ะธะฝััะฐะปะฐัะธะธ ะฝะต ะผะพะณะฐั ะดะฐ ะฑัะดะฐั ะฐะบััะฐะปะธะทะธัะฐะฝะธ ะฐะฒัะพะผะฐัะธัะฝะพ. ะะทัะตะณะปะตัะต ะฝะฐะน-ะฝะพะฒะฐัะฐ ะฒะตััะธั ะทะฐ ะฒะฐัะฐัะฐ ัะธััะตะผะฐ ะพั GitHub Releases ะธ ั ะธะฝััะฐะปะธัะฐะนัะต ะฒ ัััะฐัะฐ ะฟะฐะฟะบะฐ โ ะฟะฐะฟะบะฐัะฐ Data/ (ะฝะฐัััะพะนะบะธ, ะผะพะดะตะปะธ, ะทะฐะฟะธัะธ) ะพััะฐะฒะฐ ะฝะฐ ะผัััะพัะพ ัะธ.",
"portableUpdateBrowseButton": "ะัะฒะพัะธ GitHub Releases"
},
"common": {
"loading": "ะะฐัะตะถะดะฐะฝะต...",
"delete": "ะะทััะธะฒะฐะฝะต",
"back": "ะะฐะทะฐะด",
"close": "ะะฐัะฒะฐััะฝะต",
"open": "ะัะฒะฐััะฝะต",
"copy": "ะะพะฟะธัะฐะฝะต",
"clear": "ะะทัะธััะฒะฐะฝะต",
"noOptionsFound": "ะัะผะฐ ะฝะฐะผะตัะตะฝะธ ะพะฟัะธะธ"
},
"accessibility": {
"permissionsDescription": "Handy ัะต ะฝัะถะดะฐะต ะพั ัะฐะทัะตัะตะฝะธั ะทะฐ ะดะพัััะฟะฝะพัั, ะทะฐ ะดะฐ ะฒัะฒะตะถะดะฐ ััะฐะฝัะบัะธะฑะธัะฐะฝะธั ัะตะบัั.",
"openSettings": "ะัะฒะฐััะฝะต ะฝะฐ ัะธััะตะผะฝะธัะต ะฝะฐัััะพะนะบะธ"
},
"errors": {
"loadDirectory": "ะัะตัะบะฐ ะฟัะธ ะทะฐัะตะถะดะฐะฝะต ะฝะฐ ะฟะฐะฟะบะฐัะฐ: {{error}}",
"micPermissionDeniedTitle": "ะะพัััะฟัั ะดะพ ะผะธะบัะพัะพะฝะฐ ะต ะพัะบะฐะทะฐะฝ",
"micPermissionDenied": {
"generic": "ะะฟะตัะฐัะธะพะฝะฝะฐัะฐ ัะธััะตะผะฐ ะพัะบะฐะทะฐ ะดะพัััะฟ ะดะพ ะผะธะบัะพัะพะฝะฐ. ะะพะปั, ะดะฐะนัะต ัะฐะทัะตัะตะฝะธะต ะทะฐ ะผะธะบัะพัะพะฝ ะฒ ัะธััะตะผะฝะธัะต ะฝะฐัััะพะนะบะธ.",
"windows": "ะะบะปััะตัะต ะดะพัััะฟ ะดะพ ะผะธะบัะพัะพะฝะฐ ะฒ ะะฐัััะพะนะบะธ โ ะะพะฒะตัะธัะตะปะฝะพัั ะธ ัะธะณััะฝะพัั โ ะะธะบัะพัะพะฝ (ะฒะบะปััะธัะตะปะฝะพ ะทะฐ ะฝะฐััะพะปะฝะธ ะฟัะธะปะพะถะตะฝะธั).",
"macos": "ะะฐะนัะต ะดะพัััะฟ ะดะพ ะผะธะบัะพัะพะฝะฐ ะฒ ะกะธััะตะผะฝะธ ะฝะฐัััะพะนะบะธ โ ะะพะฒะตัะธัะตะปะฝะพัั ะธ ัะธะณััะฝะพัั โ ะะธะบัะพัะพะฝ.",
"linux": "ะะฐะนัะต ะดะพัััะฟ ะดะพ ะผะธะบัะพัะพะฝะฐ ะฒ ะฝะฐัััะพะนะบะธัะต ะทะฐ ะทะฒัะบ ะธะปะธ ะฟะพะฒะตัะธัะตะปะฝะพัั ะฝะฐ ัะธััะตะผะฐัะฐ."
},
"noInputDeviceTitle": "ะะต ะต ะฝะฐะผะตัะตะฝ ะผะธะบัะพัะพะฝ",
"noInputDevice": "ะะต ะต ะพัะบัะธัะพ ะฐัะดะธะพ ะฒั
ะพะดะฝะพ ััััะพะนััะฒะพ. ะกะฒััะถะตัะต ะผะธะบัะพัะพะฝ ะธะปะธ ัะปััะฐะปะบะธ ะธ ะพะฟะธัะฐะนัะต ะพัะฝะพะฒะพ.",
"recordingFailed": "ะกัะฐััะธัะฐะฝะตัะพ ะฝะฐ ะทะฐะฟะธัะฐ ะฝะต ะฑะต ััะฟะตัะฝะพ: {{error}}",
"modelLoadFailed": "ะะฐัะตะถะดะฐะฝะตัะพ ะฝะฐ ะผะพะดะตะปะฐ ะฝะต ะฑะต ััะฟะตัะฝะพ: {{model}}",
"modelLoadFailedUnknown": "ะฝะตะธะทะฒะตััะตะฝ ะผะพะดะตะป",
"pasteFailedTitle": "ะะตััะฟะตัะฝะพ ะฟะพััะฐะฒัะฝะต ะฝะฐ ัะตะบัั",
"pasteFailed": "ะขะตะบัััั ะฝะต ะผะพะถะฐ ะดะฐ ะฑัะดะต ะฟะพััะฐะฒะตะฝ ะฒ ะฐะบัะธะฒะฝะพัะพ ะฟัะธะปะพะถะตะฝะธะต.",
"transcriptionFailedTitle": "ะะตััะฟะตัะฝะฐ ััะฐะฝัะบัะธะฟัะธั"
},
"appLanguage": {
"title": "ะะทะธะบ ะฝะฐ ะฟัะธะปะพะถะตะฝะธะตัะพ",
"description": "ะัะพะผัะฝะฐ ะฝะฐ ะตะทะธะบะฐ ะฝะฐ ะธะฝัะตััะตะนัะฐ ะฝะฐ Handy"
},
"theme": {
"title": "ะขะตะผะฐ ะฝะฐ ะฟัะธะปะพะถะตะฝะธะตัะพ",
"description": "ะะทะฑะตัะตัะต ะดะฐะปะธ Handy ะดะฐ ัะปะตะดะฒะฐ ัะธััะตะผะฝะฐัะฐ ัะตะผะฐ, ะธะปะธ ะดะฐ ะพััะฐะฝะต ัะฒะตัะปะฐ ะธะปะธ ััะผะฝะฐ",
"options": {
"system": "ะกะธััะตะผะฝะฐ",
"light": "ะกะฒะตัะปะฐ",
"dark": "ะขัะผะฝะฐ"
}
},
"overlay": {
"transcribing": "ะขัะฐะฝัะบัะธะฑะธัะฐะฝะต...",
"processing": "ะะฑัะฐะฑะพัะบะฐ...",
"loadingModel": "ะะฐัะตะถะดะฐะฝะต ะฝะฐ ะผะพะดะตะปะฐ..."
},
"whatsNew": {
"title": "ะะพะฒะพ ะฒ Handy v{{version}}"
},
"secureInput": {
"blockedWithCulprit_one": "{{name}} ะผะพะถะต ะดะฐ ะฑะปะพะบะธัะฐ 1 ะฑััะท ะบะปะฐะฒะธั",
"blockedWithCulprit_other": "{{name}} ะผะพะถะต ะดะฐ ะฑะปะพะบะธัะฐ {{count}} ะฑััะทะธ ะบะปะฐะฒะธัะฐ",
"blockedNoCulprit_one": "macOS ะฒัะตะผะตะฝะฝะพ ะฑะปะพะบะธัะฐ 1 ะฑััะท ะบะปะฐะฒะธั",
"blockedNoCulprit_other": "macOS ะฒัะตะผะตะฝะฝะพ ะฑะปะพะบะธัะฐ {{count}} ะฑััะทะธ ะบะปะฐะฒะธัะฐ",
"recorderBlockedWithCulprit": "{{name}} ะผะพะถะต ะดะฐ ะฑะปะพะบะธัะฐ ะฟัะพะผะตะฝะธัะต ะฝะฐ ะฑััะทะธัะต ะบะปะฐะฒะธัะธ",
"recorderBlockedNoCulprit": "macOS ะฒัะตะผะตะฝะฝะพ ะฑะปะพะบะธัะฐ ะฟัะพะผะตะฝะธัะต ะฝะฐ ะฑััะทะธัะต ะบะปะฐะฒะธัะธ",
"learnMore": "ะะฐะบ ะดะฐ ะฟะพะฟัะฐะฒะธัะต ัะพะฒะฐ",
"recorderBlocked": "ะ ะผะพะผะตะฝัะฐ ะฝะต ะผะพะณะฐั ะดะฐ ัะต ะทะฐะฟะธัะฒะฐั ะฑััะทะธ ะบะปะฐะฒะธัะธ โ Secure Input ะฝะฐ macOS ะฑะปะพะบะธัะฐ ะบะปะฐะฒะธัะฝะธัะต ััะฑะธัะธั. ะััะฒะพ ะพััััะฐะฝะตัะต ะฟัะตะดัะฟัะตะถะดะตะฝะธะตัะพ ะทะฐ Secure Input.",
"dismiss": "ะัั
ะฒััะปัะฝะต"
}
}
File: src/i18n/locales/ca/translation.json
{
"tray": {
"settings": "Configuraciรณ...",
"checkUpdates": "Comprova si hi ha actualitzacions...",
"copyLastTranscript": "Copia l'รบltima transcripciรณ",
"unloadModel": "Allibera el model de la memรฒria",
"model": "Model",
"quit": "Surt",
"cancel": "Cancelยทla",
"secureInputWarning": "โ Dreceres blocades per l'entrada segura"
},
"sidebar": {
"general": "General",
"models": "Models",
"advanced": "Avanรงat",
"postProcessing": "Postprocessament",
"history": "Historial",
"debug": "Depuraciรณ",
"about": "Quant a"
},
"onboarding": {
"subtitle": "Per comenรงar, trieu un model de transcripciรณ",
"existingModelsTitle": "Models compatibles",
"downloadModelsTitle": "Disponibles per baixar",
"showAllModels": "Mostra tots els {{total}} models",
"showFewerModels": "Mostra menys models",
"recommended": "Recomanat",
"customModelDescription": "Sense suport oficial",
"migration": {
"title": "Cal actualitzar els vostres models",
"description": "Handy ara utilitza un tipus de model mรฉs nou. Baixeu la versiรณ nova per continuar transcrivint. Les versions antigues s'eliminaran.",
"replaces": "Substitueix {{name}}",
"oldFormat": "Format antic",
"failed": "Ha fallat la baixada",
"retry": "Torna-ho a provar",
"chooseAnother": "Trieu un altre model",
"download": "Baixa els models ({{size}})",
"continue": "Continua",
"timeRemaining": "Queden {{time}}"
},
"modelCard": {
"accuracy": "precisiรณ",
"speed": "velocitat"
},
"models": {
"small": {
"name": "Whisper Small",
"description": "Rร pid i forรงa precรญs."
},
"medium": {
"name": "Whisper Medium",
"description": "Bona precisiรณ i velocitat mitjana."
},
"turbo": {
"name": "Whisper Turbo",
"description": "Equilibri entre precisiรณ i velocitat."
},
"large": {
"name": "Whisper Large",
"description": "Bona precisiรณ, perรฒ lent."
},
"breeze-asr": {
"name": "Breeze ASR",
"description": "Optimitzat per al xinรจs mandarรญ de Taiwan. Admet l'alternanรงa de llengรผes."
}
},
"errors": {
"selectModel": "No s'ha pogut seleccionar el model"
},
"permissions": {
"title": "Permisos necessaris",
"description": "El Handy demana alguns permisos per funcionar correctament.",
"microphone": {
"title": "Accรฉs al micrรฒfon",
"description": "Necessari per escoltar la vostra veu i transcriure-la."
},
"accessibility": {
"title": "Accรฉs a l'accessibilitat",
"description": "Necessari per escriure el text transcrit a les aplicacions."
},
"grant": "Concediu el permรญs",
"granted": "Concedit",
"waiting": "S'estร esperant...",
"allGranted": "Tot a punt!",
"errors": {
"checkFailed": "No s'han pogut comprovar els permisos. Torneu-ho a provar.",
"requestFailed": "No s'ha pogut solยทlicitar el permรญs. Torneu-ho a provar."
}
}
},
"modelSelector": {
"custom": "Personalitzat",
"legacy": "Antic",
"streaming": "En temps real",
"active": "Actiu",
"switching": "S'estร canviant...",
"noModelsAvailable": "No hi ha models disponibles",
"verifying": "S'estร verificant {{modelName}}...",
"verifyingGeneric": "S'estร verificant...",
"downloading": "S'estร baixant: {{percentage}}%",
"downloadingMultiple": "S'estan baixant {{count}} models...",
"modelReady": "Model a punt",
"loading": "S'estร carregant {{modelName}}...",
"loadingGeneric": "S'estร carregant...",
"modelError": "Error del model",
"modelUnloaded": "Model alliberat de la memรฒria",
"noModelDownloadRequired": "No hi ha cap model: cal baixar-ne un",
"deleteModel": "Suprimiu {{modelName}}",
"downloadSpeed": "{{speed}} MB/s",
"cancel": "Cancelยทla",
"cancelDownload": "Cancelยทla la baixada",
"capabilities": {
"languageSelection": "Admet diverses llengรผes d'entrada",
"singleLanguage": "Nomรฉs admet aquesta llengua",
"languageCount": "{{total}} llengรผes",
"languageOnly": "Nomรฉs {{language}}",
"translation": "Pot traduir a l'anglรจs",
"translate": "Tradueix",
"streaming": "Mostra la transcripciรณ en temps real mentre parleu"
}
},
"settings": {
"modelSettings": {
"title": "Configuraciรณ de {{model}}"
},
"general": {
"title": "General",
"shortcut": {
"title": "Dreceres del Handy",
"description": "Configura les dreceres de teclat per iniciar l'enregistrament de veu per a la transcripciรณ",
"loading": "S'estan carregant les dreceres...",
"none": "No hi ha cap drecera configurada",
"notFound": "No s'ha trobat la drecera",
"pressKeys": "Premeu les tecles...",
"bindings": {
"transcribe": {
"name": "Drecera de transcripciรณ",
"description": "La drecera de teclat per enregistrar i transcriure la vostra veu."
},
"cancel": {
"name": "Drecera de cancelยทlaciรณ",
"description": "La drecera de teclat per cancelยทlar l'enregistrament actual."
},
"transcribe_with_post_process": {
"name": "Drecera de postprocessament",
"description": "Opcional: una drecera especรญfica que sempre aplica postprocessament amb IA a la transcripciรณ."
}
},
"errors": {
"restore": "No s'ha pogut restaurar la drecera original",
"set": "No s'ha pogut definir la drecera: {{error}}",
"reset": "No s'ha pogut restablir la drecera al valor original"
}
},
"language": {
"title": "Llengua",
"description": "Seleccioneu la llengua per al reconeixement de la parla. L'opciรณ automร tica detecta la llengua, mentre que seleccionar-ne una d'especรญfica pot millorar-ne la precisiรณ.",
"searchPlaceholder": "Cerca llengรผes...",
"noResults": "No s'ha trobat cap llengua",
"auto": "Automร tica"
},
"shortcutActivation": {
"title": "Comportament de la drecera",
"description": "Trieu com la drecera de transcripciรณ inicia i atura l'enregistrament.",
"options": {
"holdOrToggle": "Automร tic",
"pushToTalk": "Mantรฉn premuda",
"toggle": "Commuta"
},
"descriptions": {
"hold_or_toggle": "Manteniu-la premuda per enregistrar o feu una pulsaciรณ breu per iniciar o aturar l'enregistrament",
"push_to_talk": "Enregistreu mentre manteniu premuda la drecera",
"toggle": "Premeu la drecera per iniciar l'enregistrament i torneu-la a prรฉmer per aturar-lo"
}
}
},
"models": {
"title": "Models de transcripciรณ",
"description": "Seleccioneu un model de transcripciรณ o baixeu-ne mรฉs. Els models ofereixen diferents nivells de precisiรณ i velocitat.",
"searchPlaceholder": "Cerqueu models pel nomโฆ",
"yourModels": "Models baixats",
"availableModels": "Disponibles per baixar",
"deleteConfirm": "Segur que voleu suprimir {{modelName}}? Haureu de tornar-lo a baixar per utilitzar-lo.",
"deleteActiveConfirm": "{{modelName}} รฉs el model actiu. Si el suprimiu, no podreu fer transcripcions fins que seleccioneu un altre model. N'esteu segur?",
"deleteTitle": "Suprimeix el model",
"retiredNotice": {
"title": "Els models antics ja no funcionen amb Handy",
"description": "Ocupen {{size}} a l'ordinador.",
"delete": "Suprimeix els models",
"deleted": "S'han suprimit els models antics",
"deleteFailed": "No s'han pogut suprimir alguns models antics. Consulteu el registre per a mรฉs detalls."
},
"filters": {
"allLanguages": "Totes les llengรผes",
"streaming": "Filtra els models que admeten la transcripciรณ en temps real",
"translation": "Filtra els models que admeten la traducciรณ a l'anglรจs"
},
"rescan": {
"label": "Torna a cercar",
"tooltip": "Torna a cercar models afegits a la carpeta de models o a la memรฒria cau de Hugging Face des de fora del Handy"
},
"noModelsMatch": "Cap model no coincideix amb aquest filtre."
},
"sound": {
"title": "So",
"microphone": {
"title": "Micrรฒfon",
"description": "Selecciona el micrรฒfon preferit",
"placeholder": "Seleccionaun micrรฒfon...",
"loading": "S'estร carregant..."
},
"channel": {
"title": "Canal d'entrada",
"description": "Seleccioneu el canal d'entrada des del qual voleu enregistrar. Feu servir aquesta opciรณ si la interfรญcie d'ร udio tรฉ diverses entrades.",
"average": "Fes la mitjana de tots els canals",
"channel": "Canal {{n}}"
},
"audioFeedback": {
"label": "Avisos sonors",
"description": "Reprodueix un so quan s'inicia i s'atura l'enregistrament"
},
"outputDevice": {
"title": "Dispositiu de sortida",
"description": "Selecciona el dispositiu de sortida d'ร udio preferit per als avisos sonors",
"placeholder": "Selecciona un dispositiu de sortida...",
"loading": "S'estร carregant..."
},
"volume": {
"title": "Volum",
"description": "Ajusta el volum dels avisos sonors"
}
},
"advanced": {
"groups": {
"app": "Aplicaciรณ",
"output": "Sortida",
"transcription": "Transcripciรณ",
"history": "Historial",
"experimental": "Experimental"
},
"experimentalToggle": {
"label": "Funcions experimentals",
"description": "Activa les funcions experimentals que encara estan en desenvolupament."
},
"lazyStreamClose": {
"label": "Mantรฉn el micrรฒfon obert entre transcripcions",
"description": "Mantรฉ el flux d'ร udio del micrรฒfon obert durant 30 segons desprรฉs d'aturar l'enregistrament per reduir la latรจncia entre transcripcions consecutives. Mentre รฉs actiu, pot reduir la qualitat de l'ร udio Bluetooth."
},
"acceleration": {
"transcribe": {
"title": "Acceleraciรณ per maquinari",
"description": "Trieu el maquinari que s'utilitza per a la transcripciรณ. L'opciรณ automร tica utilitza la GPU si estร disponible i, si no, recorre a la CPU."
},
"gpuDevice": {
"auto": "Automร tica"
}
},
"startHidden": {
"label": "Inicia ocult",
"description": "Inicia a la safata del sistema sense obrir la finestra."
},
"autostart": {
"label": "Inicia en entrar a la sessiรณ",
"description": "Inicia automร ticament el Handy quan entreu a la sessiรณ de l'ordinador."
},
"showTrayIcon": {
"label": "Mostra la icona a la safata",
"description": "Mostra la icona del Handy a la safata del sistema."
},
"overlay": {
"style": {
"title": "Finestra superposada",
"description": "Tria la finestra superposada d'enregistrament: Cap l'amaga, Mรญnima mostra un indicador compacte i En directe mostra la transcripciรณ en temps real mentre parleu (nomรฉs amb models compatibles; cerqueu el distintiu En temps real al selector de models). Al Linux es recomana Cap.",
"options": {
"none": "Cap",
"minimal": "Mรญnima",
"live": "En directe"
}
},
"position": {
"title": "Posiciรณ de la finestra superposada",
"description": "On apareix la finestra superposada a la pantalla durant l'enregistrament i la transcripciรณ.",
"options": {
"bottom": "A baix",
"top": "A dalt"
}
}
},
"pasteMethod": {
"title": "Mรจtode d'enganxament",
"description": "Trieu com s'insereix el text. Directe: simula l'escriptura mitjanรงant l'entrada del sistema. Cap: no enganxa el text, nomรฉs actualitza l'historial i el porta-retalls.",
"options": {
"clipboard": "Porta-retalls ({{modifier}}+V)",
"clipboardCtrlShiftV": "Porta-retalls (Ctrl+Maj+V)",
"clipboardShiftInsert": "Porta-retalls (Maj+Insert)",
"direct": "Directe",
"none": "Cap",
"externalScript": "Script extern"
},
"externalScriptPlaceholder": "/camรญ/al/vostre/script.sh"
},
"typingTool": {
"title": "Eina d'escriptura",
"description": "Trieu l'eina d'escriptura del Linux que s'utilitzarร amb el mรจtode d'enganxament directe. L'opciรณ automร tica detecta i utilitza la millor eina disponible per al sistema.",
"options": {
"auto": "Automร tica (recomanada)"
}
},
"clipboardHandling": {
"title": "Gestiรณ del porta-retalls",
"description": "ยซNo modifiqueu el porta-retallsยป conserva el contingut actual del porta-retalls desprรฉs de la transcripciรณ. ยซCopieu al porta-retallsยป hi deixa el resultat de la transcripciรณ desprรฉs d'enganxar-lo.",
"options": {
"dontModify": "No modifiqueu el porta-retalls",
"copyToClipboard": "Copia al porta-retalls"
}
},
"autoSubmit": {
"title": "Enviament automร tic",
"description": "Envia automร ticament la combinaciรณ de tecles seleccionada desprรฉs d'inserir el text. S'utilitza Cmd+Enter al macOS i Super+Enter al Windows i al Linux.",
"options": {
"off": "Desactivat",
"enter": "Enter",
"cmdEnter": "Cmd+Enter",
"superEnter": "Super+Enter",
"ctrlEnter": "Ctrl+Enter"
}
},
"translateToEnglish": {
"label": "Traduรฏu a l'anglรจs",
"description": "Tradueix automร ticament la parla d'altres llengรผes a l'anglรจs durant la transcripciรณ."
},
"modelUnload": {
"title": "Allibera el model de la memรฒria",
"description": "Allibera automร ticament la memรฒria de la GPU i de la CPU quan el model no s'ha utilitzat durant el temps especificat",
"options": {
"never": "Mai",
"immediately": "Immediatament",
"min2": "Al cap de 2 minuts",
"min5": "Al cap de 5 minuts",
"min10": "Al cap de 10 minuts",
"min15": "Al cap de 15 minuts",
"hour1": "Al cap d'1 hora",
"sec15": "Al cap de 15 segons (depuraciรณ)"
}
},
"customWords": {
"title": "Paraules personalitzades",
"description": "Ajudeu els models compatibles a reconรจixer noms i termes especialitzats. Actualment, la correcciรณ per similitu es limita a paraules amb lletres de la A a la Z i nรบmeros.",
"placeholder": "Afegiu una paraula",
"add": "Afegiu",
"remove": "Suprimiu {{word}}",
"duplicate": "ยซ{{word}}ยป ja existeix"
},
"voiceActivityDetection": {
"title": "Detecciรณ d'activitat de veu",
"description": "Filtra els silencis dels enregistraments. Els models compatibles amb la transcripciรณ en temps real utilitzen un marge final de detecciรณ de veu mรฉs llarg; si desactiveu la detecciรณ, s'enregistra l'ร udio sense filtrar."
},
"longFormChunking": {
"title": "Divisiรณ d'ร udio llarg",
"description": "Divideix els enregistraments llargs a les pauses abans de transcriure'ls, cosa que normalment millora el rendiment de la transcripciรณ."
},
"vadBackend": {
"title": "Motor de detecciรณ d'activitat de veu",
"description": "Trieu el detector utilitzat per filtrar els silencis. L'Earshot รฉs experimental; torneu al Silero si es corta la parla o es conserva el soroll.",
"options": {
"silero": "Silero",
"earshot": "Earshot"
}
},
"fillerWordRemoval": {
"title": "Elimina les falques",
"description": "Elimina les expressions de vacilยทlaciรณ habituals de les transcripcions. Desactiveu aquesta opciรณ per conservar-les."
},
"chineseScript": {
"title": "Escriptura xinesa",
"description": "Escriu les transcripcions en mandarรญ i cantonรจs amb carร cters simplificats o tradicionals. Els altres idiomes no es modifiquen.",
"options": {
"asTranscribed": "Tal com s'ha transcrit",
"simplified": "Simplificat",
"traditional": "Tradicional"
}
}
},
"postProcessing": {
"hotkey": {
"title": "Drecera de teclat"
},
"api": {
"title": "API",
"provider": {
"title": "Proveรฏdor",
"description": "Seleccioneu un proveรฏdor compatible amb OpenAI o Anthropic."
},
"apiFormat": {
"title": "Format de l'API",
"description": "Format de solยทlicitud que espera el punt de connexiรณ personalitzat.",
"options": {
"openai": "Compatible amb OpenAI (Chat Completions)",
"anthropic": "Anthropic Messages"
}
},
"appleIntelligence": {
"unavailable": "L'Apple Intelligence no estร disponible en aquest dispositiu. Cal un Mac amb Apple Silicon i macOS Tahoe (26.0) o posterior, amb l'Apple Intelligence activada a la configuraciรณ del sistema."
},
"baseUrl": {
"title": "URL de base",
"description": "URL de base de l'API del proveรฏdor seleccionat. Nomรฉs es pot editar la del proveรฏdor personalitzat.",
"placeholder": "https://api.openai.com/v1",
"placeholderAnthropic": "https://api.anthropic.com/v1"
},
"apiKey": {
"title": "Clau de l'API",
"description": "Clau de l'API del proveรฏdor seleccionat.",
"placeholder": "sk-..."
},
"model": {
"title": "Model",
"descriptionCustom": "Introduรฏu l'identificador de model que espera el punt de connexiรณ personalitzat.",
"descriptionDefault": "Trieu un model ofert pel proveรฏdor seleccionat.",
"placeholderWithOptions": "Cerqueu o seleccioneu un model",
"placeholderNoOptions": "Escriviu el nom d'un model",
"refreshModels": "Actualitzeu els models"
}
},
"prompts": {
"title": "Indicaciรณ",
"selectedPrompt": {
"title": "Indicaciรณ seleccionada",
"description": "Seleccioneu una plantilla per millorar les transcripcions o creeu-ne una de nova. Utilitzeu ${output} dins del text de la indicaciรณ per fer referรจncia a la transcripciรณ enregistrada."
},
"noPrompts": "No hi ha indicacions disponibles",
"selectPrompt": "Seleccioneu una indicaciรณ",
"createNew": "Creeu una indicaciรณ nova",
"promptLabel": "Nom de la indicaciรณ",
"promptLabelPlaceholder": "Introduรฏu el nom de la indicaciรณ",
"promptInstructions": "Instruccions de la indicaciรณ",
"promptInstructionsPlaceholder": "Escriviu les instruccions que s'executaran desprรฉs de la transcripciรณ. Exemple: Millora la gramร tica i la claredat del text segรผol: ${output}",
"promptTip": "Consell: utilitzeu ${output} per inserir el text transcrit a la indicaciรณ.",
"updatePrompt": "Actualitzeu la indicaciรณ",
"deletePrompt": "Suprimiu la indicaciรณ",
"createPrompt": "Creeu la indicaciรณ",
"cancel": "Cancelยทleu",
"selectToEdit": "Seleccioneu una indicaciรณ more amunt per veure'n i editar-ne els detalls.",
"createFirst": "Feu clic a ยซCreeu una indicaciรณ novaยป mรฉs amunt per crear la primera indicaciรณ de postprocessament."
}
},
"history": {
"title": "Historial",
"openFolder": "Obriu la carpeta d'enregistraments",
"loading": "S'estร carregant l'historial...",
"empty": "Encara no hi ha transcripcions. Comenceu a enregistrar per crear l'historial!",
"copyToClipboard": "Copia la transcripciรณ al porta-retalls",
"copyError": "No s'ha pogut copiar la transcripciรณ al porta-retalls.",
"save": "Desa la transcripciรณ",
"unsave": "Treu de les desades",
"delete": "Suprimeix l'entrada",
"deleteError": "No s'ha pogut suprimir l'entrada. Torneu-ho a provar.",
"retranscribe": "Torneu a transcriure",
"retranscribeError": "No s'ha pogut tornar a transcriure. Torneu-ho a provar.",
"transcribing": "S'estร transcrivint...",
"transcriptionFailed": "La transcripciรณ ha fallat. Podeu tornar a transcriure amb la icona de reintent."
},
"debug": {
"title": "Depuraciรณ",
"logDirectory": {
"title": "Directori de registres",
"description": "Ubicaciรณ on es desen els fitxers de registre"
},
"logLevel": {
"title": "Nivell de registre",
"description": "Establiu el nivell de detall dels registres"
},
"liveLogs": {
"title": "Registres en directe",
"description": "Mostra els registres de l'aplicaciรณ en temps real per diagnosticar problemes sense obrir el fitxer de registre. Nomรฉs es mostren els registres emesos mentre aquest tauler รฉs obert; es respecta el nivell de registre establert mรฉs amunt.",
"live": "En directe",
"paused": "En pausa",
"pause": "Pauseu",
"resume": "Repreneu",
"copied": "Copiat",
"lineCount": "{{count}} lรญnies",
"empty": "S'estan esperant registresโฆ Les entrades apareixeran aquรญ a mesura que l'aplicaciรณ les emeti."
},
"updateChecks": {
"label": "Comproveu si hi ha actualitzacions",
"description": "Comprova automร ticament si hi ha versions noves del Handy",
"lockedDescription": "Desactivat per la configuraciรณ del sistema (HANDY_DISABLE_UPDATER)"
},
"whatsNewPreview": {
"title": "Previsualitzaciรณ de les novetats",
"description": "Obre les รบltimes notes de la versiรณ incloses sense marcar-les com a llegides",
"button": "Previsualitzeu",
"noNotes": "No s'han trobat notes de la versiรณ incloses",
"error": "No s'han pogut previsualitzar les notes de la versiรณ"
},
"onboardingPreview": {
"title": "Previsualitzaciรณ de la configuraciรณ inicial",
"description": "Previsualitza les pantalles de configuraciรณ inicial sense canviar els permisos, os models ni l'estat de compleciรณ",
"permissionsButton": "Permisos",
"modelsButton": "Selecciรณ del model",
"exitButton": "Sortiu de la previsualitzaciรณ"
},
"soundTheme": {
"label": "Tema de so",
"description": "Trieu un tema de so per als avisos d'inici i d'aturada de l'enregistrament"
},
"wordCorrectionThreshold": {
"title": "Llindar de correcciรณ de paraules",
"description": "Sensibilitat de les correccions de paraules personalitzades"
},
"historyLimit": {
"title": "Lรญmit de l'historial",
"description": "Nombre mร xim d'entrades de l'historial que es conservaran",
"entries": "entrades"
},
"recordingRetention": {
"title": "Supressiรณ automร tica d'enregistraments",
"description": "Suprimeix automร ticament els enregistraments antics per estalviar espai",
"never": "Mai",
"preserveLimit": "Conserva els รบltims {{count}}",
"days3": "Al cap de 3 dies",
"weeks2": "Al cap de 2 setmanes",
"months3": "Al cap de 3 mesos",
"placeholder": "Selecciona el perรญode de conservaciรณ..."
},
"alwaysOnMicrophone": {
"label": "Micrรฒfon sempre actiu",
"description": "Mantรฉn el micrรฒfon actiu per respondre mรฉs de pressa"
},
"clamshellMicrophone": {
"title": "Micrรฒfon amb la tapa tancada",
"description": "Micrรฒfon que s'utilitzarร quan la tapa del portร til estigui tancada"
},
"postProcessingToggle": {
"label": "Postprocessament",
"description": "Activa la millora del text amb IA desprรฉs de la transcripciรณ"
},
"muteWhileRecording": {
"label": "Silencia durant l'enregistrament",
"description": "Silencia l'ร udio del sistema durant l'enregistrament"
},
"appendTrailingSpace": {
"label": "Afegiu un espai al final",
"description": "Afegeix un espai aprรจs de la transcripciรณ enganxada"
},
"keyboardImplementation": {
"title": "Implementaciรณ del teclat",
"description": "Tria el motor de dreceres de teclat.",
"bindingsReset": "Les dreceres de teclat eren incompatibles i s'han restablert als valors per defecte"
},
"paths": {
"appData": "Dades de l'aplicaciรณ:",
"models": "Models:",
"settings": "Configuraciรณ:"
},
"pasteDelay": {
"title": "Retard abans d'enganxar",
"description": "Retard (en milยทlisegons) desprรฉs de copiar el text i abans d'enviar la combinaciรณ de tecles per enganxar-lo. Augmenteu-lo si no s'enganxa res."
},
"pasteDelayAfter": {
"title": "Retard aprรจs d'enganxar",
"description": "Retard (en milยทlisegons) desprรฉs d'enviar la combinaciรณ de tecles per enganxar i abans de restaurar el porta-retalls anterior. Augmenteu-lo si s'enganxa el contingut antic del porta-retalls en lloc de la transcripciรณ."
},
"holdThreshold": {
"title": "Llindar de pulsaciรณ llarga",
"description": "Nomรฉs en mode automร tic: temps (en milยทlisegons) que cal mantenir premuda la drecera perquรจ es consideri una pulsaciรณ llarga en lloc d'una de breu. Reduรฏu-lo si les pulsacions llargues curtes deixen l'enregistrament actiu; augmenteu-lo si les pulsacions breus intencionades es tracten com a llargues."
},
"reliablePaste": {
"title": "Enganxament fiable (beta)",
"description": "Restaura el porta-retalls nomรฉs quan l'aplicaciรณ de destinaciรณ ha llegit la transcripciรณ, en lloc de fer-ho desprรฉs d'un retard fix. Pensat per evitar que s'enganxi el contingut antic del porta-retalls quan el sistema estร carregat. Requereix un mรจtode d'enganxament amb el porta-retalls; nomรฉs al macOS i al Windows."
},
"recordingBuffer": {
"title": "Marge addicional d'enregistrament",
"description": "Temps addicional (en milยทlisegons) durant el qual es continua enregistrant desprรฉs de deixar anar la tecla per capturar l'ร udio final. 0 = sense marge addicional."
},
"keyboardDiagnostic": {
"title": "Diagnรฒstic del teclat",
"description": "Comprova si els esdeveniments del teclat arriben al Handy. Nomรฉs se'n registra el recompte, mai les tecles que premeu.",
"run": "Executa un diagnรฒstic de 10 s",
"running": "S'estร escoltantโฆ prema la drecera unes quantes vegades (p. ex., Option+Space)",
"secureInputLabel": "Entrada segura",
"enabled": "activada",
"disabled": "desactivada",
"holder": "en รบs per {{name}} (pid {{pid}})",
"holderUnknown": "cap procรฉs responsable visible",
"keyDown": "Tecla premuda",
"keyUp": "Tecla alliberada",
"flagsChanged": "Modificadors",
"mouse": "Ratolรญ",
"verdictBlocked": "L'entrada segura bloca els esdeveniments de tecla. Les dreceres amb tecles no poden funcionar fins que es resolgui.",
"verdictSuspicious": "Han arribat esdeveniments de modificadors, perรฒ no de tecles. Alguna cosa suprimeix les tecles tot i que l'entrada segura consta com a desactivada. Informeu-ne al GitHub.",
"verdictOk": "Els esdeveniments de tecla arriben al Handy amb normalitat.",
"verdictNoEvents": "No s'ha capturat cap esdeveniment. Heu premut alguna tecla durant la prova?",
"failed": "El diagnรฒstic ha fallat: {{error}}"
}
},
"about": {
"title": "Quant a",
"version": {
"title": "Versiรณ",
"description": "Versiรณ actual del Handy"
},
"whatsNewUpdates": {
"label": "Mostra les novetats",
"description": "Mostra les notes de la versiรณ desprรฉs d'actualitzar el Handy"
},
"appDataDirectory": {
"title": "Directori de dades de l'aplicaciรณ",
"description": "Ubicaciรณ on el Handy desa les dades"
},
"sourceCode": {
"title": "Codi font",
"description": "Consulta el codi font i colยทlaboreu-hi",
"button": "Mostra al GitHub"
},
"supportDevelopment": {
"title": "Dona suport al desenvolupament",
"description": "Ajudeu-nos a continuar desenvolupant el Handy",
"button": "Feu una donaciรณ"
},
"acknowledgments": {
"title": "Agraรฏments",
"ggml": {
"title": "ggml",
"description": "Biblioteca de tensors d'alt rendiment per a la inferรจncia d'aprenentatge automร tic al dispositiu",
"details": "La transcripciรณ local de veu a text del Handy es basa en el transcribe.cpp i el ggml. Grร cies a la gran feina de Georgi Gerganov i dels colยทlaboradors."
}
}
}
},
"footer": {
"checkingUpdates": "S'estร comprovant si hi ha actualitzacions...",
"updateAvailableShort": "Hi ha una actualitzaciรณ disponible",
"upToDate": "Actualitzat",
"updateCheckingDisabled": "Comprovaciรณ d'actualitzacions desactivada",
"downloading": "S'estร baixant... {{progress}}%",
"installing": "S'estร instalยทlant...",
"preparing": "S'estร preparant...",
"checkForUpdates": "Comprova si hi ha actualitzacions",
"portableUpdateTitle": "Cal actualitzar manualment",
"portableUpdateMessage": "Les instalยทlacions portables no es poden actualitzar automร ticament. Baixa l'instalยทlador per al vostre sistema a continuaciรณ, executeu-lo i instalยทleu-lo a la mateixa carpeta. La carpeta Data/ (configuraciรณ, models i enregistraments) es conserva.",
"portableUpdateButton": "Baixa l'instalยทlador",
"portableUpdateBrowseMessage": "Les instalยทlacions portables no es poden actualitzar automร ticament. Baixa l'รบltima versiรณ per al vostre sistema des de GitHub Releases i instalยทleu-la a la mateixa carpeta. La carpeta Data/ (configuraciรณ, models i enregistraments) es conserva.",
"portableUpdateBrowseButton": "Obriu GitHub Releases"
},
"whatsNew": {
"title": "Novetats del Handy v{{version}}"
},
"common": {
"loading": "S'estร carregant...",
"delete": "Suprimeix",
"back": "Enrere",
"close": "Tanca",
"open": "Obre",
"copy": "Copia",
"clear": "Neteja",
"noOptionsFound": "No s'ha trobat cap opciรณ"
},
"accessibility": {
"permissionsDescription": "El Handy necessita permisos d'accessibilitat per escriure el text transcrit.",
"openSettings": "Obriu la configuraciรณ del sistema"
},
"errors": {
"loadDirectory": "Error en carregar el directori: {{error}}",
"micPermissionDeniedTitle": "Accรฉs al micrรฒfon denegat",
"micPermissionDenied": {
"generic": "El sistema operatiu ha denegat l'accรฉs al micrรฒfon. Concediu el permรญs del micrรฒfon a la configuraciรณ del sistema.",
"windows": "Activa l'accรฉs al micrรฒfon a Configuraciรณ โ Privadesa i seguretat โ Micrรฒfon (inclรฒs l'accรฉs de les aplicacions d'escriptori).",
"macos": "Concediu l'accรฉs al micrรฒfon a Configuraciรณ del sistema โ Privadesa i seguretat โ Micrรฒfon.",
"linux": "Concediu l'accรฉs al micrรฒfon a la configuraciรณ de so o de privadesa del sistema."
},
"noInputDeviceTitle": "No s'ha trobat cap micrรฒfon",
"noInputDevice": "No s'ha detectat cap dispositiu d'entrada d'ร udio. Connecteu un micrรฒfon o uns auriculars amb micrรฒfon i torneu-ho a provar.",
"recordingFailed": "No s'ha pogut iniciar l'enregistrament: {{error}}",
"modelLoadFailed": "No s'ha pogut carregar el model: {{model}}",
"modelLoadFailedUnknown": "model desconegut",
"pasteFailedTitle": "No s'ha pogut enganxar el text",
"pasteFailed": "No s'ha pogut enganxar el text a l'aplicaciรณ activa.",
"transcriptionFailedTitle": "La transcripciรณ ha fallat"
},
"appLanguage": {
"title": "Llengua de l'aplicaciรณ",
"description": "Canvia la llengua de la interfรญcie del Handy"
},
"theme": {
"title": "Tema de l'aplicaciรณ",
"description": "Tria si el Handy segueix el tema del sistema o es mantรฉ en mode clar o fosc",
"options": {
"system": "Sistema",
"light": "Clar",
"dark": "Fosc"
}
},
"overlay": {
"transcribing": "S'estร transcrivint...",
"processing": "S'estร processant...",
"loadingModel": "S'estร carregant el model..."
},
"secureInput": {
"blockedWithCulprit_one": "{{name}} pot estar blocant 1 drecera",
"blockedWithCulprit_other": "{{name}} pot estar blocant {{count}} dreceres",
"blockedNoCulprit_one": "El macOS estร blocant temporalment 1 drecera",
"blockedNoCulprit_other": "El macOS estร blocant temporalment {{count}} dreceres",
"recorderBlockedWithCulprit": "{{name}} pot estar blocant els canvis de dreceres",
"recorderBlockedNoCulprit": "El macOS estร blocant temporalment els canvis de dreceres",
"learnMore": "Com es resol",
"recorderBlocked": "Ara no se'n poden enregistrar dreceres: l'entrada segura del macOS bloca els esdeveniments de tecla. Resol primer l'avรญs d'entrada segura.",
"dismiss": "Descarta"
}
}
File: src/i18n/locales/cs/translation.json
{
"tray": {
"settings": "Nastavenรญ...",
"checkUpdates": "Zkontrolovat aktualizace...",
"copyLastTranscript": "Zkopรญrovat poslednรญ pลepis",
"unloadModel": "Uvolnit model",
"model": "Model",
"quit": "Ukonฤit",
"cancel": "Zruลกit",
"secureInputWarning": "โ Zkratky blokuje Secure Input"
},
"sidebar": {
"general": "Obecnรฉ",
"models": "Modely",
"advanced": "Pokroฤilรฉ",
"postProcessing": "Nรกslednรฉ zpracovรกnรญ",
"history": "Historie",
"debug": "Ladฤnรญ",
"about": "O aplikaci"
},
"onboarding": {
"subtitle": "Pro zaฤรกtek vyberte model pro pลepis",
"existingModelsTitle": "Kompatibilnรญ modely",
"downloadModelsTitle": "Dostupnรฉ ke staลพenรญ",
"showAllModels": "Zobrazit vลกech {{total}} modelลฏ",
"showFewerModels": "Zobrazit mรฉnฤ modelลฏ",
"recommended": "Doporuฤeno",
"customModelDescription": "Oficiรกlnฤ nepodporovรกno",
"migration": {
"title": "Vaลกe modely potลebujรญ aktualizaci",
"description": "Handy nynรญ pouลพรญvรก novฤjลกรญ typ modelลฏ. Stรกhnฤte si novou verzi, abyste mohli dรกl pลepisovat. Starรฉ verze budou odstranฤny.",
"replaces": "Nahrazuje {{name}}",
"oldFormat": "Starรฝ formรกt",
"failed": "Stahovรกnรญ selhalo",
"retry": "Zkusit znovu",
"chooseAnother": "Vybrat jinรฝ model",
"download": "Stรกhnout modely ({{size}})",
"continue": "Pokraฤovat",
"timeRemaining": "Zbรฝvรก {{time}}"
},
"modelCard": {
"accuracy": "pลesnost",
"speed": "rychlost"
},
"models": {
"small": {
"name": "Whisper Small",
"description": "Rychlรฝ a pomฤrnฤ pลesnรฝ."
},
"medium": {
"name": "Whisper Medium",
"description": "Dobrรก pลesnost, stลednรญ rychlost"
},
"turbo": {
"name": "Whisper Turbo",
"description": "Vyvรกลพenรก pลesnost a rychlost."
},
"large": {
"name": "Whisper Large",
"description": "Dobrรก pลesnost, ale pomalรฝ."
},
"breeze-asr": {
"name": "Breeze ASR",
"description": "Optimalizovรกno pro tchajwanskou mandarรญnลกtinu. Podpora pลepรญnรกnรญ jazykลฏ."
}
},
"errors": {
"selectModel": "Nepodaลilo se vybrat model"
},
"permissions": {
"title": "Vyลพadovรกna oprรกvnฤnรญ",
"description": "Handy potลebuje nฤkolik oprรกvnฤnรญ pro sprรกvnรฉ fungovรกnรญ.",
"microphone": {
"title": "Pลรญstup k mikrofonu",
"description": "Potลebnรฝ pro zachycenรญ vaลกeho hlasu k pลepisu."
},
"accessibility": {
"title": "Pลรญstup k usnadnฤnรญ",
"description": "Potลebnรฝ pro psanรญ pลepsanรฉho textu do vaลกich aplikacรญ."
},
"grant": "Udฤlit oprรกvnฤnรญ",
"granted": "Udฤleno",
"waiting": "ฤekรกnรญ...",
"allGranted": "Vลกe pลipraveno!",
"errors": {
"checkFailed": "Nepodaลilo se zkontrolovat oprรกvnฤnรญ. Zkuste to prosรญm znovu.",
"requestFailed": "Nepodaลilo se poลพรกdat o oprรกvnฤnรญ. Zkuste to prosรญm znovu."
}
}
},
"modelSelector": {
"custom": "Vlastnรญ",
"streaming": "Streaming",
"active": "Aktivnรญ",
"noModelsAvailable": "Nejsou dostupnรฉ ลพรกdnรฉ modely",
"verifying": "Ovฤลovรกnรญ {{modelName}}...",
"verifyingGeneric": "Ovฤลovรกnรญ...",
"downloading": "Stahovรกnรญ {{percentage}}%",
"downloadingMultiple": "Stahovรกnรญ {{count}} modelลฏ...",
"modelReady": "Model pลipraven",
"loading": "Naฤรญtรกm {{modelName}}...",
"loadingGeneric": "Naฤรญtรกnรญ...",
"modelError": "Chyba modelu",
"modelUnloaded": "Model uvolnฤn",
"noModelDownloadRequired": "ลฝรกdnรฝ model - je nutnรฉ stรกhnout",
"deleteModel": "Smazat {{modelName}}",
"switching": "Pลepรญnรกnรญ...",
"downloadSpeed": "{{speed}} MB/s",
"capabilities": {
"languageSelection": "Podporuje vรญce vstupnรญch jazykลฏ",
"languageCount": "{{total}} jazykลฏ",
"translation": "Umรญ pลeklรกdat do angliฤtiny",
"translate": "Pลeloลพit do angliฤtiny",
"singleLanguage": "Podporuje pouze tento jazyk",
"languageOnly": "Pouze {{language}}",
"streaming": "Zobrazuje pลepis ลพivฤ, jak mluvรญte"
},
"cancel": "Zruลกit",
"cancelDownload": "Zruลกit stahovรกnรญ",
"legacy": "Zastaralรฉ"
},
"settings": {
"modelSettings": {
"title": "Nastavenรญ {{model}}"
},
"models": {
"title": "Modely pลepisu",
"description": "Vyberte model pลepisu nebo stรกhnฤte dalลกรญ modely. Rลฏznรฉ modely nabรญzejรญ rลฏznรฉ รบrovnฤ pลesnosti a rychlosti.",
"deleteConfirm": "Opravdu chcete smazat {{modelName}}? Pro opฤtovnรฉ pouลพitรญ jej budete muset znovu stรกhnout.",
"deleteActiveConfirm": "{{modelName}} je vรกลก aktivnรญ model. Jeho smazรกnรญm se zastavรญ pลepisy, dokud nevyberete novรฝ model. Opravdu chcete pokraฤovat?",
"deleteTitle": "Smazat model",
"retiredNotice": {
"title": "Starรฉ modely uลพ s Handy nefungujรญ",
"description": "Zabรญrajรญ {{size}} na vaลกem poฤรญtaฤi.",
"delete": "Smazat modely",
"deleted": "Starรฉ modely byly smazรกny",
"deleteFailed": "Nฤkterรฉ starรฉ modely se nepodaลilo smazat. Podrobnosti najdete v protokolu."
},
"filters": {
"allLanguages": "Vลกechny jazyky",
"streaming": "Filtrovat modely podporujรญcรญ ลพivรฝ pลepis",
"translation": "Filtrovat modely podporujรญcรญ pลeklad do angliฤtiny"
},
"noModelsMatch": "Tomuto filtru neodpovรญdajรญ ลพรกdnรฉ modely.",
"yourModels": "Staลพenรฉ modely",
"availableModels": "Dostupnรฉ ke staลพenรญ",
"searchPlaceholder": "Hledat modely podle nรกzvuโฆ",
"rescan": {
"label": "Znovu prohledat",
"tooltip": "Znovu prohledat modely pลidanรฉ do sloลพky modelลฏ nebo mezipamฤti Hugging Face mimo Handy"
}
},
"general": {
"title": "Obecnรฉ",
"shortcut": {
"title": "Zkratky Handy",
"description": "Nastavte klรกvesovรฉ zkratky pro spuลกtฤnรญ nahrรกvรกnรญ ลeฤi na text",
"loading": "Naฤรญtรกm zkratky...",
"none": "ลฝรกdnรฉ zkratky nejsou nastavenรฉ",
"notFound": "Zkratka nenalezena",
"pressKeys": "Stisknฤte klรกvesy...",
"bindings": {
"transcribe": {
"name": "Zkratka pลepisu",
"description": "Klรกvesovรก zkratka pro nahrรกvรกnรญ a pลepis vaลกeho hlasu."
},
"cancel": {
"name": "Zkratka zruลกenรญ",
"description": "Klรกvesovรก zkratka pro zruลกenรญ aktuรกlnรญho nahrรกvรกnรญ."
},
"transcribe_with_post_process": {
"name": "Klรกvesa pro nรกslednรฉ zpracovรกnรญ",
"description": "Volitelnรฉ: Vyhrazenรก klรกvesovรก zkratka, kterรก vลพdy pouลพije AI nรกslednรฉ zpracovรกnรญ na vรกลก pลepis."
}
},
"errors": {
"restore": "Nepodaลilo se obnovit pลฏvodnรญ zkratku",
"set": "Nepodaลilo se nastavit zkratku: {{error}}",
"reset": "Nepodaลilo se vrรกtit zkratku na pลฏvodnรญ hodnotu"
}
},
"language": {
"title": "Jazyk",
"description": "Vyberte jazyk rozpoznรกvรกnรญ ลeฤi. Auto jazyk urฤรญ automaticky, zatรญmco vรฝbฤr konkrรฉtnรญho jazyka mลฏลพe zlepลกit pลesnost.",
"searchPlaceholder": "Hledat jazyky...",
"noResults": "ลฝรกdnรฉ jazyky nenalezeny",
"auto": "Automaticky"
},
"shortcutActivation": {
"title": "Chovรกnรญ zkratky",
"description": "Zvolte, jak mรก zkratka pลepisu spouลกtฤt a zastavovat nahrรกvรกnรญ.",
"options": {
"holdOrToggle": "Automaticky",
"pushToTalk": "Podrลพet",
"toggle": "Pลepรญnat"
},
"descriptions": {
"hold_or_toggle": "Podrลพte pro nahrรกvรกnรญ nebo klepnฤte pro pลepnutรญ",
"push_to_talk": "Nahrรกvรก, dokud drลพรญte zkratku",
"toggle": "Klepnฤte na zkratku pro zahรกjenรญ nahrรกvรกnรญ, klepnฤte znovu pro zastavenรญ"
}
}
},
"sound": {
"title": "Zvuk",
"microphone": {
"title": "Mikrofon",
"description": "Vyberte preferovanรฉ zaลรญzenรญ mikrofonu",
"placeholder": "Vyberte mikrofon...",
"loading": "Naฤรญtรกnรญ..."
},
"channel": {
"title": "Vstupnรญ kanรกl",
"description": "Vyberte vstupnรญ kanรกl, ze kterรฉho se mรก nahrรกvat. Tuto moลพnost pouลพijte, pokud mรก vaลกe zvukovรฉ rozhranรญ vรญce vstupลฏ.",
"average": "Prลฏmฤr vลกech kanรกlลฏ",
"channel": "Kanรกl {{n}}"
},
"audioFeedback": {
"label": "Zvukovรก odezva",
"description": "Pลehrรกt zvuk pลi zahรกjenรญ a ukonฤenรญ nahrรกvรกnรญ"
},
"outputDevice": {
"title": "Vรฝstupnรญ zaลรญzenรญ",
"description": "Vyberte preferovanรฉ vรฝstupnรญ zaลรญzenรญ pro zvuky odezvy",
"placeholder": "Vyberte vรฝstupnรญ zaลรญzenรญ...",
"loading": "Naฤรญtรกnรญ..."
},
"volume": {
"title": "Hlasitost",
"description": "Upravte hlasitost zvukovรฉ odezvy"
}
},
"advanced": {
"groups": {
"app": "Aplikace",
"output": "Vรฝstup",
"transcription": "Pลepis",
"history": "Historie",
"experimental": "Experimentรกlnรญ"
},
"experimentalToggle": {
"label": "Experimentรกlnรญ funkce",
"description": "Povolit experimentรกlnรญ funkce, kterรฉ jsou stรกle ve vรฝvoji."
},
"lazyStreamClose": {
"label": "Ponechat mikrofon zapnutรฝ mezi pลepisy",
"description": "Ponechรก stream mikrofonu otevลenรฝ po dobu 30 sekund po zastavenรญ nahrรกvรกnรญ, ฤรญmลพ se snรญลพรญ latence pลi opakovanรฉm pลepisu. Mลฏลพe zhorลกit kvalitu zvuku Bluetooth."
},
"acceleration": {
"transcribe": {
"title": "Hardwarovรก akcelerace",
"description": "Vyberte hardware, kterรฝ se pouลพije pro pลepis. Automatickรฝ reลพim pouลพรญvรก GPU, pokud je k dispozici, jinak pลejde na CPU."
},
"gpuDevice": {
"auto": "Automaticky"
}
},
"startHidden": {
"label": "Spouลกtฤt skrytฤ",
"description": "Spustit do systรฉmovรฉ liลกty bez otevลenรญ okna."
},
"autostart": {
"label": "Spouลกtฤt pลi startu",
"description": "Automaticky spustit Handy po pลihlรกลกenรญ do poฤรญtaฤe."
},
"showTrayIcon": {
"label": "Zobrazit ikonu v systรฉmovรฉ liลกtฤ",
"description": "Zobrazit ikonu Handy v systรฉmovรฉ liลกtฤ."
},
"overlay": {
"style": {
"title": "Pลekryv",
"description": "Vyberte pลekryv pลi nahrรกvรกnรญ: โลฝรกdnรฉโ jej skryje, โMinimรกlnรญโ zobrazรญ kompaktnรญ indikรกtor, โลฝivฤโ zobrazuje pลepis v reรกlnรฉm ฤase, kdyลพ mluvรญte (pouze modely podporujรญcรญ streaming โ hledejte odznak โStreamingโ ve vรฝbฤru modelลฏ). Na Linuxu se doporuฤuje โลฝรกdnรฉโ.",
"options": {
"none": "ลฝรกdnรฉ",
"minimal": "Minimรกlnรญ",
"live": "ลฝivฤ"
}
},
"position": {
"title": "Pozice pลekryvu",
"description": "Zobrazovat vizuรกlnรญ pลekryv bฤhem nahrรกvรกnรญ a pลepisu. Na Linuxu je doporuฤeno 'ลฝรกdnรฉ'.",
"options": {
"bottom": "Dole",
"top": "Nahoลe"
}
}
},
"pasteMethod": {
"title": "Zpลฏsob vloลพenรญ",
"description": "Vyberte, jak se text vklรกdรก. Pลรญmรฉ: simuluje psanรญ pลes systรฉmovรฝ vstup. ลฝรกdnรฉ: pลeskoฤรญ vloลพenรญ a aktualizuje pouze historii/schrรกnku.",
"options": {
"clipboard": "Schrรกnka ({{modifier}}+V)",
"clipboardCtrlShiftV": "Schrรกnka (Ctrl+Shift+V)",
"clipboardShiftInsert": "Schrรกnka (Shift+Insert)",
"direct": "Pลรญmรฉ",
"none": "ลฝรกdnรฉ",
"externalScript": "Externรญ skript"
},
"externalScriptPlaceholder": "/cesta/k/vasemu/skriptu.sh"
},
"typingTool": {
"title": "Nรกstroj pro psanรญ",
"description": "Vyberte, kterรฝ linuxovรฝ nรกstroj pro psanรญ pouลพรญt pro metodu pลรญmรฉho vloลพenรญ. Auto automaticky zjistรญ a pouลพije nejlepลกรญ dostupnรฝ nรกstroj pro vรกลก systรฉm.",
"options": {
"auto": "Auto (Doporuฤeno)"
}
},
"clipboardHandling": {
"title": "Prรกce se schrรกnkou",
"description": "'Nemฤnit schrรกnku' zachovรก po pลepisu aktuรกlnรญ obsah schrรกnky. 'Kopรญrovat do schrรกnky' ponechรก po vloลพenรญ vรฝsledek pลepisu ve schrรกnce.",
"options": {
"dontModify": "Nemฤnit schrรกnku",
"copyToClipboard": "Kopรญrovat do schrรกnky"
}
},
"autoSubmit": {
"title": "Automatickรฉ odeslรกnรญ",
"description": "Automaticky odeลกle vybranou kombinaci klรกves po vloลพenรญ textu. Cmd+Enter platรญ pro macOS, zatรญmco Windows/Linux pouลพรญvajรญ Super+Enter.",
"options": {
"off": "Vypnuto",
"enter": "Enter",
"cmdEnter": "Cmd+Enter",
"superEnter": "Super+Enter",
"ctrlEnter": "Ctrl+Enter"
}
},
"translateToEnglish": {
"label": "Pลeklรกdat do angliฤtiny",
"description": "Bฤhem pลepisu automaticky pลeklรกdat ลeฤ z jinรฝch jazykลฏ do angliฤtiny."
},
"modelUnload": {
"title": "Uvolnฤnรญ modelu",
"description": "Automaticky uvolnit pamฤลฅ GPU/CPU, kdyลพ model nebyl pouลพit po zadanou dobu",
"options": {
"never": "Nikdy",
"immediately": "Okamลพitฤ",
"min2": "Po 2 minutรกch",
"min5": "Po 5 minutรกch",
"min10": "Po 10 minutรกch",
"min15": "Po 15 minutรกch",
"hour1": "Po 1 hodinฤ",
"sec15": "Po 15 sekundรกch (Debug)"
}
},
"customWords": {
"title": "Vlastnรญ slova",
"description": "Pomozte podporovanรฝm modelลฏm rozpoznรกvat jmรฉna a odbornรฉ termรญny. Pลibliลพnรฉ opravy jsou v souฤasnosti omezeny na slova obsahujรญcรญ pรญsmena AโZ a ฤรญslice.",
"placeholder": "Pลidat slovo",
"add": "Pลidat",
"remove": "Odebrat {{word}}",
"duplicate": ""{{word}}" jiลพ existuje"
},
"voiceActivityDetection": {
"title": "Detekce hlasovรฉ aktivity",
"description": "Odfiltruje ticho z nahrรกvek. Modely podporujรญcรญ streaming pouลพรญvajรญ delลกรญ dobฤh VAD; vypnutรญ VAD nahrรกvรก surovรฝ zvuk."
},
"longFormChunking": {
"title": "Dฤlenรญ dlouhรฉho zvuku",
"description": "Pลed pลepisem rozdฤlรญ dlouhรฉ nahrรกvky v pauzรกch, coลพ obvykle zlepลกuje kvalitu pลepisu."
},
"vadBackend": {
"title": "Backend detekce hlasu",
"description": "Vyberte detektor pouลพรญvanรฝ k filtrovรกnรญ ticha. Earshot je experimentรกlnรญ; pokud je ลeฤ oลezรกvรกna nebo zลฏstรกvรก ลกum, pลepnฤte zpฤt na Silero.",
"options": {
"silero": "Silero",
"earshot": "Earshot"
}
},
"fillerWordRemoval": {
"title": "Odstranit vรฝplลovรก slova",
"description": "Odstraลuje bฤลพnรก slova vyjadลujรญcรญ vรกhรกnรญ z pลepisลฏ. Vypnutรญm je zachovรกte."
},
"chineseScript": {
"title": "ฤรญnskรฉ pรญsmo",
"description": "Zapisuje pลepisy v mandarรญnลกtinฤ a kantonลกtinฤ zjednoduลกenรฝmi nebo tradiฤnรญmi znaky. Ostatnรญ jazyky zลฏstรกvajรญ beze zmฤny.",
"options": {
"asTranscribed": "Jak bylo pลepsรกno",
"simplified": "Zjednoduลกenรฉ",
"traditional": "Tradiฤnรญ"
}
}
},
"postProcessing": {
"hotkey": {
"title": "Klรกvesovรก zkratka"
},
"api": {
"title": "API",
"provider": {
"title": "Poskytovatel",
"description": "Vyberte poskytovatele kompatibilnรญho s OpenAI nebo Anthropic."
},
"apiFormat": {
"title": "Formรกt API",
"description": "Formรกt poลพadavku oฤekรกvanรฝ vaลกรญm vlastnรญm endpointem.",
"options": {
"openai": "Kompatibilnรญ s OpenAI (Chat Completions)",
"anthropic": "Anthropic Messages"
}
},
"appleIntelligence": {
"unavailable": "Apple Intelligence nenรญ na tomto zaลรญzenรญ k dispozici. Vyลพaduje Mac s Apple Silicon a macOS Tahoe (26.0) nebo novฤjลกรญ a povolenรฉ Apple Intelligence v Nastavenรญ systรฉmu."
},
"baseUrl": {
"title": "Zรกkladnรญ URL",
"description": "Zรกkladnรญ URL API pro vybranรฉho poskytovatele. Upravitelnรฉ je pouze u vlastnรญho poskytovatele.",
"placeholder": "https://api.openai.com/v1",
"placeholderAnthropic": "https://api.anthropic.com/v1"
},
"apiKey": {
"title": "API klรญฤ",
"description": "API klรญฤ pro vybranรฉho poskytovatele.",
"placeholder": "sk-..."
},
"model": {
"title": "Model",
"descriptionCustom": "Zadejte identifikรกtor modelu oฤekรกvanรฝ vaลกรญm vlastnรญm endpointem.",
"descriptionDefault": "Vyberte model dostupnรฝ u vybranรฉho poskytovatele.",
"placeholderWithOptions": "Vyhledejte nebo vyberte model",
"placeholderNoOptions": "Zadejte nรกzev modelu",
"refreshModels": "Obnovit modely"
}
},
"prompts": {
"title": "Prompt",
"selectedPrompt": {
"title": "Vybranรฝ prompt",
"description": "Vyberte ลกablonu pro zpลesnฤnรญ pลepisu nebo vytvoลte novou. V textu promptu pouลพijte ${output} pro vloลพenรญ zachycenรฉho pลepisu."
},
"noPrompts": "Nejsou k dispozici ลพรกdnรฉ prompty",
"selectPrompt": "Vyberte prompt",
"createNew": "Vytvoลit novรฝ prompt",
"promptLabel": "Nรกzev promptu",
"promptLabelPlaceholder": "Zadejte nรกzev promptu",
"promptInstructions": "Instrukce promptu",
"promptInstructionsPlaceholder": "Napiลกte instrukce, kterรฉ se majรญ spustit po pลepisu. Pลรญklad: Zlepลกete gramatiku a srozumitelnost nรกsledujรญcรญho textu: ${output}",
"promptTip": "Tip: Pouลพijte ${output} pro vloลพenรญ pลepsanรฉho textu do promptu.",
"updatePrompt": "Aktualizovat prompt",
"deletePrompt": "Smazat prompt",
"createPrompt": "Vytvoลit prompt",
"cancel": "Zruลกit",
"selectToEdit": "Vyberte vรฝลกe prompt, abyste zobrazili a upravili jeho podrobnosti.",
"createFirst": "Kliknฤte nahoลe na 'Vytvoลit novรฝ prompt' a vytvoลte svลฏj prvnรญ prompt pro nรกslednรฉ zpracovรกnรญ."
}
},
"history": {
"title": "Historie",
"openFolder": "Otevลรญt sloลพku nahrรกvek",
"loading": "Naฤรญtรกm historii...",
"empty": "Zatรญm ลพรกdnรฉ pลepisy. Zaฤnฤte nahrรกvat a vytvoลte si historii!",
"copyToClipboard": "Kopรญrovat pลepis do schrรกnky",
"copyError": "Pลepis se nepodaลilo zkopรญrovat do schrรกnky.",
"save": "Uloลพit pลepis",
"unsave": "Odebrat z uloลพenรฝch",
"delete": "Smazat zรกznam",
"deleteError": "Nepodaลilo se smazat zรกznam. Zkuste to prosรญm znovu.",
"retranscribe": "Pลepsat znovu",
"retranscribeError": "Opฤtovnรฝ pลepis se nezdaลil. Zkuste to prosรญm znovu.",
"transcribing": "Pลepisuji...",
"transcriptionFailed": "Pลepis selhal. Mลฏลพete zkusit pลepis znovu pomocรญ ikony opakovรกnรญ."
},
"debug": {
"title": "Ladฤnรญ",
"logDirectory": {
"title": "Sloลพka protokolลฏ",
"description": "Umรญstฤnรญ, kde jsou uloลพeny soubory protokolu"
},
"logLevel": {
"title": "รroveล logovรกnรญ",
"description": "Nastavte รบroveล podrobnosti logovรกnรญ"
},
"liveLogs": {
"title": "ลฝivรฉ logy",
"description": "Sledujte logy aplikace v reรกlnรฉm ฤase a diagnostikujte problรฉmy bez otevรญrรกnรญ souboru logu. Zobrazujรญ se pouze logy vytvoลenรฉ, kdyลพ je tento panel otevลenรฝ; respektuje nastavenรญ รroveล logovรกnรญ vรฝลกe.",
"live": "ลฝivฤ",
"paused": "Pozastaveno",
"pause": "Pozastavit",
"resume": "Pokraฤovat",
"copied": "Zkopรญrovรกno",
"lineCount": "ลรกdkลฏ: {{count}}",
"empty": "ฤekรกnรญ na logyโฆ Zรกznamy se zde zobrazรญ, jakmile je aplikace vygeneruje."
},
"updateChecks": {
"label": "Kontrolovat aktualizace",
"description": "Automaticky kontrolovat novรฉ verze Handy",
"lockedDescription": "Zakรกzรกno systรฉmovou konfiguracรญ (HANDY_DISABLE_UPDATER)"
},
"soundTheme": {
"label": "Zvukovรฝ motiv",
"description": "Vyberte zvukovรฝ motiv pro odezvu pลi startu a ukonฤenรญ nahrรกvรกnรญ"
},
"wordCorrectionThreshold": {
"title": "Prรกh korekce slov",
"description": "Citlivost pro opravy vlastnรญch slov"
},
"historyLimit": {
"title": "Limit historie",
"description": "Maximรกlnรญ poฤet zรกznamลฏ historie k uchovรกnรญ",
"entries": "zรกznamลฏ"
},
"recordingRetention": {
"title": "Automatickรฉ mazรกnรญ nahrรกvek",
"description": "Automaticky mazat starรฉ nahrรกvky pro รบsporu mรญsta",
"never": "Nikdy",
"preserveLimit": "Ponechat poslednรญch {{count}}",
"days3": "Po 3 dnech",
"weeks2": "Po 2 tรฝdnech",
"months3": "Po 3 mฤsรญcรญch",
"placeholder": "Vyberte dobu uchovรกnรญ..."
},
"alwaysOnMicrophone": {
"label": "Vลพdy zapnutรฝ mikrofon",
"description": "Udrลพovat mikrofon aktivnรญ pro rychlejลกรญ odezvu"
},
"clamshellMicrophone": {
"title": "Mikrofon pลi zavลenรฉm vรญku",
"description": "Mikrofon, kterรฝ se pouลพije pลi zavลenรฉm vรญku notebooku"
},
"postProcessingToggle": {
"label": "Nรกslednรฉ zpracovรกnรญ",
"description": "Povolit AI vylepลกenรญ textu po pลepisu"
},
"muteWhileRecording": {
"label": "Ztlumit pลi nahrรกvรกnรญ",
"description": "Ztlumit systรฉmovรฝ zvuk bฤhem nahrรกvรกnรญ"
},
"appendTrailingSpace": {
"label": "Pลidat koncovou mezeru",
"description": "Pลidat mezeru po vloลพenรฉm pลepisu"
},
"keyboardImplementation": {
"title": "Implementace klรกvesnice",
"description": "Zvolte backend pro klรกvesovรฉ zkratky.",
"bindingsReset": "Klรกvesovรฉ zkratky byly nekompatibilnรญ a byly obnoveny na vรฝchozรญ hodnoty"
},
"paths": {
"appData": "Data aplikace:",
"models": "Modely:",
"settings": "Nastavenรญ:"
},
"pasteDelay": {
"title": "Zpoลพdฤnรญ vloลพenรญ (pลed)",
"description": "Zpoลพdฤnรญ (v milisekundรกch) po zkopรญrovรกnรญ textu, pลed odeslรกnรญm klรกvesy pro vloลพenรญ. Zvyลกte, pokud se nic nevloลพรญ."
},
"pasteDelayAfter": {
"title": "Zpoลพdฤnรญ vloลพenรญ (po)",
"description": "Zpoลพdฤnรญ (v milisekundรกch) po klรกvese pro vloลพenรญ, pลed obnovenรญm pลedchozรญ schrรกnky. Zvyลกte, pokud se mรญsto pลepisu vklรกdรก starรฝ obsah schrรกnky."
},
"holdThreshold": {
"title": "Prรกh podrลพenรญ",
"description": "Pouze v automatickรฉm reลพimu: jak dlouho (v milisekundรกch) musรญ bรฝt zkratka drลพena, aby se poฤรญtala jako podrลพenรญ mรญsto klepnutรญ. Sniลพte, pokud po krรกtkรฉm podrลพenรญ nahrรกvรกnรญ zลฏstรกvรก zapnutรฉ; zvyลกte, pokud jsou zรกmฤrnรก klepnutรญ vyhodnocena jako podrลพenรญ."
},
"reliablePaste": {
"title": "Spolehlivรฉ vloลพenรญ (Beta)",
"description": "Obnovรญ schrรกnku teprve potรฉ, co cรญlovรก aplikace skuteฤnฤ pลeฤte pลepis, mรญsto po pevnฤ danรฉm zpoลพdฤnรญ. Mรก odstranit vklรกdรกnรญ starรฉho obsahu schrรกnky pลi zatรญลพenรญ systรฉmu. Vyลพaduje zpลฏsob vloลพenรญ pลes schrรกnku; pouze macOS a Windows."
},
"recordingBuffer": {
"title": "Extra vyrovnรกvacรญ pamฤลฅ nahrรกvรกnรญ",
"description": "Extra ฤas (v milisekundรกch) pro pokraฤovรกnรญ nahrรกvรกnรญ po uvolnฤnรญ klรกvesy, pro zachycenรญ zbรฝvajรญcรญho zvuku. 0 = ลพรกdnรก extra vyrovnรกvacรญ pamฤลฅ."
},
"keyboardDiagnostic": {
"title": "Diagnostika klรกvesnice",
"description": "Ovฤลรญ, zda udรกlosti klรกvesnice dorazรญ do Handy. Zaznamenรกvรก se pouze poฤet udรกlostรญ โ nikdy to, kterรฉ klรกvesy stisknete.",
"run": "Spustit 10s diagnostiku",
"running": "Naslouchรกnรญโฆ nฤkolikrรกt stisknฤte svou zkratku (napล. Option+Space)",
"secureInputLabel": "Secure Input",
"enabled": "zapnuto",
"disabled": "vypnuto",
"holder": "drลพรญ ji {{name}} (pid {{pid}})",
"holderUnknown": "ลพรกdnรฝ viditelnรฝ drลพitel",
"keyDown": "Stisk klรกvesy",
"keyUp": "Uvolnฤnรญ klรกvesy",
"flagsChanged": "Modifikรกtory",
"mouse": "Myลก",
"verdictBlocked": "Secure Input blokuje udรกlosti klรกves โ zkratky obsahujรญcรญ bฤลพnou klรกvesu nemohou fungovat, dokud se to nevyลeลกรญ.",
"verdictSuspicious": "Dorazily udรกlosti modifikรกtorลฏ, ale ลพรกdnรฉ udรกlosti klรกves โ nฤco klรกvesy potlaฤuje, pลestoลพe Secure Input hlรกsรญ, ลพe je vypnutรฝ. Nahlaste to prosรญm na GitHubu.",
"verdictOk": "Udรกlosti klรกves dorazรญ do Handy normรกlnฤ.",
"verdictNoEvents": "Nebyly zachyceny ลพรกdnรฉ udรกlosti โ stiskli jste bฤhem testu nฤjakรฉ klรกvesy?",
"failed": "Diagnostika selhala: {{error}}"
},
"whatsNewPreview": {
"title": "Nรกhled novinek",
"description": "Otevลรญt nejnovฤjลกรญ pลibalenรฉ poznรกmky k vydรกnรญ bez oznaฤenรญ jako zobrazenรฉ",
"button": "Nรกhled",
"noNotes": "Nebyly nalezeny ลพรกdnรฉ pลibalenรฉ poznรกmky k vydรกnรญ",
"error": "Nepodaลilo se zobrazit nรกhled poznรกmek k vydรกnรญ"
},
"onboardingPreview": {
"title": "Nรกhled รบvodnรญho nastavenรญ",
"description": "Prohlรฉdnฤte si obrazovky รบvodnรญho nastavenรญ beze zmฤny oprรกvnฤnรญ, modelลฏ nebo stavu dokonฤenรญ",
"permissionsButton": "Oprรกvnฤnรญ",
"modelsButton": "Vรฝbฤr modelu",
"exitButton": "Ukonฤit nรกhled"
}
},
"about": {
"title": "O aplikaci",
"version": {
"title": "Verze",
"description": "Aktuรกlnรญ verze Handy"
},
"appDataDirectory": {
"title": "Adresรกล dat aplikace",
"description": "Umรญstฤnรญ, kde Handy uklรกdรก data"
},
"sourceCode": {
"title": "Zdrojovรฝ kรณd",
"description": "Zobrazit zdrojovรฝ kรณd a pลispฤt",
"button": "Zobrazit na GitHubu"
},
"supportDevelopment": {
"title": "Podpoลte vรฝvoj",
"description": "Pomozte nรกm pokraฤovat ve vรฝvoji Handy",
"button": "Pลispฤt"
},
"acknowledgments": {
"title": "Podฤkovรกnรญ",
"ggml": {
"title": "ggml",
"description": "Vysoce vรฝkonnรฉ inferenฤnรญ zpracovรกnรญ modelu automatickรฉho rozpoznรกvรกnรญ ลeฤi Whisper od OpenAI",
"details": "Handy pouลพรญvรก ggml pro rychlรฉ lokรกlnรญ zpracovรกnรญ ลeฤi na text. Dรญky skvฤlรฉ prรกci Georgiho Gerganova a pลispฤvatelลฏ."
}
},
"whatsNewUpdates": {
"label": "Zobrazovat novinky",
"description": "Zobrazovat poznรกmky k vydรกnรญ po aktualizacรญch Handy"
}
}
},
"footer": {
"checkingUpdates": "Kontroluji aktualizace...",
"updateAvailableShort": "Dostupnรก aktualizace",
"upToDate": "Vลกe aktuรกlnรญ",
"updateCheckingDisabled": "Kontrola aktualizacรญ vypnuta",
"downloading": "Stahovรกnรญ... {{progress}}%",
"installing": "Instalace...",
"preparing": "Pลรญprava...",
"checkForUpdates": "Zkontrolovat aktualizace",
"portableUpdateTitle": "Vyลพadovรกna ruฤnรญ aktualizace",
"portableUpdateMessage": "Pลenosnรฉ instalace nelze aktualizovat automaticky. Nรญลพe stรกhnฤte instalรกtor pro svลฏj systรฉm, spusลฅte jej a nainstalujte do stejnรฉ sloลพky โ vaลกe sloลพka Data/ (nastavenรญ, modely, nahrรกvky) zลฏstane na mรญstฤ.",
"portableUpdateButton": "Stรกhnout instalรกtor",
"portableUpdateBrowseMessage": "Pลenosnรฉ instalace nelze aktualizovat automaticky. Stรกhnฤte nejnovฤjลกรญ verzi pro svลฏj systรฉm z GitHub Releases a nainstalujte ji do stejnรฉ sloลพky โ vaลกe sloลพka Data/ (nastavenรญ, modely, nahrรกvky) zลฏstane na mรญstฤ.",
"portableUpdateBrowseButton": "Otevลรญt GitHub Releases"
},
"common": {
"loading": "Naฤรญtรกnรญ...",
"delete": "Smazat",
"back": "Zpฤt",
"close": "Zavลรญt",
"open": "Otevลรญt",
"copy": "Kopรญrovat",
"clear": "Vymazat",
"noOptionsFound": "Nenalezeny ลพรกdnรฉ moลพnosti"
},
"accessibility": {
"permissionsDescription": "Handy potลebuje oprรกvnฤnรญ usnadnฤnรญ pลรญstupu, aby mohlo psรกt pลepsanรฝ text.",
"openSettings": "Otevลรญt Nastavenรญ systรฉmu"
},
"errors": {
"loadDirectory": "Chyba pลi naฤรญtรกnรญ adresรกลe: {{error}}",
"micPermissionDeniedTitle": "Pลรญstup k mikrofonu byl odepลen",
"micPermissionDenied": {
"generic": "Pลรญstup k mikrofonu byl odepลen operaฤnรญm systรฉmem. Povolte prosรญm pลรญstup k mikrofonu v nastavenรญ systรฉmu.",
"windows": "Povolte pลรญstup k mikrofonu v Nastavenรญ โ Soukromรญ a zabezpeฤenรญ โ Mikrofon (vฤetnฤ pลรญstupu desktopovรฝch aplikacรญ).",
"macos": "Povolte pลรญstup k mikrofonu v Nastavenรญ systรฉmu โ Soukromรญ a zabezpeฤenรญ โ Mikrofon.",
"linux": "Povolte pลรญstup k mikrofonu v nastavenรญ zvuku nebo soukromรญ vaลกeho systรฉmu."
},
"noInputDeviceTitle": "Mikrofon nebyl nalezen",
"noInputDevice": "Nebylo detekovรกno ลพรกdnรฉ zvukovรฉ vstupnรญ zaลรญzenรญ. Pลipojte mikrofon nebo sluchรกtka a zkuste to znovu.",
"recordingFailed": "Nepodaลilo se spustit nahrรกvรกnรญ: {{error}}",
"modelLoadFailed": "Nepodaลilo se naฤรญst model: {{model}}",
"modelLoadFailedUnknown": "neznรกmรฝ model",
"pasteFailedTitle": "Vloลพenรญ textu se nezdaลilo",
"pasteFailed": "Text nebylo moลพnรฉ vloลพit do aktivnรญ aplikace.",
"transcriptionFailedTitle": "Pลepis selhal"
},
"appLanguage": {
"title": "Jazyk aplikace",
"description": "Zmฤลte jazyk rozhranรญ Handy"
},
"theme": {
"title": "Motiv aplikace",
"description": "Zvolte, zda mรก Handy sledovat motiv systรฉmu, nebo zลฏstat svฤtlรฝ ฤi tmavรฝ",
"options": {
"system": "Systรฉm",
"light": "Svฤtlรฝ",
"dark": "Tmavรฝ"
}
},
"overlay": {
"transcribing": "Pลepisuji...",
"processing": "Zpracovรกvรกm...",
"loadingModel": "Naฤรญtรกnรญ modelu..."
},
"whatsNew": {
"title": "Novinky v Handy v{{version}}"
},
"secureInput": {
"blockedWithCulprit_one": "{{name}} mลฏลพe blokovat 1 zkratku",
"blockedWithCulprit_other": "{{name}} mลฏลพe blokovat {{count}} zkratek",
"blockedNoCulprit_one": "macOS doฤasnฤ blokuje 1 zkratku",
"blockedNoCulprit_other": "macOS doฤasnฤ blokuje {{count}} zkratek",
"recorderBlockedWithCulprit": "{{name}} mลฏลพe blokovat zmฤny zkratek",
"recorderBlockedNoCulprit": "macOS doฤasnฤ blokuje zmฤny zkratek",
"learnMore": "Jak to vyลeลกit",
"recorderBlocked": "Zkratky teฤ nelze nahrรกt โ Secure Input v macOS blokuje udรกlosti klรกves. Nejprve vyลeลกte upozornฤnรญ na Secure Input.",
"dismiss": "Zavลรญt"
}
}
File: src/i18n/locales/da/translation.json
{
"tray": {
"settings": "Indstillinger...",
"checkUpdates": "Tjek for opdateringer...",
"copyLastTranscript": "Kopiรฉr seneste transskription",
"unloadModel": "Frigรธr model",
"model": "Model",
"quit": "Afslut",
"cancel": "Annuller",
"secureInputWarning": "โ Genveje blokeret af Secure Input"
},
"sidebar": {
"general": "Generelt",
"models": "Modeller",
"advanced": "Avanceret",
"postProcessing": "Efterbehandling",
"history": "Historik",
"debug": "Fejlfinding",
"about": "Om"
},
"onboarding": {
"subtitle": "For at komme i gang skal du vรฆlge en transskriptionsmodel",
"existingModelsTitle": "Kompatible modeller",
"downloadModelsTitle": "Tilgรฆngelig til download",
"showAllModels": "Vis alle {{total}} modeller",
"showFewerModels": "Vis fรฆrre modeller",
"recommended": "Anbefalet",
"customModelDescription": "Ikke officielt understรธttet",
"migration": {
"title": "Dine modeller skal opdateres",
"description": "Handy bruger nu en nyere type model. Download den nye version for at fortsรฆtte med at transskribere. Gamle versioner vil blive fjernet.",
"replaces": "Erstatter {{name}}",
"oldFormat": "Gammelt format",
"failed": "Download mislykkedes",
"retry": "Prรธv igen",
"chooseAnother": "Vรฆlg en anden model",
"download": "Download modeller ({{size}})",
"continue": "Fortsรฆt",
"timeRemaining": "{{time}} tilbage"
},
"modelCard": {
"accuracy": "nรธjagtighed",
"speed": "hastighed"
},
"models": {
"small": {
"name": "Whisper Small",
"description": "Hurtig og ret nรธjagtig."
},
"medium": {
"name": "Whisper Medium",
"description": "God nรธjagtighed, middel hastighed"
},
"turbo": {
"name": "Whisper Turbo",
"description": "Afbalanceret nรธjagtighed og hastighed."
},
"large": {
"name": "Whisper Large",
"description": "God nรธjagtighed, men langsom."
},
"breeze-asr": {
"name": "Breeze ASR",
"description": "Optimeret til taiwansk mandarin. Understรธtter kodeskift."
}
},
"errors": {
"selectModel": "Kunne ikke vรฆlge model"
},
"permissions": {
"title": "Tilladelser pรฅkrรฆvet",
"description": "Handy har brug for et par tilladelser for at fungere korrekt.",
"microphone": {
"title": "Mikrofonadgang",
"description": "Pรฅkrรฆvet for at hรธre din stemme til transskription."
},
"accessibility": {
"title": "Tilgรฆngelighedsadgang",
"description": "Pรฅkrรฆvet for at skrive den transskriberede tekst ind i dine programmer."
},
"grant": "Giv tilladelse",
"granted": "Givet",
"waiting": "Venter...",
"allGranted": "Alt er klar!",
"errors": {
"checkFailed": "Kunne ikke tjekke tilladelser. Prรธv igen.",
"requestFailed": "Kunne ikke anmode om tilladelse. Prรธv igen."
}
}
},
"modelSelector": {
"custom": "Brugerdefineret",
"legacy": "Forรฆldet",
"streaming": "Streaming",
"active": "Aktiv",
"switching": "Skifter...",
"noModelsAvailable": "Ingen modeller tilgรฆngelige",
"verifying": "Verificerer {{modelName}}...",
"verifyingGeneric": "Verificerer...",
"downloading": "Downloader {{percentage}}%",
"downloadingMultiple": "Downloader {{count}} modeller...",
"modelReady": "Model klar",
"loading": "Indlรฆser {{modelName}}...",
"loadingGeneric": "Indlรฆser...",
"modelError": "Modelfejl",
"modelUnloaded": "Model frigjort",
"noModelDownloadRequired": "Ingen model - download pรฅkrรฆvet",
"deleteModel": "Slet {{modelName}}",
"downloadSpeed": "{{speed}} MB/s",
"cancel": "Annuller",
"cancelDownload": "Annuller download",
"capabilities": {
"languageSelection": "Understรธtter flere inputsprog",
"singleLanguage": "Understรธtter kun dette sprog",
"languageCount": "{{total}} sprog",
"languageOnly": "Kun {{language}}",
"translation": "Kan oversรฆtte til engelsk",
"translate": "Oversรฆt",
"streaming": "Viser live transskription, mens du taler"
}
},
"settings": {
"modelSettings": {
"title": "{{model}}-indstillinger"
},
"general": {
"title": "Generelt",
"shortcut": {
"title": "Handy-genveje",
"description": "Konfigurer tastaturgenveje til at udlรธse tale-til-tekst-optagelse",
"loading": "Indlรฆser genveje...",
"none": "Ingen genveje konfigureret",
"notFound": "Genvej ikke fundet",
"pressKeys": "Tryk pรฅ รธnskede taster...",
"bindings": {
"transcribe": {
"name": "Transskriptionsgenvej",
"description": "Tastaturgenvejen til at optage og transskribere din stemme."
},
"cancel": {
"name": "Annulleringsgenvej",
"description": "Tastaturgenvejen til at annullere den aktuelle optagelse."
},
"transcribe_with_post_process": {
"name": "Genvej til efterbehandling",
"description": "Valgfrit: En dedikeret genvej, der altid anvender AI-efterbehandling pรฅ din transskription."
}
},
"errors": {
"restore": "Kunne ikke gendanne den oprindelige genvej",
"set": "Kunne ikke indstille genvej: {{error}}",
"reset": "Kunne ikke nulstille genvej til oprindelig indstilling"
}
},
"language": {
"title": "Sprog",
"description": "Vรฆlg sproget til talegenkendelse. Auto tyder automatisk sproget, mens valg af et specifikt sprog kan forbedre nรธjagtigheden for det pรฅgรฆldende sprog.",
"searchPlaceholder": "Sรธg efter sprog...",
"noResults": "Ingen sprog fundet",
"auto": "Automatisk"
},
"shortcutActivation": {
"title": "Genvejens adfรฆrd",
"description": "Vรฆlg, hvordan transskriptionsgenvejen starter og stopper optagelsen.",
"options": {
"holdOrToggle": "Automatisk",
"pushToTalk": "Hold",
"toggle": "Skift"
},
"descriptions": {
"hold_or_toggle": "Hold nede for at optage, eller tryk kort for at slรฅ til/fra",
"push_to_talk": "Optager, mens du holder genvejen nede",
"toggle": "Tryk pรฅ genvejen for at starte optagelsen, tryk igen for at stoppe"
}
}
},
"models": {
"title": "Transskriptionsmodeller",
"description": "Vรฆlg en transskriptionsmodel, eller download flere modeller. Forskellige modeller tilbyder varierende niveauer af nรธjagtighed og hastighed.",
"searchPlaceholder": "Sรธg efter modeller ved navnโฆ",
"yourModels": "Downloadede modeller",
"availableModels": "Tilgรฆngelig til download",
"deleteConfirm": "Er du sikker pรฅ, at du vil slette {{modelName}}? Du skal downloade den igen for at bruge den.",
"deleteActiveConfirm": "{{modelName}} er din aktive model. Sletning af den vil stoppe transskriptioner, indtil du vรฆlger en ny model. Er du sikker?",
"deleteTitle": "Slet model",
"retiredNotice": {
"title": "Gamle modeller virker ikke lรฆngere med Handy",
"description": "De fylder {{size}} pรฅ din computer.",
"delete": "Slet modeller",
"deleted": "Gamle modeller er slettet",
"deleteFailed": "Nogle gamle modeller kunne ikke slettes. Se loggen for detaljer."
},
"filters": {
"allLanguages": "Alle sprog",
"streaming": "Filtrer modeller, der understรธtter live transskription",
"translation": "Filtrer modeller, der understรธtter oversรฆttelse til engelsk"
},
"rescan": {
"label": "Sรธg igen",
"tooltip": "Sรธg igen efter modeller, der er tilfรธjet til modelmappen eller Hugging Face-cachen uden for Handy"
},
"noModelsMatch": "Ingen modeller matcher dette filter."
},
"sound": {
"title": "Lyd",
"microphone": {
"title": "Mikrofon",
"description": "Vรฆlg din foretrukne mikrofonenhed",
"placeholder": "Vรฆlg mikrofon...",
"loading": "Indlรฆser..."
},
"channel": {
"title": "Inputkanal",
"description": "Vรฆlg, hvilken inputkanal der skal optages fra. Brug dette, hvis din lydgrรฆnseflade har flere indgange.",
"average": "Gennemsnit af alle kanaler",
"channel": "Kanal {{n}}"
},
"audioFeedback": {
"label": "Lydfeedback",
"description": "Afspil lyd, nรฅr optagelse starter og stopper"
},
"outputDevice": {
"title": "Outputenhed",
"description": "Vรฆlg din foretrukne lydoutputenhed til feedbacklyde",
"placeholder": "Vรฆlg outputenhed...",
"loading": "Indlรฆser..."
},
"volume": {
"title": "Lydstyrke",
"description": "Juster lydstyrken for lydfeedback"
}
},
"advanced": {
"groups": {
"app": "App",
"output": "Output",
"transcription": "Transskription",
"history": "Historik",
"experimental": "Eksperimentel"
},
"experimentalToggle": {
"label": "Eksperimentelle funktioner",
"description": "Aktivรฉr eksperimentelle funktioner, der stadig er under udvikling."
},
"lazyStreamClose": {
"label": "Hold mikrofon รฅben mellem transskriptioner",
"description": "Holder mikrofonstrรธmmen รฅben i 30 sekunder, efter at optagelsen stopper, hvilket reducerer ventetid ved transskriptioner lige efter hinanden. Kan forringe Bluetooth-lydkvaliteten, mens den er aktiv."
},
"acceleration": {
"transcribe": {
"title": "Hardwareacceleration",
"description": "Vรฆlg den hardware, der bruges til transskription. Automatisk bruger GPU'en, nรฅr den er tilgรฆngelig, og falder ellers tilbage til CPU'en."
},
"gpuDevice": {
"auto": "Automatisk"
}
},
"startHidden": {
"label": "Start skjult",
"description": "Vis pรฅ meddelelsesomrรฅdet uden at รฅbne vinduet."
},
"autostart": {
"label": "Start ved opstart",
"description": "Start Handy automatisk, nรฅr du logger ind pรฅ din computer."
},
"showTrayIcon": {
"label": "Vis proceslinjeikon",
"description": "Vis Handy-ikonet i meddelelsesomrรฅdet."
},
"overlay": {
"style": {
"title": "Overlay",
"description": "Vรฆlg optagelses-overlay: Ingen skjuler det, Minimal viser en kompakt pille, Live viser transskription i realtid, mens du taler (kun modeller med streaming-understรธttelse โ se efter Streaming-mรฆrket i modelvรฆlgeren). Pรฅ Linux anbefales 'Ingen'.",
"options": {
"none": "Ingen",
"minimal": "Minimal",
"live": "Live"
}
},
"position": {
"title": "Overlay-placering",
"description": "Hvor overlayet vises pรฅ skรฆrmen under optagelse og transskription.",
"options": {
"bottom": "Bund",
"top": "Top"
}
}
},
"pasteMethod": {
"title": "Indsรฆtningsmetode",
"description": "Vรฆlg, hvordan tekst indsรฆttes. Direkte: simulerer tastetryk via systeminput. Ingen: springer indsรฆtning over, opdaterer kun historik/udklipsholder.",
"options": {
"clipboard": "Udklipsholder ({{modifier}}+V)",
"clipboardCtrlShiftV": "Udklipsholder (Ctrl+Shift+V)",
"clipboardShiftInsert": "Udklipsholder (Shift+Insert)",
"direct": "Direkte",
"none": "Ingen",
"externalScript": "Eksternt script"
},
"externalScriptPlaceholder": "/sti/til/dit/script.sh"
},
"typingTool": {
"title": "Skrivevรฆrktรธj",
"description": "Vรฆlg hvilket Linux-skrivevรฆrktรธj der skal bruges til Direkte indsรฆtningsmetode. Auto registrerer og bruger automatisk det bedste tilgรฆngelige vรฆrktรธj til dit system.",
"options": {
"auto": "Auto (anbefalet)"
}
},
"clipboardHandling": {
"title": "Hรฅndtering af udklipsholder",
"description": "Rรธr ikke ved udklipsholder bevarer dit nuvรฆrende udklipsholderindhold efter transskription. Kopiรฉr til udklipsholder efterlader transskriptionsresultatet i din udklipsholder efter indsรฆtning.",
"options": {
"dontModify": "Rรธr ikke ved udklipsholder",
"copyToClipboard": "Kopiรฉr til udklipsholder"
}
},
"autoSubmit": {
"title": "Automatisk indsendelse",
"description": "Send automatisk den valgte tastekombination efter tekstindsรฆttelse. Cmd+Enter gรฆlder pรฅ macOS, mens Windows/Linux bruger Super+Enter.",
"options": {
"off": "Fra",
"enter": "Enter",
"cmdEnter": "Cmd+Enter",
"superEnter": "Super+Enter",
"ctrlEnter": "Ctrl+Enter"
}
},
"translateToEnglish": {
"label": "Oversรฆt til engelsk",
"description": "Oversรฆt automatisk tale fra andre sprog til engelsk under transskription."
},
"modelUnload": {
"title": "Frigรธr model",
"description": "Frigรธr automatisk GPU-/CPU-hukommelse, nรฅr modellen ikke har vรฆret brugt i den angivne tid",
"options": {
"never": "Aldrig",
"immediately": "Med det samme",
"min2": "Efter 2 minutter",
"min5": "Efter 5 minutter",
"min10": "Efter 10 minutter",
"min15": "Efter 15 minutter",
"hour1": "Efter 1 time",
"sec15": "Efter 15 sekunder (fejlfinding)"
}
},
"customWords": {
"title": "Brugerdefinerede ord",
"description": "Hjรฆlp understรธttede modeller med at genkende navne og specialiserede udtryk. Fuzzy-korrektion er i รธjeblikket begrรฆnset til ord, der bruger A-Z og tal.",
"placeholder": "Tilfรธj et ord",
"add": "Tilfรธj",
"remove": "Fjern {{word}}",
"duplicate": ""{{word}}" findes allerede"
},
"voiceActivityDetection": {
"title": "Stemmeaktivitetsdetektion",
"description": "Filtrer stilhed fra optagelser. Streaming-modeller bruger en lรฆngere VAD-hale; deaktivering af VAD optager rรฅ lyd."
},
"longFormChunking": {
"title": "Opdeling af lang lyd",
"description": "Deler lange optagelser ved pauser fรธr transskribering, hvilket typisk forbedrer transskriptionen."
},
"vadBackend": {
"title": "Stemmedetektions-backend",
"description": "Vรฆlg den detektor, der bruges til at filtrere stilhed. Earshot er eksperimentel; skift tilbage til Silero, hvis tale klippes eller stรธj bevares.",
"options": {
"silero": "Silero",
"earshot": "Earshot"
}
},
"fillerWordRemoval": {
"title": "Fjern fyldord",
"description": "Fjerner almindelige tรธveord fra transskriptioner. Slรฅ fra for at beholde dem."
},
"chineseScript": {
"title": "Kinesisk skrift",
"description": "Skriver mandarin- og kantonesisk-transskriptioner med forenklede eller traditionelle tegn. Andre sprog รฆndres ikke.",
"options": {
"asTranscribed": "Som transskriberet",
"simplified": "Forenklet",
"traditional": "Traditionel"
}
}
},
"postProcessing": {
"hotkey": {
"title": "Genvejstast"
},
"api": {
"title": "API",
"provider": {
"title": "Udbyder",
"description": "Vรฆlg en OpenAI- eller Anthropic-kompatibel udbyder."
},
"apiFormat": {
"title": "API-format",
"description": "Det anmodningsformat, som det brugerdefinerede endpoint forventer.",
"options": {
"openai": "OpenAI-kompatibel (Chat Completions)",
"anthropic": "Anthropic Messages"
}
},
"appleIntelligence": {
"unavailable": "Apple Intelligence er ikke tilgรฆngelig pรฅ denne enhed. Krรฆver en Apple Silicon Mac med macOS Tahoe (26.0) eller nyere med Apple Intelligence aktiveret i Systemindstillinger."
},
"baseUrl": {
"title": "Basis-URL",
"description": "API-basis-URL for den valgte udbyder. Kun den brugerdefinerede udbyder kan redigeres.",
"placeholder": "https://api.openai.com/v1",
"placeholderAnthropic": "https://api.anthropic.com/v1"
},
"apiKey": {
"title": "API-nรธgle",
"description": "API-nรธgle til den valgte udbyder.",
"placeholder": "sk-..."
},
"model": {
"title": "Model",
"descriptionCustom": "Angiv den modelidentifikator, som det brugerdefinerede endpoint forventer.",
"descriptionDefault": "Vรฆlg en model, der udbydes af den valgte udbyder.",
"placeholderWithOptions": "Sรธg eller vรฆlg en model",
"placeholderNoOptions": "Skriv et modelnavn",
"refreshModels": "Opdater modeller"
}
},
"prompts": {
"title": "Prompt",
"selectedPrompt": {
"title": "Valgt prompt",
"description": "Vรฆlg en skabelon til at forfine transskriptioner, eller opret en ny. Brug ${output} i promptteksten for at referere til den fangede transskription."
},
"noPrompts": "Ingen prompts tilgรฆngelige",
"selectPrompt": "Vรฆlg en prompt",
"createNew": "Opret ny prompt",
"promptLabel": "Promptnavn",
"promptLabelPlaceholder": "Indtast promptnavn",
"promptInstructions": "Promptinstruktioner",
"promptInstructionsPlaceholder": "Skriv de instruktioner, der skal kรธres efter transskription. Eksempel: Forbedr grammatik og klarhed for fรธlgende tekst: ${output}",
"promptTip": "Tip: Brug ${output} til at indsรฆtte den transskriberede tekst i din prompt.",
"updatePrompt": "Opdater prompt",
"deletePrompt": "Slet prompt",
"createPrompt": "Opret prompt",
"cancel": "Annuller",
"selectToEdit": "Vรฆlg en prompt ovenfor for at se og redigere dens detaljer.",
"createFirst": "Klik pรฅ 'Opret ny prompt' ovenfor for at oprette din fรธrste efterbehandlingsprompt."
}
},
"history": {
"title": "Historik",
"openFolder": "ร
bn optagelsesmappe",
"loading": "Indlรฆser historik...",
"empty": "Ingen transskriptioner endnu. Start optagelse for at opbygge din historik!",
"copyToClipboard": "Kopiรฉr transskription til udklipsholder",
"copyError": "Kunne ikke kopiere transskriptionen til udklipsholderen.",
"save": "Gem transskription",
"unsave": "Fjern fra gemte",
"delete": "Slet post",
"deleteError": "Kunne ikke slette posten. Prรธv igen.",
"retranscribe": "Transskribรฉr igen",
"retranscribeError": "Kunne ikke transskribere igen. Prรธv igen.",
"transcribing": "Transskriberer...",
"transcriptionFailed": "Transskription mislykkedes. Du kan transskribere igen ved hjรฆlp af genforsรธgsikonet."
},
"debug": {
"title": "Fejlfinding",
"logDirectory": {
"title": "Logmappe",
"description": "Placering af logfiler"
},
"logLevel": {
"title": "Logniveau",
"description": "Detaljeringsgrad for logning"
},
"liveLogs": {
"title": "Live logs",
"description": "Stream applikationslogs i realtid for at diagnosticere problemer uden at รฅbne logfilen. Kun logs udsendt, mens dette panel er รฅbent, vises; respekterer indstillingen Logniveau ovenfor.",
"live": "Live",
"paused": "Pรฅ pause",
"pause": "Pause",
"resume": "Genoptag",
"copied": "Kopieret",
"lineCount": "{{count}} linjer",
"empty": "Venter pรฅ logsโฆ Poster vises her, nรฅr appen udsender dem."
},
"updateChecks": {
"label": "Tjek for opdateringer",
"description": "Tjek automatisk for nye versioner af Handy",
"lockedDescription": "Deaktiveret af systemkonfiguration (HANDY_DISABLE_UPDATER)"
},
"whatsNewPreview": {
"title": "Forhรฅndsvisning af nyheder",
"description": "ร
bn de seneste medfรธlgende udgivelsesnoter uden at markere dem som set",
"button": "Forhรฅndsvisning",
"noNotes": "Ingen medfรธlgende udgivelsesnoter fundet",
"error": "Kunne ikke forhรฅndsvise udgivelsesnoter"
},
"onboardingPreview": {
"title": "Forhรฅndsvis introduktion",
"description": "Forhรฅndsvis introduktionsskรฆrmene uden at รฆndre tilladelser, modeller eller fuldfรธrelsesstatus",
"permissionsButton": "Tilladelser",
"modelsButton": "Modelvalg",
"exitButton": "Afslut forhรฅndsvisning"
},
"soundTheme": {
"label": "Lydtema",
"description": "Vรฆlg et lydtema til feedback ved start og stop af optagelse"
},
"wordCorrectionThreshold": {
"title": "Tรฆrskel for ordkorrektion",
"description": "Fรธlsomhed for brugerdefinerede ordkorrektioner"
},
"historyLimit": {
"title": "Historikgrรฆnse",
"description": "Maksimalt antal historikposter, der skal beholdes",
"entries": "poster"
},
"recordingRetention": {
"title": "Automatisk sletning af optagelser",
"description": "Slet automatisk gamle optagelser for at spare plads",
"never": "Aldrig",
"preserveLimit": "Behold de seneste {{count}}",
"days3": "Efter 3 dage",
"weeks2": "Efter 2 uger",
"months3": "Efter 3 mรฅneder",
"placeholder": "Vรฆlg opbevaringsperiode..."
},
"alwaysOnMicrophone": {
"label": "Altid aktiv mikrofon",
"description": "Hold mikrofonen aktiv for hurtigere reaktion"
},
"clamshellMicrophone": {
"title": "Clamshell-mikrofon",
"description": "Mikrofon, der skal bruges, nรฅr den bรฆrbares lรฅg er lukket"
},
"postProcessingToggle": {
"label": "Efterbehandling",
"description": "Aktivรฉr AI-drevet tekstforbedring efter transskription"
},
"muteWhileRecording": {
"label": "Mute under optagelse",
"description": "Sluk for systemlyd under optagelse"
},
"appendTrailingSpace": {
"label": "Tilfรธj efterfรธlgende mellemrum",
"description": "Tilfรธj et mellemrum efter indsat transskription"
},
"keyboardImplementation": {
"title": "Tastaturimplementering",
"description": "Vรฆlg backend til tastaturgenveje.",
"bindingsReset": "Tastaturgenveje var inkompatible og blev nulstillet til standard"
},
"paths": {
"appData": "Appdata:",
"models": "Modeller:",
"settings": "Indstillinger:"
},
"pasteDelay": {
"title": "Forsinkelse af indsรฆttelse (fรธr)",
"description": "Forsinkelse (i millisekunder) efter kopiering af tekst, fรธr tastetrykket for indsรฆtning sendes. รg, hvis intet bliver indsat."
},
"pasteDelayAfter": {
"title": "Forsinkelse af indsรฆttelse (efter)",
"description": "Forsinkelse (i millisekunder) efter tastetrykket for indsรฆtning, fรธr din tidligere udklipsholder gendannes. รg, hvis dit gamle udklipsholderindhold bliver indsat i stedet for transskriptionen."
},
"holdThreshold": {
"title": "Holdetรฆrskel",
"description": "Kun i automatisk tilstand: hvor lรฆnge (i millisekunder) genvejen skal holdes nede, fรธr det tรฆller som et hold i stedet for et tryk. Sรฆnk vรฆrdien, hvis korte hold lader optagelsen kรธre videre; hรฆv den, hvis bevidste tryk behandles som hold."
},
"reliablePaste": {
"title": "Pรฅlidelig indsรฆttelse (Beta)",
"description": "Gendan fรธrst din udklipsholder, nรฅr mรฅlappen faktisk har lรฆst transskriptionen, i stedet for efter en fast forsinkelse. Skal afhjรฆlpe, at gammelt udklipsholderindhold indsรฆttes, nรฅr systemet er belastet. Krรฆver en indsรฆtningsmetode via udklipsholderen; kun macOS og Windows."
},
"recordingBuffer": {
"title": "Ekstra optagelsesbuffer",
"description": "Ekstra tid (i millisekunder) til at fortsรฆtte optagelsen, efter du slipper tasten, for at fange efterfรธlgende lyd. 0 = ingen ekstra buffer."
},
"keyboardDiagnostic": {
"title": "Tastaturdiagnostik",
"description": "Kontrollerer, om tastaturhรฆndelser nรฅr frem til Handy. Kun antallet af hรฆndelser registreres โ aldrig hvilke taster du trykker pรฅ.",
"run": "Kรธr 10 s diagnostik",
"running": "Lytterโฆ tryk pรฅ din genvej et par gange (f.eks. Option+Space)",
"secureInputLabel": "Secure Input",
"enabled": "aktiveret",
"disabled": "deaktiveret",
"holder": "holdes af {{name}} (pid {{pid}})",
"holderUnknown": "ingen synlig indehaver",
"keyDown": "Tast ned",
"keyUp": "Tast op",
"flagsChanged": "Modifikatorer",
"mouse": "Mus",
"verdictBlocked": "Secure Input blokerer tastehรฆndelser โ genveje med en almindelig tast kan ikke fungere, fรธr det er lรธst.",
"verdictSuspicious": "Der kom modifikatorhรฆndelser, men ingen tastehรฆndelser โ noget undertrykker taster, selvom Secure Input rapporteres som deaktiveret. Rapportรฉr det gerne pรฅ GitHub.",
"verdictOk": "Tastehรฆndelser nรฅr frem til Handy som normalt.",
"verdictNoEvents": "Ingen hรฆndelser registreret โ trykkede du pรฅ nogen taster under testen?",
"failed": "Diagnostik mislykkedes: {{error}}"
}
},
"about": {
"title": "Om",
"version": {
"title": "Version",
"description": "Nuvรฆrende version af Handy"
},
"whatsNewUpdates": {
"label": "Vis nyheder",
"description": "Vis udgivelsesnoter, efter Handy opdateres"
},
"appDataDirectory": {
"title": "Appdatamappe",
"description": "Placering, hvor Handy gemmer sine data"
},
"sourceCode": {
"title": "Kildekode",
"description": "Se kildekode og bidrag",
"button": "Vis pรฅ GitHub"
},
"supportDevelopment": {
"title": "Stรธt udviklingen",
"description": "Hjรฆlp os med at fortsรฆtte udviklingen af Handy",
"button": "Donรฉr"
},
"acknowledgments": {
"title": "Anerkendelser",
"ggml": {
"title": "ggml",
"description": "Hรธjtydende tensor-bibliotek til maskinlรฆringsinferens pรฅ enheden",
"details": "Handys lokale tale-til-tekst funktionalitet er bygget pรฅ transcribe.cpp og ggml. Tak for det fantastiske arbejde af Georgi Gerganov og bidragyderne."
}
}
}
},
"footer": {
"checkingUpdates": "Tjekker for opdateringer...",
"updateAvailableShort": "Opdatering tilgรฆngelig",
"upToDate": "Opdateret",
"updateCheckingDisabled": "Tjek for opdateringer deaktiveret",
"downloading": "Downloader... {{progress}}%",
"installing": "Installerer...",
"preparing": "Forbereder...",
"checkForUpdates": "Tjek for opdateringer",
"portableUpdateTitle": "Manuel opdatering pรฅkrรฆvet",
"portableUpdateMessage": "Flytbare installationer kan ikke opdateres automatisk. Download installeren til dit system nedenfor, kรธr den, og installer i den samme mappe โ din Data/-mappe (indstillinger, modeller, optagelser) bliver bevaret.",
"portableUpdateButton": "Download installer",
"portableUpdateBrowseMessage": "Flytbare installationer kan ikke opdateres automatisk. Download den nyeste version til dit system fra GitHub Releases, og installer den i den samme mappe โ din Data/-mappe (indstillinger, modeller, optagelser) bliver bevaret.",
"portableUpdateBrowseButton": "ร
bn GitHub Releases"
},
"whatsNew": {
"title": "Nyt i Handy v{{version}}"
},
"common": {
"loading": "Indlรฆser...",
"delete": "Slet",
"back": "Tilbage",
"close": "Luk",
"open": "ร
bn",
"copy": "Kopiรฉr",
"clear": "Ryd",
"noOptionsFound": "Ingen muligheder fundet"
},
"accessibility": {
"permissionsDescription": "Handy har brug for tilgรฆngelighedstilladelser for at skrive den transskriberede tekst.",
"openSettings": "ร
bn systemindstillinger"
},
"errors": {
"loadDirectory": "Fejl ved indlรฆsning af mappe: {{error}}",
"micPermissionDeniedTitle": "Mikrofonadgang nรฆgtet",
"micPermissionDenied": {
"generic": "Mikrofonadgang blev nรฆgtet af operativsystemet. Giv venligst mikrofontilladelse i dine systemindstillinger.",
"windows": "Aktivรฉr mikrofonadgang under Indstillinger โ Privatliv og sikkerhed โ Mikrofon (inklusive adgang for skrivebordsapps).",
"macos": "Giv mikrofonadgang under Systemindstillinger โ Privatliv og sikkerhed โ Mikrofon.",
"linux": "Giv mikrofonadgang i dit systems lyd- eller privatlivsindstillinger."
},
"noInputDeviceTitle": "Ingen mikrofon fundet",
"noInputDevice": "Ingen lydinputenhed blev registreret. Tilslut en mikrofon eller et headset, og prรธv igen.",
"recordingFailed": "Kunne ikke starte optagelse: {{error}}",
"modelLoadFailed": "Kunne ikke indlรฆse model: {{model}}",
"modelLoadFailedUnknown": "ukendt model",
"pasteFailedTitle": "Kunne ikke indsรฆtte tekst",
"pasteFailed": "Teksten kunne ikke indsรฆttes i det aktive program.",
"transcriptionFailedTitle": "Transskription mislykkedes"
},
"appLanguage": {
"title": "Applikationssprog",
"description": "Skift sproget for Handy-grรฆnsefladen"
},
"theme": {
"title": "Applikationstema",
"description": "Vรฆlg om Handy skal fรธlge dit systemtema eller forblive lyst eller mรธrkt",
"options": {
"system": "System",
"light": "Lys",
"dark": "Mรธrk"
}
},
"overlay": {
"transcribing": "Transskriberer...",
"processing": "Behandler...",
"loadingModel": "Indlรฆser model..."
},
"secureInput": {
"blockedWithCulprit_one": "{{name}} blokerer muligvis 1 genvej",
"blockedWithCulprit_other": "{{name}} blokerer muligvis {{count}} genveje",
"blockedNoCulprit_one": "macOS blokerer midlertidigt 1 genvej",
"blockedNoCulprit_other": "macOS blokerer midlertidigt {{count}} genveje",
"recorderBlockedWithCulprit": "{{name}} blokerer muligvis รฆndringer af genveje",
"recorderBlockedNoCulprit": "macOS blokerer midlertidigt รฆndringer af genveje",
"learnMore": "Sรฅdan lรธser du det",
"recorderBlocked": "Genveje kan ikke optages lige nu โ macOS Secure Input blokerer tastehรฆndelser. Lรธs advarslen om Secure Input fรธrst.",
"dismiss": "Afvis"
}
}
2. Official Technical Reference & Guides (cjpais/cjpais.github.io)
File: README.md
cjpais.github.io
Personal blog + scripts to make it work
Automaded workflow from iPad -> Blog
- Write something on Notability
- Sync to Dropbox
- After file updated on server execute process.py via auto_update.sh. This does the following
- Convert .pdf to SVG
- Process SVG
- From the processed guy generate HTML pages from SVG (index + page)
- Commit to git repo and see
Dependencies
- inkscape (for process.py)
- inotify-tools (for running process.py automagically)
- requirements.txt (Jinja2, static site generation)
Temp Notes on Pages:
There are no hyperlinks as of yet. This will be added in a later revision of process.py that inserts links into the SVG's themselves. CSS style will come with this. For now other pages can be found manually by going here, then navigating to cjpais.com/page/
Needs directory structure in Notability. I will have to rearrange my Dropbox & process.py to support. This will be more natural but still not ideal. Needs a flag tagged (graph like) structure, not heirarchy.
File: last_updated.txt
2019-09-03 00:36:12.144071
File: requirements.txt
Jinja2
File: structure.md
Directory Structure Overview
page - where all rendered pages go (except index.html)
res - resources. where svg's go :)
src - source files (js, css, and html templates)