Handy Documentation

A free, open source, and extensible speech-to-text application that works completely offline.

34,372 stars Rust Rust 5 files ยท ~56,048 tokens #accessibility#cross-platform#speech-to-text#tauri-v2
RAW Doc

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

  1. 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)
  2. Speak your words while the shortcut is active
  3. Release and Handy processes your speech using Whisper
  4. 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

  1. 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 .deb with APT so required dependencies are installed automatically:
      bash
      sudo apt install ./Handy_*.deb
      Do not use dpkg -i unless the dependencies are already installed. If you already used it, run sudo apt --fix-broken install.
  2. Install the application
  3. Launch Handy and grant necessary system permissions (microphone, accessibility)
  4. Configure your preferred keyboard shortcuts in Settings
  5. 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):

bash
handy --toggle-transcription    # Toggle recording on/off
handy --toggle-post-process     # Toggle recording with post-processing on/off
handy --cancel                  # Cancel the current operation

Startup flags:

bash
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 flags

Flags can be combined for autostart scenarios:

bash
handy --start-hidden --no-tray

macOS 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 xdotool for both direct typing and clipboard paste shortcuts
  • Ubuntu 26.04: Has Wayland display server by default. wtype does not work, you need to install ydotool and configure systemd as described here.
  • Wayland: Install wtype (preferred) or dotool for text input to work correctly
  • dotool setup: Requires adding your user to the input group: 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 wtype or dotool for 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-shell on Linux. If startup fails with error 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-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
    • For 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_RENDERER values. 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:

    1. Open Settings > Keyboard > Keyboard Shortcuts > Custom Shortcuts
    2. Click the + button to add a new shortcut
    3. Set the Name to Toggle Handy Transcription
    4. Set the Command to handy --toggle-transcription
    5. Click Set Shortcut and press your desired key combination (e.g., Super+O)

    KDE Plasma:

    1. Open System Settings > Shortcuts > Custom Shortcuts
    2. Click Edit > New > Global Shortcut > Command/URL
    3. Name it Toggle Handy Transcription
    4. In the Trigger tab, set your desired key combination
    5. In the Action tab, set the command to handy --toggle-transcription

    Sway / i3:

    Add to your config file (~/.config/sway/config or ~/.config/i3/config):

    ini
    bindsym $mod+o exec handy --toggle-transcription

    Hyprland:

    Add to your config file (~/.config/hypr/hyprland.conf):

    ini
    bind = $mainMod, O, exec, handy --toggle-transcription
  • You 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 handy or handy --toggle-transcription
    Toggle transcription with post-processing handy --toggle-post-process

    Example Sway config:

    ini
    bindsym $mod+o exec pkill -USR2 -n handy
    bindsym $mod+p exec handy --toggle-post-process

    pkill here simply delivers the signalโ€”it does not terminate the process.

    Behavior change: older releases also accepted SIGUSR1 for 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 via handy --toggle-post-process. Remove any pkill -USR1 bindings: 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:

bash
# 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:

text
Signature and comment signature verified

Do 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.

  1. Open Handy's settings window and press Cmd+Shift+D (macOS) or Ctrl+Shift+D (Windows/Linux) to reveal Debug.
  2. 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.
  3. 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

  1. Open Handy settings
  2. Navigate to the About section
  3. Copy the "App Data Directory" path shown there, or use the shortcuts:
    • macOS: Cmd+Shift+D to open debug menu
    • Windows/Linux: Ctrl+Shift+D to open debug menu

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:

bash
# 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:

text
{app_data_dir}/models/
โ”œโ”€โ”€ ggml-small.bin
โ”œโ”€โ”€ whisper-medium-q4_1.bin
โ”œโ”€โ”€ ggml-large-v3-turbo.bin
โ””โ”€โ”€ ggml-large-v3-q5_0.bin

For 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 .bin or .gguf filesโ€”use the exact filenames from the download URLs
  • After placing the files, restart Handy to detect the new models

Step 5: Verify Installation

  1. Restart Handy
  2. Open Settings โ†’ Models
  3. Your manually installed models should now appear as "Downloaded"
  4. 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:

  1. Obtain a Whisper model in GGML .bin format (e.g., from Hugging Face)
  2. Place the .bin file in your models directory (see paths above)
  3. Restart Handy to discover the new model
  4. 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 (.bin file)
  • 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:

bash
HANDY_NO_GTK_LAYER_SHELL=1 handy

3. 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:

bash
WEBKIT_DISABLE_DMABUF_RENDERER=1 handy

Some 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:

bash
WEBKIT_DISABLE_DMABUF_RENDERER=0 handy

This 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.:

ini
Exec=env HANDY_NO_GTK_LAYER_SHELL=1 handy

Handy'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:

bash
env -u HANDY_NO_GTK_LAYER_SHELL GDK_BACKEND=wayland handy

If 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:

powershell
$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

  1. Check existing issues at github.com/cjpais/Handy/issues
  2. Fork the repository and create a feature branch
  3. Test thoroughly on your target platform
  4. Submit a pull request with clear description of changes
  5. 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.

  • 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:

  • Rust (latest stable)
  • Bun package manager

Core Development:

bash
# 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 frontend

Linting and Formatting (run before committing):

bash
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 only

Model Setup (Required for Development):

bash
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.gguf

For 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 initialization
  • managers/ - Core business logic:
    • audio.rs - Audio recording and device management
    • model.rs - Model downloading and management
    • transcription.rs - Speech-to-text processing pipeline
    • history.rs - Transcription history storage
  • audio_toolkit/ - Low-level audio processing:
    • audio/ - Recording sink (VAD, levels, live streaming feed), output devices, WAV I/O
    • vad/ - Voice Activity Detection (Silero VAD)
  • commands/ - Tauri command handlers for frontend communication
  • cli.rs - CLI argument definitions (clap derive)
  • shortcut.rs - Global keyboard shortcut handling
  • settings.rs - Application settings management
  • overlay.rs - Recording overlay window (platform-specific)
  • signal_handle.rs - send_transcription_input() reusable function
  • utils.rs - Platform detection helpers

Frontend Structure (src/)

  • App.tsx - Main component with onboarding flow
  • components/ - React UI components:
    • settings/ - Settings UI
    • model-selector/ - Model management interface
    • onboarding/ - First-run experience
    • overlay/ - Recording overlay UI
    • update-checker/ - App update notifications
    • shared/, ui/, icons/, footer/ - Shared components
  • hooks/useSettings.ts - Settings state management hook
  • stores/settingsStore.ts - Zustand store for settings
  • bindings.ts - Auto-generated Tauri type bindings (via tauri-specta)
  • overlay/ - Recording overlay window entry point
  • lib/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 acceleration
  • handy-recorder - Microphone capture: device selection, resampling to 16 kHz, failure detection
  • transcribe-cpp (Silero VAD v6, CPU-only, in-process) / earshot - Voice Activity Detection
  • rdev - Global keyboard shortcuts
  • rodio - Audio playback for feedback sounds

Application Flow

  1. Initialization: App starts minimized to tray, loads settings, initializes managers
  2. Model Setup: First-run downloads preferred Whisper model (Small/Medium/Turbo/Large)
  3. Recording: Global shortcut triggers audio recording with VAD filtering
  4. Processing: Audio sent to Whisper model for transcription
  5. 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:

  1. Add key to src/i18n/locales/en/translation.json
  2. Use in component: const { t } = useTranslation(); t('key.path')

File structure:

text
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 fmt and cargo clippy before committing
  • Handle errors explicitly (avoid unwrap in production)
  • Use descriptive names, add doc comments for public APIs

TypeScript/React:

  • Strict TypeScript, avoid any types
  • 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() in signal_handle.rs is 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 in main.rs; opt out with HANDY_KEEP_VULKAN_IMPLICIT_LAYERS=1 or by setting VK_LOADER_LAYERS_DISABLE yourself
  • 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=1 to 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.md for 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

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/2022

  • CMake (must be on PATH):

    powershell
    winget install Kitware.CMake
  • Vulkan SDK from LunarG โ€” required to
    build the Vulkan GPU backend (vulkan-shaders-gen needs the SDK's headers
    and glslc):

    powershell
    winget install KhronosGroup.VulkanSDK

    Open a new terminal afterward so VULKAN_SDK is set.

[!NOTE]
Windows' 260-character path limit used to break the native Vulkan build in
most checkouts. Since transcribe-cpp 0.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

bash
git clone [email protected]:cjpais/Handy.git
cd Handy

2. Install Dependencies

bash
bun install

3. Start Dev Server

bash
bun tauri dev

4. Build for Production

bash
bun run tauri build

This 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):

bash
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:

bash
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:

bash
osascript -e 'tell application id "com.pais.handy" to quit' || true
tccutil reset Accessibility com.pais.handy
open /Applications/Handy.app

Grant 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:

bash
codesign -dr - /path/to/previous/Handy.app 2>&1
codesign -dr - /Applications/Handy.app 2>&1

An 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:

text
Bundling Handy_*_amd64.AppImage
failed to bundle project `failed to run linuxdeploy`

Tauri swallows the real linuxdeploy error. To see it, run linuxdeploy manually:

bash
cd src-tauri/target/release/bundle/appimage
~/.cache/tauri/linuxdeploy-x86_64.AppImage --appimage-extract-and-run \
  --appdir Handy.AppDir --plugin gtk --output appimage

Workaround: The binary, deb, and rpm bundles all build fine โ€” only the AppImage step fails. To skip it:

bash
bun run tauri build -- --bundles deb

Then 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):

text
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.
text
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.
text
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-deep
target\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 native
FileTracker (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 a
transcribe-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:

powershell
# 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's
src-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:

text
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 custom
signCommand (trusted-signing-cli, Azure Trusted Signing) that only exists
in the release CI environment. Local development doesn't need it:

powershell
# 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-bundle

File: 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:

  • Rust (latest stable)
  • Bun package manager
  • Platform-specific build tools (see BUILD.md)

Setting Up Your Development Environment

  1. Fork the repository on GitHub

  2. Clone your fork:

    bash
    git clone [email protected]:YOUR_USERNAME/Handy.git
    cd Handy
  3. Add upstream remote:

    bash
    git remote add upstream [email protected]:cjpais/Handy.git
  4. Install dependencies:

    bash
    bun install
  5. Download required models:

    bash
    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.gguf
  6. Run in development mode:

    bash
    bun 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 setup
  • managers/ - Core business logic (audio, model, transcription)
  • audio_toolkit/ - Low-level audio processing (recording, VAD)
  • commands/ - Tauri command handlers for frontend communication
  • shortcut.rs - Global keyboard shortcut handling
  • settings.rs - Application settings management

Frontend (React/TypeScript - src/):

  • App.tsx - Main application component
  • components/ - React UI components
  • hooks/ - Reusable React hooks
  • lib/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

  1. Search existing issues at github.com/cjpais/Handy/issues
  2. Check discussions at github.com/cjpais/Handy/discussions
  3. Try the latest release to see if the issue has been fixed
  4. 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

  1. Search existing discussions at github.com/cjpais/Handy/discussions
  2. Check common feature requests:

Submitting a Feature Request

  1. Go to Discussions
  2. Click "New discussion"
  3. Choose the appropriate category (Ideas, Feature Requests, etc.)
  4. 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:

  1. 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.

  2. 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
  3. 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

  1. Create a feature branch:

    bash
    git checkout -b feature/your-feature-name
    # or
    git checkout -b fix/your-bug-fix
  2. Make your changes:

    • Write clean, maintainable code
    • Follow existing code style and patterns
    • Add comments for complex logic
    • Keep commits focused and atomic
  3. 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
  4. Commit your changes:

    bash
    git 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 features
    • fix: for bug fixes
    • docs: for documentation changes
    • refactor: for code refactoring
    • test: for test additions/changes
    • chore: for maintenance tasks
  5. Keep your fork updated:

    bash
    git fetch upstream
    git rebase upstream/main
  6. Push to your fork:

    bash
    git push origin feature/your-feature-name
  7. Create 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 clippy and 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 any types
  • 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:

bash
bun run tauri build

Test 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

๐Ÿ“œ 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

  1. Fork the repository
  2. 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
  3. Translate the values (not the keys!)
  4. Submit a pull request

File Structure

Translation files are located in:

text
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:

bash
mkdir src/i18n/locales/[language-code]

Examples:

  • de for German
  • es for Spanish
  • ja for Japanese
  • zh for Chinese
  • ko for Korean
  • pt for Portuguese

Step 2: Copy the English File

bash
cp src/i18n/locales/en/translation.json src/i18n/locales/[language-code]/translation.json

Step 3: Translate the Values

Open the file and translate only the values (right side), not the keys (left side):

json
{
  "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:

typescript
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

  1. Run the app: bun run tauri dev
  2. Go to Settings โ†’ General โ†’ App Language
  3. Select your language
  4. Verify all text displays correctly

Step 6: Submit a Pull Request

  1. Commit your changes
  2. Push to your fork
  3. 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?

  1. Edit the relevant translation.json file
  2. 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:

json
// 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,

text
/* 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

bash
echo "$XDG_SESSION_TYPE"
id
ls -l /dev/uinput
grep -R 'uinput' /etc/udev/rules.d /usr/lib/udev/rules.d 2>/dev/null

You 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:

bash
sudo usermod -aG input "$USER"

Log out and back in after adding the group.

2. Install and test ydotool

bash
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:

bash
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.json

Restart Handy:

bash
pkill handy
handy --start-hidden &

Check the Handy log for:

text
handy-keys manager thread started
handy-keys shortcuts initialized

Then 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:

bash
sudo apt install wl-clipboard

6. 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:

sh
#!/bin/sh
printf '%s' "$1" | wl-copy
sleep 0.1
ydotool key 29:1 22:1 22:0 29:0
bash
chmod +x ~/.local/bin/handy-paste

Set 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:

text
src/content/release-notes/0.8.4.md

The 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:

md
![Streaming transcription preview](/release-notes/0.9.0/streaming-transcription.webp)

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

  1. Write something on Notability
  2. Sync to Dropbox
  3. After file updated on server execute process.py via auto_update.sh. This does the following
  4. Convert .pdf to SVG
  5. Process SVG
  6. From the processed guy generate HTML pages from SVG (index + page)
  7. 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)