Compare commits
72
Commits
2026.01.26
...
ec7e073431
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
ec7e073431 | ||
|
|
5bb5f3d711 | ||
|
|
8fc77c5a2f | ||
|
|
309822a0ca | ||
|
|
80d53ebcc3 | ||
|
|
3671b0d6b9 | ||
|
|
d0aef1331d | ||
|
|
f2f1de737d | ||
|
|
0f54fad9ba | ||
|
|
daf3d46eeb | ||
|
|
16004af7c1 | ||
|
|
45b57b4d13 | ||
|
|
629785d548 | ||
|
|
fb5684f8ef | ||
|
|
56030567ed | ||
|
|
6793522d93 | ||
|
|
67abceda9a | ||
|
|
cc5adf4cce | ||
|
|
04c79f2e0f | ||
|
|
4a41b51d37 | ||
|
|
3dc565e8df | ||
|
|
6e049e35e2 | ||
|
|
ee4292564a | ||
|
|
eeb7bd046f | ||
|
|
2d9790de88 | ||
|
|
633ff214a4 | ||
|
|
ceb03668b9 | ||
|
|
d7d26c57f4 | ||
|
|
8e792dd4e2 | ||
|
|
9c94191583 | ||
|
|
d51ef2ad69 | ||
|
|
e72cc79c6a | ||
|
|
667c0babcb | ||
|
|
a8950c42e2 | ||
|
|
91edf64a72 | ||
|
|
296c47be36 | ||
|
|
5779444d4b | ||
|
|
c072f903db | ||
|
|
64ad1ab3e0 | ||
|
|
20e61d6259 | ||
|
|
a750761f61 | ||
|
|
03b3880622 | ||
|
|
f4af54228a | ||
|
|
518d2b3bb6 | ||
|
|
7043f08dab | ||
|
|
d0bc7d8a3a | ||
|
|
438fae4fef | ||
|
|
a7cd1d033a | ||
|
|
c4890f31af | ||
|
|
c44245189a | ||
|
|
c7b8e4a30d | ||
|
|
20fe1a7e30 | ||
|
|
25931758f7 | ||
|
|
daf57ef22c | ||
|
|
1d2d727fa2 | ||
|
|
11bd7107d2 | ||
|
|
95d33047fa | ||
|
|
523b896053 | ||
|
|
9152455227 | ||
|
|
c0fdaca4d0 | ||
|
|
8312a842c1 | ||
|
|
07138197cb | ||
|
|
ed78ffc248 | ||
|
|
4add36f5ca | ||
|
|
40e63150a6 | ||
|
|
4dba0ec0cd | ||
|
|
e6f780c38b | ||
|
|
0f7f73a6a0 | ||
|
|
aa71d02036 | ||
|
|
f873fcee11 | ||
|
|
51ef3de672 | ||
|
|
13976b7235 |
@@ -103,3 +103,4 @@ po/insert-header.sed
|
|||||||
/help/*/*.mo
|
/help/*/*.mo
|
||||||
/help/*/*.stamp
|
/help/*/*.stamp
|
||||||
.aider*
|
.aider*
|
||||||
|
.worktrees/
|
||||||
|
|||||||
@@ -14,6 +14,16 @@ This repository is a screen reader. Prioritize accessibility, correctness, and s
|
|||||||
- `meson compile -C _build`
|
- `meson compile -C _build`
|
||||||
- `meson install -C _build`
|
- `meson install -C _build`
|
||||||
|
|
||||||
|
## Runtime target and testing rules
|
||||||
|
- Make source changes in this repo, not in `~/.local/lib/python*/site-packages/cthulhu/`, unless the user explicitly asks for an installed-package hotfix.
|
||||||
|
- If you confirm the active import comes from `~/.local/...`, that does **not** mean you should edit there. It means you should update the repo and then run `./build-local.sh` to replace the installed copy for testing.
|
||||||
|
- Default test/apply workflow for local Cthulhu fixes:
|
||||||
|
- edit repo files
|
||||||
|
- run `./build-local.sh`
|
||||||
|
- reproduce/test against the refreshed `~/.local` install
|
||||||
|
- If repo and installed behavior differ, prefer rebuilding with `./build-local.sh` over patching the installed package directly.
|
||||||
|
- Treat direct edits under `~/.local/.../cthulhu/` as an exception path that requires explicit user approval.
|
||||||
|
|
||||||
## Coding guidelines
|
## Coding guidelines
|
||||||
- **When modifying existing code:** follow the surrounding code’s conventions.
|
- **When modifying existing code:** follow the surrounding code’s conventions.
|
||||||
- **When writing new code from scratch:** prefer
|
- **When writing new code from scratch:** prefer
|
||||||
@@ -55,3 +65,8 @@ This repository is a screen reader. Prioritize accessibility, correctness, and s
|
|||||||
## Meson install reminder (important)
|
## Meson install reminder (important)
|
||||||
- If you add new Python modules under `src/cthulhu/`, update `src/cthulhu/meson.build` so they get installed (otherwise imports can fail after install).
|
- If you add new Python modules under `src/cthulhu/`, update `src/cthulhu/meson.build` so they get installed (otherwise imports can fail after install).
|
||||||
- If you add a new plugin directory, update `src/cthulhu/plugins/meson.build` and add a `meson.build` in the plugin directory.
|
- If you add a new plugin directory, update `src/cthulhu/plugins/meson.build` and add a `meson.build` in the plugin directory.
|
||||||
|
|
||||||
|
## Common Cthulhu agent mistakes
|
||||||
|
- Checking the import origin, seeing `~/.local/...`, and then editing the installed package instead of the repo.
|
||||||
|
- Forgetting that `./build-local.sh` is the normal way to apply repo changes into the installed copy for testing.
|
||||||
|
- Making repo fixes and then diagnosing the old installed copy without rebuilding.
|
||||||
|
|||||||
@@ -1,182 +0,0 @@
|
|||||||
# CLAUDE.md
|
|
||||||
|
|
||||||
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
|
|
||||||
|
|
||||||
## Project Overview
|
|
||||||
|
|
||||||
Cthulhu is a fork of the Orca screen reader, designed as a desktop-agnostic screen reader for Linux. It works with applications supporting AT-SPI (Assistive Technology Service Provider Interface) including GTK+, Qt, Java Swing, LibreOffice, Gecko, and WebKitGtk.
|
|
||||||
|
|
||||||
**Key differentiators from Orca:**
|
|
||||||
- Desktop-agnostic: Works on KDE, XFCE, i3, Sway, and other environments (not just GNOME)
|
|
||||||
- Extensible plugin architecture using pluggy framework
|
|
||||||
- D-Bus remote control interface for external automation
|
|
||||||
- Enhanced support for tiling window managers
|
|
||||||
|
|
||||||
## Build Commands
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# Local development build (installs to ~/.local)
|
|
||||||
./build-local.sh
|
|
||||||
|
|
||||||
# Test local installation
|
|
||||||
./test-local.sh
|
|
||||||
|
|
||||||
# Run local version
|
|
||||||
~/.local/bin/cthulhu
|
|
||||||
|
|
||||||
# Clean build artifacts and local installation
|
|
||||||
./clean-local.sh
|
|
||||||
./clean-local.sh --build-only # Clean only build artifacts
|
|
||||||
./clean-local.sh --install-only # Remove only local installation
|
|
||||||
|
|
||||||
# Manual Meson build
|
|
||||||
meson setup _build --prefix=$HOME/.local
|
|
||||||
meson compile -C _build
|
|
||||||
meson install -C _build
|
|
||||||
```
|
|
||||||
|
|
||||||
## Testing
|
|
||||||
|
|
||||||
Manual testing is recommended. The legacy keystroke-driven test harness has been removed.
|
|
||||||
|
|
||||||
## Architecture Overview
|
|
||||||
|
|
||||||
### Core Components (`src/cthulhu/`)
|
|
||||||
|
|
||||||
**Event & Input Processing:**
|
|
||||||
- `event_manager.py` - Central AT-SPI event handling and routing
|
|
||||||
- `input_event_manager.py` - Keyboard/mouse input processing
|
|
||||||
- `input_event.py` - Input event data structures
|
|
||||||
- `focus_manager.py` - Focus tracking across applications
|
|
||||||
|
|
||||||
**Accessibility Layer (ax_* files):**
|
|
||||||
- `ax_object.py` - Core accessible object abstraction
|
|
||||||
- `ax_utilities.py` - Common accessibility utilities
|
|
||||||
- `ax_utilities_role.py` - Role-based accessibility helpers
|
|
||||||
- `ax_utilities_collection.py` - Collection traversal utilities
|
|
||||||
- `ax_text.py`, `ax_table.py`, `ax_component.py` - Specialized interfaces
|
|
||||||
|
|
||||||
**Output Systems:**
|
|
||||||
- `speech.py`, `speechdispatcherfactory.py` - Speech synthesis
|
|
||||||
- `braille.py`, `braille_generator.py` - Braille display support
|
|
||||||
- `speech_generator.py` - Generate speech from accessible objects
|
|
||||||
- `sound.py`, `sound_generator.py` - Audio cue generation
|
|
||||||
|
|
||||||
**Script System:**
|
|
||||||
- `script_manager.py` - Loads/manages application-specific scripts
|
|
||||||
- `script.py` - Base script class
|
|
||||||
- `scripts/default.py` - Default behavior for all applications
|
|
||||||
- `scripts/apps/` - Application-specific customizations (Firefox, LibreOffice, etc.)
|
|
||||||
- `scripts/toolkits/` - Toolkit-specific scripts (GTK, Qt, WebKitGtk)
|
|
||||||
- `scripts/web/` - Web content handling
|
|
||||||
|
|
||||||
**Plugin System:**
|
|
||||||
- `plugin.py` - Base plugin class with `cthulhu_hookimpl` decorator
|
|
||||||
- `plugin_system_manager.py` - Plugin discovery and lifecycle
|
|
||||||
- `plugins/` - Built-in plugins (OCR, Clipboard, SpeechHistory, etc.)
|
|
||||||
|
|
||||||
**D-Bus Remote Control:**
|
|
||||||
- `dbus_service.py` - D-Bus service implementation
|
|
||||||
- Service: `org.stormux.Cthulhu.Service`
|
|
||||||
- Path: `/org/stormux/Cthulhu/Service`
|
|
||||||
|
|
||||||
**Settings & State:**
|
|
||||||
- `settings_manager.py` - User preferences persistence
|
|
||||||
- `settings.py` - Default settings values
|
|
||||||
- `cthulhu_state.py` - Runtime state (active script, focus, etc.)
|
|
||||||
|
|
||||||
### Key Design Patterns
|
|
||||||
|
|
||||||
**Script Inheritance:** Application scripts extend `default.Script`, overriding methods for custom behavior. The script manager selects scripts based on the focused application.
|
|
||||||
|
|
||||||
**Event Flow:** AT-SPI events → `event_manager` → active script's event handler → generators → output systems (speech/braille)
|
|
||||||
|
|
||||||
**Plugin Hooks:** Plugins implement hooks via `@cthulhu_hookimpl` decorator. Use `registerGestureByString()` for keybindings.
|
|
||||||
|
|
||||||
## Adding New Modules
|
|
||||||
|
|
||||||
When adding new Python modules under `src/cthulhu/`:
|
|
||||||
|
|
||||||
1. **Update `src/cthulhu/meson.build`** - Add the `.py` file to `cthulhu_python_sources`
|
|
||||||
|
|
||||||
2. **For new script modules** (e.g., `scripts/newmodule/`):
|
|
||||||
- Create the directory with `__init__.py` and `script.py`
|
|
||||||
- Add `meson.build` in the new directory
|
|
||||||
- Add subdirectory to `src/cthulhu/scripts/meson.build`
|
|
||||||
|
|
||||||
3. **For new plugins**:
|
|
||||||
- Create directory under `src/cthulhu/plugins/` with:
|
|
||||||
- `__init__.py`, `plugin.py`, `plugin.info`, `meson.build`
|
|
||||||
- Add subdirectory to `src/cthulhu/plugins/meson.build`
|
|
||||||
|
|
||||||
## Plugin Structure
|
|
||||||
|
|
||||||
```
|
|
||||||
src/cthulhu/plugins/MyPlugin/
|
|
||||||
├── __init__.py # from .plugin import *
|
|
||||||
├── plugin.py # Main implementation extending Plugin
|
|
||||||
├── plugin.info # Metadata (name, version, description, etc.)
|
|
||||||
└── meson.build # install_data for .py and .info files
|
|
||||||
```
|
|
||||||
|
|
||||||
Example plugin.py:
|
|
||||||
```python
|
|
||||||
from cthulhu.plugin import Plugin, cthulhu_hookimpl
|
|
||||||
|
|
||||||
class MyPlugin(Plugin):
|
|
||||||
@cthulhu_hookimpl
|
|
||||||
def activate(self, plugin=None):
|
|
||||||
if plugin is not None and plugin is not self:
|
|
||||||
return
|
|
||||||
self.registerGestureByString(self.myHandler, "description", "kb:cthulhu+key")
|
|
||||||
|
|
||||||
def myHandler(self, script=None, inputEvent=None):
|
|
||||||
self.app.getDynamicApiManager().getAPI('CthulhuState').activeScript.presentMessage('Message')
|
|
||||||
return True
|
|
||||||
```
|
|
||||||
|
|
||||||
## D-Bus Testing
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# Check service availability
|
|
||||||
busctl --user list | grep Cthulhu
|
|
||||||
|
|
||||||
# Get version
|
|
||||||
busctl --user call org.stormux.Cthulhu.Service /org/stormux/Cthulhu/Service \
|
|
||||||
org.stormux.Cthulhu.Service GetVersion
|
|
||||||
|
|
||||||
# Present message
|
|
||||||
busctl --user call org.stormux.Cthulhu.Service /org/stormux/Cthulhu/Service \
|
|
||||||
org.stormux.Cthulhu.Service PresentMessage s "Hello"
|
|
||||||
|
|
||||||
# Introspect available methods
|
|
||||||
busctl --user introspect org.stormux.Cthulhu.Service /org/stormux/Cthulhu/Service
|
|
||||||
```
|
|
||||||
|
|
||||||
## Key Keybindings
|
|
||||||
|
|
||||||
- `Cthulhu+Space` - Open preferences
|
|
||||||
- `Cthulhu+H` - Enter learn mode
|
|
||||||
- `Cthulhu+Ctrl+Alt+Shift+Q` - Toggle sleep mode for current application
|
|
||||||
- `Cthulhu+Q` - Quit Cthulhu
|
|
||||||
|
|
||||||
## Self-Voicing Interface
|
|
||||||
|
|
||||||
External applications can speak through Cthulhu via Unix socket:
|
|
||||||
```bash
|
|
||||||
echo "Hello world" | socat - UNIX-CLIENT:/tmp/cthulhu.sock
|
|
||||||
echo "<!#APPEND#!>Without interrupt" | socat - UNIX-CLIENT:/tmp/cthulhu.sock
|
|
||||||
```
|
|
||||||
|
|
||||||
## Dependencies
|
|
||||||
|
|
||||||
**Core:** Python 3.9+, pygobject-3.0, gtk+-3.0, AT-SPI2, ATK
|
|
||||||
**Speech:** python-speechd, gstreamer-1.0
|
|
||||||
**Plugins:** pluggy, python-dasbus (optional, for D-Bus)
|
|
||||||
**Braille:** BrlTTY, BrlAPI, liblouis (optional)
|
|
||||||
|
|
||||||
## Repository
|
|
||||||
|
|
||||||
- **Main repo:** https://git.stormux.org/storm/cthulhu
|
|
||||||
- **Community:** IRC #stormux on irc.stormux.org
|
|
||||||
- **Email patches:** storm_dragon@stormux.org
|
|
||||||
@@ -98,11 +98,11 @@ git status
|
|||||||
|
|
||||||
## Dependencies
|
## Dependencies
|
||||||
|
|
||||||
- **Runtime**: python3, pygobject-3.0, pluggy, AT-SPI2
|
- **Runtime**: python3, pygobject-3.0, pluggy, tomlkit, AT-SPI2
|
||||||
- **Build**: meson, ninja, gettext
|
- **Build**: meson, ninja, gettext
|
||||||
- **Optional**: dasbus (for D-Bus service), BrlTTY, speech-dispatcher, piper-tts
|
- **Optional**: dasbus (for D-Bus service), BrlTTY, speech-dispatcher, piper-tts
|
||||||
|
|
||||||
Install build dependencies on Arch Linux:
|
Install build dependencies on Arch Linux:
|
||||||
```bash
|
```bash
|
||||||
sudo pacman -S meson ninja gettext python-dasbus
|
sudo pacman -S meson ninja gettext python-dasbus python-tomlkit
|
||||||
```
|
```
|
||||||
|
|||||||
@@ -179,6 +179,7 @@ Ensure you have the development dependencies installed:
|
|||||||
```bash
|
```bash
|
||||||
sudo pacman -S python python-gobject gtk3 at-spi2-core at-spi2-atk \
|
sudo pacman -S python python-gobject gtk3 at-spi2-core at-spi2-atk \
|
||||||
python-speechd gstreamer python-pluggy python-dasbus \
|
python-speechd gstreamer python-pluggy python-dasbus \
|
||||||
|
python-tomlkit \
|
||||||
meson ninja pkgconf intltool gettext
|
meson ninja pkgconf intltool gettext
|
||||||
```
|
```
|
||||||
|
|
||||||
@@ -187,6 +188,7 @@ sudo pacman -S python python-gobject gtk3 at-spi2-core at-spi2-atk \
|
|||||||
sudo apt install python3 python3-gi python3-gi-cairo gir1.2-gtk-3.0 \
|
sudo apt install python3 python3-gi python3-gi-cairo gir1.2-gtk-3.0 \
|
||||||
at-spi2-core libatk-adaptor python3-speechd \
|
at-spi2-core libatk-adaptor python3-speechd \
|
||||||
gstreamer1.0-plugins-base python3-pluggy python3-dasbus \
|
gstreamer1.0-plugins-base python3-pluggy python3-dasbus \
|
||||||
|
python3-tomlkit \
|
||||||
meson ninja-build pkg-config intltool gettext
|
meson ninja-build pkg-config intltool gettext
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|||||||
@@ -26,6 +26,31 @@ for cmd in meson ninja python3; do
|
|||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
|
||||||
|
if ! python3 -c "import tomlkit" 2>/dev/null; then
|
||||||
|
echo "Error: Python module tomlkit is not installed"
|
||||||
|
echo "Please install: python-tomlkit"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
getPythonSiteDir() {
|
||||||
|
python3 -c 'import sys; print(f"{sys.version_info.major}.{sys.version_info.minor}")'
|
||||||
|
}
|
||||||
|
|
||||||
|
removeExistingLocalInstall() {
|
||||||
|
local pythonSite packageDir binPath desktopFile manPage
|
||||||
|
pythonSite="$HOME/.local/lib/python$(getPythonSiteDir)/site-packages"
|
||||||
|
packageDir="$pythonSite/cthulhu"
|
||||||
|
binPath="$HOME/.local/bin/cthulhu"
|
||||||
|
desktopFile="$HOME/.local/share/applications/cthulhu.desktop"
|
||||||
|
manPage="$HOME/.local/share/man/man1/cthulhu.1"
|
||||||
|
|
||||||
|
echo "Removing existing local installation targets..."
|
||||||
|
rm -f "$binPath"
|
||||||
|
rm -rf "$packageDir"
|
||||||
|
rm -f "$desktopFile"
|
||||||
|
rm -f "$manPage"
|
||||||
|
}
|
||||||
|
|
||||||
# Check for optional dependencies
|
# Check for optional dependencies
|
||||||
missingOptional=()
|
missingOptional=()
|
||||||
if ! python3 -c "import gi" 2>/dev/null; then
|
if ! python3 -c "import gi" 2>/dev/null; then
|
||||||
@@ -57,6 +82,7 @@ meson compile -C _build
|
|||||||
|
|
||||||
# Install
|
# Install
|
||||||
echo "Installing Cthulhu to ~/.local..."
|
echo "Installing Cthulhu to ~/.local..."
|
||||||
|
removeExistingLocalInstall
|
||||||
meson install -C _build
|
meson install -C _build
|
||||||
|
|
||||||
# Update desktop database and icon cache
|
# Update desktop database and icon cache
|
||||||
|
|||||||
@@ -8,13 +8,11 @@ set -e # Exit on error
|
|||||||
|
|
||||||
# Colors for output (only if stdout is a terminal)
|
# Colors for output (only if stdout is a terminal)
|
||||||
if [[ -t 1 ]]; then
|
if [[ -t 1 ]]; then
|
||||||
RED='\033[0;31m'
|
|
||||||
GREEN='\033[0;32m'
|
GREEN='\033[0;32m'
|
||||||
YELLOW='\033[1;33m'
|
YELLOW='\033[1;33m'
|
||||||
BLUE='\033[0;34m'
|
BLUE='\033[0;34m'
|
||||||
NC='\033[0m' # No Color
|
NC='\033[0m' # No Color
|
||||||
else
|
else
|
||||||
RED=''
|
|
||||||
GREEN=''
|
GREEN=''
|
||||||
YELLOW=''
|
YELLOW=''
|
||||||
BLUE=''
|
BLUE=''
|
||||||
@@ -56,12 +54,6 @@ if [[ $REPLY =~ ^[Yy]$ ]]; then
|
|||||||
|
|
||||||
# Remove data files
|
# Remove data files
|
||||||
|
|
||||||
# Remove desktop files
|
|
||||||
if [[ -f "$HOME/.local/share/applications/cthulhu-autostart.desktop" ]]; then
|
|
||||||
rm -f "$HOME/.local/share/applications/cthulhu-autostart.desktop"
|
|
||||||
echo " Removed: ~/.local/share/applications/cthulhu-autostart.desktop"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Remove icons
|
# Remove icons
|
||||||
for size in 16x16 22x22 24x24 32x32 48x48 256x256 scalable symbolic; do
|
for size in 16x16 22x22 24x24 32x32 48x48 256x256 scalable symbolic; do
|
||||||
icon_path="$HOME/.local/share/icons/hicolor/$size/apps"
|
icon_path="$HOME/.local/share/icons/hicolor/$size/apps"
|
||||||
|
|||||||
@@ -1,11 +0,0 @@
|
|||||||
[Desktop Entry]
|
|
||||||
Type=Application
|
|
||||||
Name=Cthulhu Screen Reader
|
|
||||||
Exec=cthulhu
|
|
||||||
NoDisplay=true
|
|
||||||
# Desktop-neutral autostart - no GNOME-specific conditions
|
|
||||||
# Users can enable/disable via their desktop environment's accessibility settings
|
|
||||||
# or by adding/removing this file from ~/.config/autostart/
|
|
||||||
X-GNOME-AutoRestart=true
|
|
||||||
Categories=Accessibility;
|
|
||||||
Keywords=screen;reader;accessibility;speech;braille;
|
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
# Maintainer: Storm Dragon <storm_dragon@stormux.org>
|
# Maintainer: Storm Dragon <storm_dragon@stormux.org>
|
||||||
|
|
||||||
pkgname=cthulhu
|
pkgname=cthulhu
|
||||||
pkgver=2026.01.26
|
pkgver=2026.03.02
|
||||||
pkgrel=1
|
pkgrel=1
|
||||||
pkgdesc="Desktop-agnostic screen reader with plugin system, forked from Orca"
|
pkgdesc="Desktop-agnostic screen reader with plugin system, forked from Orca"
|
||||||
url="https://git.stormux.org/storm/cthulhu"
|
url="https://git.stormux.org/storm/cthulhu"
|
||||||
@@ -14,7 +14,7 @@ depends=(
|
|||||||
python-gobject
|
python-gobject
|
||||||
python-cairo
|
python-cairo
|
||||||
gtk3
|
gtk3
|
||||||
|
python-pywayland
|
||||||
# Audio and speech
|
# Audio and speech
|
||||||
speech-dispatcher
|
speech-dispatcher
|
||||||
gstreamer
|
gstreamer
|
||||||
@@ -27,6 +27,7 @@ depends=(
|
|||||||
|
|
||||||
# Plugin system and D-Bus remote control
|
# Plugin system and D-Bus remote control
|
||||||
python-pluggy
|
python-pluggy
|
||||||
|
python-tomlkit
|
||||||
python-dasbus
|
python-dasbus
|
||||||
|
|
||||||
# AI Assistant dependencies (for screenshots, HTTP requests, and actions)
|
# AI Assistant dependencies (for screenshots, HTTP requests, and actions)
|
||||||
@@ -83,7 +84,7 @@ makedepends=(
|
|||||||
)
|
)
|
||||||
install=cthulhu.install
|
install=cthulhu.install
|
||||||
source=(
|
source=(
|
||||||
"git+https://git.stormux.org/storm/cthulhu.git"
|
"git+https://git.stormux.org/storm/cthulhu.git#tag=${pkgver}"
|
||||||
"cthulhu.install"
|
"cthulhu.install"
|
||||||
)
|
)
|
||||||
b2sums=(
|
b2sums=(
|
||||||
@@ -91,11 +92,6 @@ b2sums=(
|
|||||||
'SKIP'
|
'SKIP'
|
||||||
)
|
)
|
||||||
|
|
||||||
pkgver() {
|
|
||||||
cd cthulhu
|
|
||||||
grep "^version = " src/cthulhu/cthulhuVersion.py | sed 's/version = "\(.*\)"/\1/'
|
|
||||||
}
|
|
||||||
|
|
||||||
build() {
|
build() {
|
||||||
cd cthulhu
|
cd cthulhu
|
||||||
arch-meson _build
|
arch-meson _build
|
||||||
|
|||||||
@@ -0,0 +1,46 @@
|
|||||||
|
# Cthulhu Logging Guidelines
|
||||||
|
|
||||||
|
This document defines the preferred format for debug logging in Cthulhu.
|
||||||
|
The goal is to keep logs consistent, searchable, and easy to scan.
|
||||||
|
|
||||||
|
## Helpers
|
||||||
|
|
||||||
|
Use the helpers in `cthulhu.debug` for new logs:
|
||||||
|
|
||||||
|
- `debug.print_log(level, prefix, message, reason=None, timestamp=False, stack=False)`
|
||||||
|
- `debug.print_log_tokens(level, prefix, tokens, reason=None, timestamp=False, stack=False)`
|
||||||
|
|
||||||
|
These helpers ensure the prefix and optional reason tag are formatted consistently.
|
||||||
|
Timestamps are appended at the end of the message when enabled.
|
||||||
|
|
||||||
|
## Prefixes
|
||||||
|
|
||||||
|
Use short, uppercase prefixes that identify the subsystem:
|
||||||
|
|
||||||
|
- `EVENT MANAGER`
|
||||||
|
- `FOCUS MANAGER`
|
||||||
|
- `INPUT EVENT`
|
||||||
|
- `SCRIPT MANAGER`
|
||||||
|
- `WEB`
|
||||||
|
|
||||||
|
## Messages
|
||||||
|
|
||||||
|
- Keep messages short and action-focused.
|
||||||
|
- Do not include the prefix in the message.
|
||||||
|
- Prefer consistent verbs (e.g., "Not using …", "Setting …", "Ignoring …").
|
||||||
|
|
||||||
|
## Reason Tags
|
||||||
|
|
||||||
|
Use reason tags to explain decisions or early exits.
|
||||||
|
|
||||||
|
- Lowercase with hyphens (e.g., `focus-mode`, `no-active-script`).
|
||||||
|
- Use a short phrase rather than a full sentence.
|
||||||
|
- If a human-readable reason is already available, it can be used directly.
|
||||||
|
|
||||||
|
## Examples
|
||||||
|
|
||||||
|
```text
|
||||||
|
WEB: Not using caret navigation (reason=disabled)
|
||||||
|
FOCUS MANAGER: Setting locus of focus to existing locus of focus (reason=no-change)
|
||||||
|
SCRIPT MANAGER: Setting active script to [script] (reason=focus: active-window)
|
||||||
|
```
|
||||||
@@ -0,0 +1,51 @@
|
|||||||
|
# AT-SPI Document Selection Branch Handoff
|
||||||
|
|
||||||
|
Branch: `atspi-document-selection`
|
||||||
|
|
||||||
|
## Implemented
|
||||||
|
|
||||||
|
- Added document-wide AT-SPI selection normalization in
|
||||||
|
`src/cthulhu/ax_document_selection.py`.
|
||||||
|
- Reworked text-selection handling in `src/cthulhu/script_utilities.py` to use
|
||||||
|
the shared adapter where possible and fall back cleanly where not.
|
||||||
|
- Updated primary callers in the default and web scripts so copy/cut,
|
||||||
|
selection announcements, and selected-text queries use the shared selection
|
||||||
|
path.
|
||||||
|
- Added keyboard-driven clipboard announcement fallback in
|
||||||
|
`src/cthulhu/scripts/default.py`, including Wayland-specific policy changes.
|
||||||
|
- Fixed `build-local.sh` so rebuilding refreshes modified installed modules
|
||||||
|
under `~/.local`.
|
||||||
|
|
||||||
|
## Verified
|
||||||
|
|
||||||
|
- `python3 -m pytest -q tests/test_document_selection_regressions.py`
|
||||||
|
- `python3 -m pytest -q tests/test_default_script_clipboard_regressions.py`
|
||||||
|
- `python3 -m pytest -q tests/test_web_input_regressions.py`
|
||||||
|
- `HOME=/tmp/cthulhu-test-home python3 -m pytest -q tests`
|
||||||
|
- `./build-local.sh`
|
||||||
|
|
||||||
|
Latest full-suite result before handoff: `95 passed, 1 warning`.
|
||||||
|
|
||||||
|
## Still Open
|
||||||
|
|
||||||
|
- Browser link-text selection is still not reliable in Chromium/Edge and in
|
||||||
|
web-backed content like Steam.
|
||||||
|
- The current branch includes extra diagnostics around clipboard and selection
|
||||||
|
paths because they were useful during manual debugging.
|
||||||
|
- The newest attempted web fix is in `src/cthulhu/scripts/web/script.py`, but
|
||||||
|
the manual repro still fails:
|
||||||
|
- selecting link text with `Shift+Left` / `Shift+Right`
|
||||||
|
- hearing no selection announcement
|
||||||
|
- then having copy behavior depend on fallback logic instead of real
|
||||||
|
selection state
|
||||||
|
|
||||||
|
## Useful Files For Follow-Up
|
||||||
|
|
||||||
|
- `src/cthulhu/ax_document_selection.py`
|
||||||
|
- `src/cthulhu/script_utilities.py`
|
||||||
|
- `src/cthulhu/scripts/default.py`
|
||||||
|
- `src/cthulhu/scripts/web/script.py`
|
||||||
|
- `src/cthulhu/scripts/web/script_utilities.py`
|
||||||
|
- `tests/test_document_selection_regressions.py`
|
||||||
|
- `tests/test_default_script_clipboard_regressions.py`
|
||||||
|
- `tests/test_web_input_regressions.py`
|
||||||
+1
-1
@@ -290,7 +290,7 @@ toggle the reading of tables, either by single cell or whole row.
|
|||||||
.B Cthulhu
|
.B Cthulhu
|
||||||
user preferences directory
|
user preferences directory
|
||||||
.TP
|
.TP
|
||||||
.BI ~/.local/share/cthulhu/user-settings.conf
|
.BI ~/.local/share/cthulhu/user-settings.toml
|
||||||
.B Cthulhu
|
.B Cthulhu
|
||||||
user preferences configuration file.
|
user preferences configuration file.
|
||||||
.TP
|
.TP
|
||||||
|
|||||||
@@ -0,0 +1,171 @@
|
|||||||
|
# Sounds Tab Design
|
||||||
|
|
||||||
|
Date: 2026-04-05
|
||||||
|
|
||||||
|
## Context
|
||||||
|
|
||||||
|
Cthulhu currently stores several non-speech sound settings in the general settings file, but the preferences dialog does not present them coherently:
|
||||||
|
|
||||||
|
- The General tab contains an inline Sound section for backend, theme, and role-sound presentation.
|
||||||
|
- The progress-bar beep checkbox lives in the General tab's progress-bar section.
|
||||||
|
- `soundVolume` exists in settings and the user's active profile, but there is no UI control for it.
|
||||||
|
- `enableSound`, `playSoundForRole`, `playSoundForState`, `playSoundForPositionInSet`, and `playSoundForValue` exist as persisted settings but are not currently exposed in the dialog.
|
||||||
|
- `progressBarBeepInterval` exists in runtime defaults but is not part of the normal persisted general-settings key list.
|
||||||
|
|
||||||
|
The result is that sound-related behavior is split across the dialog and some active settings cannot be inspected or changed from the UI.
|
||||||
|
|
||||||
|
## Goals
|
||||||
|
|
||||||
|
- Add a dedicated `Sounds` preferences tab.
|
||||||
|
- Move currently exposed sound-related controls out of `General` and into `Sounds`.
|
||||||
|
- Move the progress-bar beep option into `Sounds` while leaving the rest of the progress-bar section in `General`.
|
||||||
|
- Expose currently hidden sound-related settings in the UI.
|
||||||
|
- Add a UI control for `soundVolume`.
|
||||||
|
- Expose and persist `progressBarBeepInterval`.
|
||||||
|
- Preserve the existing settings model and save format.
|
||||||
|
- Avoid clobbering unrelated settings when saving preferences.
|
||||||
|
|
||||||
|
## Non-Goals
|
||||||
|
|
||||||
|
- No refactor of the broader preferences architecture.
|
||||||
|
- No changes to sound playback implementation outside what is needed to load and save settings correctly.
|
||||||
|
- No new settings schema beyond persisting the existing hidden `progressBarBeepInterval`.
|
||||||
|
- No dynamic enable/disable logic for sound controls in this pass.
|
||||||
|
|
||||||
|
## Design Summary
|
||||||
|
|
||||||
|
Add a new notebook page labeled `Sounds` and make it the single home for non-speech sound configuration. Remove the inline Sound frame from `General`. Keep the existing progress-bar speech/braille controls and shared progress-bar behavior controls in `General`, but move beep-specific controls into `Sounds`.
|
||||||
|
|
||||||
|
The new tab will use existing settings keys wherever possible and will save through the existing `prefsDict` and settings-manager flow.
|
||||||
|
|
||||||
|
## Sounds Tab Layout
|
||||||
|
|
||||||
|
The `Sounds` tab will contain three sections.
|
||||||
|
|
||||||
|
### Output
|
||||||
|
|
||||||
|
- `enableSound` checkbox
|
||||||
|
- `soundVolume` slider
|
||||||
|
- `soundSink` combo box
|
||||||
|
|
||||||
|
`soundVolume` should be represented by a native `GtkScale` and persisted back to the existing floating-point `soundVolume` setting. The control should initialize from `prefsDict.get("soundVolume", settings.soundVolume)`.
|
||||||
|
|
||||||
|
For this implementation, the slider should match the stored setting directly rather than introducing a new percentage representation. That keeps the implementation small and avoids conversion-only complexity in a settings path that already exists.
|
||||||
|
|
||||||
|
### Presentation
|
||||||
|
|
||||||
|
- `soundTheme` combo box
|
||||||
|
- `roleSoundPresentation` combo box
|
||||||
|
- `playSoundForRole` checkbox
|
||||||
|
- `playSoundForState` checkbox
|
||||||
|
- `playSoundForPositionInSet` checkbox
|
||||||
|
- `playSoundForValue` checkbox
|
||||||
|
|
||||||
|
These controls will expose already-existing settings and use the same `prefsDict` update pattern already used by the current dialog.
|
||||||
|
|
||||||
|
### Alerts
|
||||||
|
|
||||||
|
- `beepProgressBarUpdates` checkbox
|
||||||
|
- `progressBarBeepInterval` spin button
|
||||||
|
|
||||||
|
This section controls only beep-based progress-bar alerts. The label should make it clear that the interval is beep-specific, not the general progress-bar announcement interval.
|
||||||
|
|
||||||
|
## General Tab Changes
|
||||||
|
|
||||||
|
Keep these controls in `General`:
|
||||||
|
|
||||||
|
- `speakProgressBarUpdates`
|
||||||
|
- `brailleProgressBarUpdates`
|
||||||
|
- `progressBarUpdateInterval`
|
||||||
|
- `progressBarVerbosity`
|
||||||
|
- `ignoreStatusBarProgressBars`
|
||||||
|
|
||||||
|
Remove these from `General`:
|
||||||
|
|
||||||
|
- the inline Sound frame
|
||||||
|
- `beepProgressBarUpdates`
|
||||||
|
|
||||||
|
This preserves the current organization for general progress-bar announcement behavior while moving sound-only concerns into the new tab.
|
||||||
|
|
||||||
|
## Settings and Persistence
|
||||||
|
|
||||||
|
### Existing Keys Reused
|
||||||
|
|
||||||
|
The new UI will continue to use the existing settings keys:
|
||||||
|
|
||||||
|
- `enableSound`
|
||||||
|
- `soundVolume`
|
||||||
|
- `soundSink`
|
||||||
|
- `soundTheme`
|
||||||
|
- `roleSoundPresentation`
|
||||||
|
- `playSoundForRole`
|
||||||
|
- `playSoundForState`
|
||||||
|
- `playSoundForPositionInSet`
|
||||||
|
- `playSoundForValue`
|
||||||
|
- `beepProgressBarUpdates`
|
||||||
|
|
||||||
|
### Persisted Hidden Key
|
||||||
|
|
||||||
|
Add `progressBarBeepInterval` to the persisted general-settings key list so it round-trips through:
|
||||||
|
|
||||||
|
- defaults in `settings.py`
|
||||||
|
- settings-manager general settings
|
||||||
|
- TOML backend save/load
|
||||||
|
- `prefsDict` in the preferences dialog
|
||||||
|
|
||||||
|
This avoids the current mismatch where beep interval exists as a runtime default but is not part of the normal persisted general-settings path.
|
||||||
|
|
||||||
|
### Save Behavior
|
||||||
|
|
||||||
|
The implementation should continue to update individual keys in `prefsDict` and then rely on the existing general-settings save flow. No bulk replacement of the whole settings structure should be introduced.
|
||||||
|
|
||||||
|
This is specifically intended to avoid accidental overwrites of unrelated settings already present in `user-settings.toml`.
|
||||||
|
|
||||||
|
## Default Values
|
||||||
|
|
||||||
|
- Keep `progressBarUpdateInterval = 10` as the default for speech and braille progress-bar updates.
|
||||||
|
- Keep `progressBarBeepInterval = 0` as the default for beep-based progress-bar updates.
|
||||||
|
- Keep `soundVolume = 0.5` as the existing default unless the user explicitly changes it.
|
||||||
|
|
||||||
|
The new UI should reflect these values accurately on load.
|
||||||
|
|
||||||
|
## Accessibility
|
||||||
|
|
||||||
|
Use native GTK controls and follow the existing preferences-dialog patterns:
|
||||||
|
|
||||||
|
- every label must be associated with its control via `mnemonic_widget`
|
||||||
|
- checkboxes should use the existing `checkButtonToggled` convention when possible
|
||||||
|
- combo boxes should keep proper `label-for` / `labelled-by` relationships
|
||||||
|
- no custom-drawn controls
|
||||||
|
- no keyboard traps
|
||||||
|
|
||||||
|
The new tab should be fully reachable with standard tab navigation.
|
||||||
|
|
||||||
|
## Implementation Notes
|
||||||
|
|
||||||
|
Expected files to change:
|
||||||
|
|
||||||
|
- `src/cthulhu/cthulhu-setup.ui`
|
||||||
|
- `src/cthulhu/cthulhu_gui_prefs.py`
|
||||||
|
- `src/cthulhu/settings.py`
|
||||||
|
|
||||||
|
Implementation should:
|
||||||
|
|
||||||
|
- add the new notebook page and move or recreate the relevant widgets there
|
||||||
|
- initialize and save the new sound controls using existing dialog patterns
|
||||||
|
- add explicit handling for `soundVolume`
|
||||||
|
- add explicit handling for `progressBarBeepInterval`
|
||||||
|
- keep all unrelated preference behavior unchanged
|
||||||
|
|
||||||
|
## Verification
|
||||||
|
|
||||||
|
The implementation should be considered complete only after all of the following are checked:
|
||||||
|
|
||||||
|
1. The preferences dialog opens and the new `Sounds` tab is present.
|
||||||
|
2. Existing sound settings load into the correct controls.
|
||||||
|
3. Changing sound settings updates `prefsDict` without breaking unrelated settings.
|
||||||
|
4. Saving preferences preserves unrelated keys in `user-settings.toml`.
|
||||||
|
5. `progressBarBeepInterval` is written and reloaded correctly.
|
||||||
|
6. The General tab still handles speech/braille progress-bar settings correctly.
|
||||||
|
7. Touched Python files pass compile checks.
|
||||||
|
8. Manual verification confirms keyboard navigation and label association remain intact.
|
||||||
@@ -0,0 +1,117 @@
|
|||||||
|
# Guarded Mouse Review Wayland Backport
|
||||||
|
|
||||||
|
## Summary
|
||||||
|
|
||||||
|
Backport Orca's modern mouse review split into Cthulhu in a conservative way. Keep the current X11 `Wnck` plus `mouse:abs` implementation as the existing path. Add a second path that uses `Atspi.Device` pointer monitoring only when the local AT-SPI version is new enough and the compositor/device actually grants `POINTER_MONITOR`. If either condition fails, Cthulhu stays on the current behavior.
|
||||||
|
|
||||||
|
This is explicitly an X-safe design. The X11 path remains first-class and unchanged in behavior. Wayland support is opportunistic and must fail closed.
|
||||||
|
|
||||||
|
## Current State
|
||||||
|
|
||||||
|
- Cthulhu mouse review currently depends on `Wnck` window lookup and `mouse:abs` events in [mouse_review.py](/home/storm/devel/cthulhu/src/cthulhu/mouse_review.py).
|
||||||
|
- Recent local changes already avoid importing `Wnck` on Wayland to suppress the terminal warning, but they do not add functional Wayland mouse review.
|
||||||
|
- Cthulhu already has an `Atspi.Device` for keyboard handling in [input_event_manager.py](/home/storm/devel/cthulhu/src/cthulhu/input_event_manager.py), which is the required foundation for an Orca-style pointer-monitor path.
|
||||||
|
|
||||||
|
## Goals
|
||||||
|
|
||||||
|
- Preserve existing X11 mouse review behavior.
|
||||||
|
- Add a guarded Wayland-capable path modeled on Orca's `Atspi.Device` pointer monitoring.
|
||||||
|
- Avoid startup warnings from `Wnck` on Wayland.
|
||||||
|
- Avoid enabling any new path unless support is positively confirmed at runtime.
|
||||||
|
|
||||||
|
## Non-Goals
|
||||||
|
|
||||||
|
- No full Orca mouse review rewrite beyond the pointer-monitor split.
|
||||||
|
- No removal or semantic change of the current X11 `Wnck` path.
|
||||||
|
- No OCR refactor beyond existing `Wnck` gating already added.
|
||||||
|
- No assumption that Wayland mouse review will work everywhere; unsupported compositors must remain a no-op.
|
||||||
|
|
||||||
|
## Design
|
||||||
|
|
||||||
|
### Capability Detection
|
||||||
|
|
||||||
|
Mouse review will select its backend at runtime:
|
||||||
|
|
||||||
|
1. If AT-SPI version is at least `2.60`, or the pre-release threshold Orca used (`2.59.90`), Cthulhu may try the new backend.
|
||||||
|
2. The new backend must call `set_capabilities(... | POINTER_MONITOR)` on the existing `Atspi.Device`.
|
||||||
|
3. The new backend is considered available only if `POINTER_MONITOR` is present in the returned capability set.
|
||||||
|
4. If any of those checks fail, Cthulhu uses the existing X11 path.
|
||||||
|
|
||||||
|
This means X11 systems on older stacks continue to use the current implementation. Wayland systems with insufficient AT-SPI support do not partially enable mouse review.
|
||||||
|
|
||||||
|
### InputEventManager Extension
|
||||||
|
|
||||||
|
Extend [input_event_manager.py](/home/storm/devel/cthulhu/src/cthulhu/input_event_manager.py) with narrow pointer-monitor wrappers:
|
||||||
|
|
||||||
|
- `enable_pointer_monitoring() -> bool`
|
||||||
|
- `start_pointer_watcher(callback) -> None`
|
||||||
|
- `stop_pointer_watcher() -> None`
|
||||||
|
|
||||||
|
These wrappers should mirror Orca's error handling:
|
||||||
|
|
||||||
|
- return `False` on missing device or `GLib.GError`
|
||||||
|
- never raise into callers
|
||||||
|
- leave existing keyboard handling unchanged
|
||||||
|
|
||||||
|
No unrelated device-manager refactor is included in this pass.
|
||||||
|
|
||||||
|
### Mouse Review Backend Split
|
||||||
|
|
||||||
|
Update [mouse_review.py](/home/storm/devel/cthulhu/src/cthulhu/mouse_review.py) to maintain two internal paths:
|
||||||
|
|
||||||
|
- Legacy path:
|
||||||
|
- existing `Wnck` window tracking
|
||||||
|
- existing `mouse:abs` listener
|
||||||
|
- existing absolute-coordinate flow
|
||||||
|
- New path:
|
||||||
|
- register a `pointer-moved` watcher on the `Atspi.Device`
|
||||||
|
- use the accessible object and local coordinates delivered by AT-SPI
|
||||||
|
- if the event source is an application, resolve the containing window from the app's accessible children
|
||||||
|
- otherwise use the event object directly
|
||||||
|
|
||||||
|
The common object-presentation logic should stay shared as much as possible. Only the event source and coordinate acquisition differ.
|
||||||
|
|
||||||
|
### Safety Rules
|
||||||
|
|
||||||
|
- Do not change the old X11 path except for harmless factoring needed to share code.
|
||||||
|
- Do not force the new path on X11 systems that are currently using the legacy path successfully.
|
||||||
|
- If pointer monitoring disconnects, errors, or cannot be enabled, mouse review must behave as unavailable rather than falling into a broken mixed state.
|
||||||
|
- Existing `Wnck` suppression on Wayland remains in place.
|
||||||
|
|
||||||
|
## Testing
|
||||||
|
|
||||||
|
### Automated
|
||||||
|
|
||||||
|
Add focused regressions for:
|
||||||
|
|
||||||
|
- version/capability gating chooses the new backend only when allowed
|
||||||
|
- `enable_pointer_monitoring()` returns `False` on capability failure
|
||||||
|
- pointer watcher start/stop are no-ops when there is no device
|
||||||
|
- mouse review activation chooses the legacy backend when AT-SPI support is not available
|
||||||
|
- mouse review activation chooses the pointer-monitor backend when support is available
|
||||||
|
|
||||||
|
Tests should mock AT-SPI rather than requiring a compositor.
|
||||||
|
|
||||||
|
### Manual
|
||||||
|
|
||||||
|
X11:
|
||||||
|
|
||||||
|
- mouse review still enables and behaves as before
|
||||||
|
- no regressions in pointer routing or reviewed object presentation
|
||||||
|
|
||||||
|
Wayland:
|
||||||
|
|
||||||
|
- no `Wnck` warning on startup
|
||||||
|
- mouse review only enables when AT-SPI pointer monitoring is actually available
|
||||||
|
- if supported, pointer hover review works without breaking keyboard handling
|
||||||
|
- if unsupported, failure is clean and explicit rather than noisy or partially broken
|
||||||
|
|
||||||
|
## Risks
|
||||||
|
|
||||||
|
- The local environment here is still on AT-SPI `2.58.4`, so the new backend cannot be exercised live in this workspace.
|
||||||
|
- The guarded design limits that risk by preserving the existing path and enabling the new path only under the same runtime conditions Orca used.
|
||||||
|
- The main regression risk is accidental interaction with Cthulhu's existing keyboard `Atspi.Device`; that is why the change is limited to small wrappers plus mouse-review-specific watcher usage.
|
||||||
|
|
||||||
|
## Recommendation
|
||||||
|
|
||||||
|
Implement the guarded dual-path backport and stop there. Do not port broader Orca mouse review refactors in the same pass.
|
||||||
@@ -0,0 +1,355 @@
|
|||||||
|
# Wayland Compositor Event Interface For Churn Reduction
|
||||||
|
|
||||||
|
## Summary
|
||||||
|
|
||||||
|
Revise Cthulhu's event interface so Wayland session state can reduce AT-SPI churn before it reaches the current object-event pipeline. Keep `AT-SPI` authoritative for object semantics, text, selection, and actions. Add a small compositor-state normalization layer that is authoritative for desktop context such as active workspace, active top-level window, and focus routing during transitions.
|
||||||
|
|
||||||
|
This is not a Newton-style redesign. It is a conservative performance-oriented split intended to reduce queue growth, redundant script activation, and processing of stale events on Wayland systems while preserving existing accessibility semantics.
|
||||||
|
|
||||||
|
## Current State
|
||||||
|
|
||||||
|
- Cthulhu's main event flow is still centered on `Atspi.EventListener` and a single `event_manager` queue in `src/cthulhu/event_manager.py`.
|
||||||
|
- The current design already spends significant effort filtering spam, handling floods and deluges, recovering focus context, and pruning duplicate events.
|
||||||
|
- `src/cthulhu/input_event_manager.py` already uses `Atspi.Device` for keyboard handling and pointer monitoring wrappers, so Cthulhu already has one narrow example of a side-channel interface on Wayland.
|
||||||
|
- `src/cthulhu/focus_manager.py` and `src/cthulhu/cthulhu_state.py` still derive active-window and focus truth primarily from AT-SPI objects and events.
|
||||||
|
- `src/cthulhu/wnck_support.py` correctly gates `Wnck` to X11-only use, which is a useful precedent for runtime capability-based backend selection.
|
||||||
|
- Recent work in this repository has improved individual Wayland features, but there is not yet a compositor-agnostic interface for desktop state that can suppress irrelevant object churn before it enters the hot path.
|
||||||
|
|
||||||
|
## Goals
|
||||||
|
|
||||||
|
- Reduce AT-SPI event churn on Wayland systems before it reaches the main queue.
|
||||||
|
- Keep the design generic and compositor-agnostic at the Cthulhu interface level.
|
||||||
|
- Preserve current `AT-SPI` object semantics and script behavior as much as possible.
|
||||||
|
- Improve prioritization of focus and active-window related work during workspace and window transitions.
|
||||||
|
- Provide a single internal contract that can support Mutter, KWin, and wlroots-based compositors without teaching the rest of Cthulhu about compositor brands.
|
||||||
|
- Fail safe to current behavior when compositor state is missing, incomplete, or inconsistent.
|
||||||
|
|
||||||
|
## Non-Goals
|
||||||
|
|
||||||
|
- No Newton-style compositor-authoritative accessibility tree transport.
|
||||||
|
- No replacement of AT-SPI for object semantics, text, selection, caret movement, or actions.
|
||||||
|
- No dependency on `niri` IPC, GNOME Shell extensions, or KWin scripts in the core architecture for phase one.
|
||||||
|
- No requirement that every supported compositor expose the same amount of state.
|
||||||
|
- No broad rewrite of script listeners or script modules in this pass.
|
||||||
|
|
||||||
|
## Approaches Considered
|
||||||
|
|
||||||
|
### 1. Direct Wayland Integration Inside `event_manager`
|
||||||
|
|
||||||
|
Teach `event_manager` to consume shared Wayland state directly and add compositor-specific checks inside its current logic.
|
||||||
|
|
||||||
|
Pros:
|
||||||
|
|
||||||
|
- smallest code footprint up front
|
||||||
|
- no new internal abstraction layer
|
||||||
|
|
||||||
|
Cons:
|
||||||
|
|
||||||
|
- quickly leaks compositor-specific capability checks into the hottest code path
|
||||||
|
- makes Mutter, KWin, and wlroots differences part of `event_manager` logic
|
||||||
|
- harder to test in isolation
|
||||||
|
|
||||||
|
### 2. Thin Compositor-State Adapter Layer
|
||||||
|
|
||||||
|
Introduce a small internal normalization layer that consumes shared compositor-facing signals and emits a compact generic event vocabulary to `event_manager`.
|
||||||
|
|
||||||
|
Pros:
|
||||||
|
|
||||||
|
- keeps compositor-specific capability detection out of the hot path
|
||||||
|
- gives `event_manager` one stable interface to consume
|
||||||
|
- matches the long-term direction of consuming normalized state below the main screen reader logic
|
||||||
|
- easy to test with mocked backends
|
||||||
|
|
||||||
|
Cons:
|
||||||
|
|
||||||
|
- adds one more internal subsystem
|
||||||
|
- requires careful definition of authority boundaries to avoid duplication with AT-SPI
|
||||||
|
|
||||||
|
### 3. Full Compositor-Authoritative Routing
|
||||||
|
|
||||||
|
Make compositor state the primary truth for most event routing and use AT-SPI only for fine-grained object semantics.
|
||||||
|
|
||||||
|
Pros:
|
||||||
|
|
||||||
|
- highest potential performance ceiling
|
||||||
|
- most direct path toward a future compositor-led architecture
|
||||||
|
|
||||||
|
Cons:
|
||||||
|
|
||||||
|
- much higher correctness risk
|
||||||
|
- too large a shift for a churn-focused first pass
|
||||||
|
- would require significantly more backend-specific coverage and recovery logic
|
||||||
|
|
||||||
|
## Recommendation
|
||||||
|
|
||||||
|
Implement approach 2.
|
||||||
|
|
||||||
|
For phase one, Cthulhu should add a thin compositor-state adapter layer. It should be authoritative for desktop context and transition hints, but not for accessible object semantics. This gives Cthulhu a generic way to suppress or reprioritize AT-SPI noise without requiring a full architecture rewrite.
|
||||||
|
|
||||||
|
## Design
|
||||||
|
|
||||||
|
### Authority Split
|
||||||
|
|
||||||
|
The revised interface should split responsibility cleanly:
|
||||||
|
|
||||||
|
- compositor-state adapter is authoritative for:
|
||||||
|
- active desktop context
|
||||||
|
- active workspace set
|
||||||
|
- active top-level window identity when available
|
||||||
|
- desktop transition start and end
|
||||||
|
- focus-routing hints during compositor-driven changes
|
||||||
|
- AT-SPI remains authoritative for:
|
||||||
|
- focused accessible object
|
||||||
|
- accessible roles, names, and states
|
||||||
|
- text, caret, and selection semantics
|
||||||
|
- actionable objects and accessibility events consumed by scripts
|
||||||
|
|
||||||
|
Inference from upstream: current Orca remains AT-SPI-authoritative in its main pipeline, while newer GNOME accessibility work moves normalization below Orca rather than throughout it. This design follows that same direction without depending on Newton itself.
|
||||||
|
|
||||||
|
### New Internal Boundary
|
||||||
|
|
||||||
|
Add a new internal interface named `CompositorStateAdapter`.
|
||||||
|
|
||||||
|
Responsibilities:
|
||||||
|
|
||||||
|
- detect and activate the best available compositor-state backend at runtime
|
||||||
|
- normalize raw backend signals into a small generic event vocabulary
|
||||||
|
- maintain a current desktop-context snapshot
|
||||||
|
- emit state deltas and control hints to `event_manager`
|
||||||
|
- degrade to no-op behavior when capabilities are absent or unclear
|
||||||
|
|
||||||
|
This adapter should not expose compositor-specific event names or objects outside its own implementation.
|
||||||
|
|
||||||
|
### Normalized Event Vocabulary
|
||||||
|
|
||||||
|
The adapter should emit two families of signals.
|
||||||
|
|
||||||
|
State deltas:
|
||||||
|
|
||||||
|
- `workspace_state_changed`
|
||||||
|
- `desktop_focus_context_changed`
|
||||||
|
- `desktop_transition_started`
|
||||||
|
- `desktop_transition_finished`
|
||||||
|
|
||||||
|
Control hints:
|
||||||
|
|
||||||
|
- `pause_atspi_churn`
|
||||||
|
- `resume_atspi_churn`
|
||||||
|
- `prioritize_focus`
|
||||||
|
- `deprioritize_context`
|
||||||
|
- `flush_stale_atspi_events`
|
||||||
|
|
||||||
|
This vocabulary is intentionally small. It exists to shape queueing and prioritization, not to mirror every compositor event.
|
||||||
|
|
||||||
|
### Desktop Context Snapshot
|
||||||
|
|
||||||
|
The adapter should maintain a compact snapshot object with fields along these lines:
|
||||||
|
|
||||||
|
- `session_type`
|
||||||
|
- `backend_name`
|
||||||
|
- `active_workspace_ids`
|
||||||
|
- `active_window_token`
|
||||||
|
- `focus_route_token`
|
||||||
|
- `transition_active`
|
||||||
|
- `timestamp`
|
||||||
|
|
||||||
|
`active_window_token` and `focus_route_token` are intentionally generic. They should be comparable identifiers, not compositor-native objects leaking into the rest of Cthulhu.
|
||||||
|
|
||||||
|
### Backend Selection
|
||||||
|
|
||||||
|
Phase one should use capability-driven backend selection with generic shared interfaces first.
|
||||||
|
|
||||||
|
Preferred order:
|
||||||
|
|
||||||
|
1. `WaylandSharedProtocolsBackend`
|
||||||
|
2. `AtspiContextBackend`
|
||||||
|
3. `NullBackend`
|
||||||
|
|
||||||
|
#### `WaylandSharedProtocolsBackend`
|
||||||
|
|
||||||
|
This backend should consume shared Wayland-facing protocols where available and normalize them for Cthulhu. The first protocol target should be `ext_workspace_v1`.
|
||||||
|
|
||||||
|
Reasoning:
|
||||||
|
|
||||||
|
- `ext_workspace_v1` provides workspace groups, workspaces, active state, and atomic `done` notifications, which is exactly the sort of low-volume desktop-state signal Cthulhu needs to reason about transitions.
|
||||||
|
- As of April 9, 2026, Wayland Explorer lists `ext_workspace_v1` support for Mutter `49.2`, KWin `6.6`, and niri `25.11`, making it a good cross-family starting point.
|
||||||
|
|
||||||
|
This backend should only expose normalized state to the rest of Cthulhu. It should not expose protocol objects or protocol-specific state transitions outside the backend.
|
||||||
|
|
||||||
|
#### `AtspiContextBackend`
|
||||||
|
|
||||||
|
This backend should use current AT-SPI-based context recovery when shared Wayland state is missing or insufficient. It does not improve churn by itself, but it preserves current behavior and keeps the adapter contract usable everywhere.
|
||||||
|
|
||||||
|
#### `NullBackend`
|
||||||
|
|
||||||
|
This backend should emit no compositor hints and leave the rest of Cthulhu in its current behavior. It is the fail-safe path.
|
||||||
|
|
||||||
|
### Explicit Exclusions For Phase One
|
||||||
|
|
||||||
|
The following are not part of the core architecture in phase one:
|
||||||
|
|
||||||
|
- `niri` IPC as a first-class public interface
|
||||||
|
- compositor-specific `D-Bus` integrations
|
||||||
|
- GNOME Shell extension event streams
|
||||||
|
- KWin scripting APIs
|
||||||
|
|
||||||
|
These may become optional backend implementations in the future if a shared protocol proves insufficient, but they must remain behind the same generic adapter contract.
|
||||||
|
|
||||||
|
### Event Flow
|
||||||
|
|
||||||
|
The adapter should sit ahead of the current `event_manager`, not replace it.
|
||||||
|
|
||||||
|
Proposed flow:
|
||||||
|
|
||||||
|
1. backend receives shared compositor-facing state changes
|
||||||
|
2. adapter updates its desktop-context snapshot
|
||||||
|
3. adapter emits normalized state deltas and control hints
|
||||||
|
4. `event_manager` updates queueing, prioritization, and obsolescence decisions
|
||||||
|
5. AT-SPI object events continue to provide object-level truth within the selected desktop context
|
||||||
|
|
||||||
|
This allows Cthulhu to reduce irrelevant work before scripts interpret it, while keeping existing AT-SPI semantics intact.
|
||||||
|
|
||||||
|
### `event_manager` Integration
|
||||||
|
|
||||||
|
`event_manager` should gain a separate notion of desktop-context state in addition to its existing AT-SPI queue.
|
||||||
|
|
||||||
|
New responsibilities:
|
||||||
|
|
||||||
|
- track whether churn suppression is active
|
||||||
|
- track the currently prioritized desktop context
|
||||||
|
- reject queued AT-SPI work that became stale because the compositor already moved to a new context
|
||||||
|
- prefer script activation and focus recovery work that matches the current desktop context
|
||||||
|
|
||||||
|
The existing queue does not need to be replaced, but it does need one new concept: context obsolescence.
|
||||||
|
|
||||||
|
### Context Obsolescence
|
||||||
|
|
||||||
|
Add a new pruning rule: an event can be obsolete not only because a newer event of the same type exists, but because the desktop context that made the event relevant no longer exists.
|
||||||
|
|
||||||
|
Examples:
|
||||||
|
|
||||||
|
- a large `children-changed` burst from a window on a workspace that is no longer active
|
||||||
|
- queued `showing` or `name-change` events from a window that just lost compositor priority
|
||||||
|
- stale background application updates that were queued before a workspace switch finished
|
||||||
|
|
||||||
|
This is the primary performance win of the new interface. It lets Cthulhu discard irrelevant work based on context freshness, not only on event-type heuristics.
|
||||||
|
|
||||||
|
### Churn Suppression Mode
|
||||||
|
|
||||||
|
When the adapter emits `pause_atspi_churn`, `event_manager` should enter a guarded suppression mode.
|
||||||
|
|
||||||
|
This is not a full stop. It is a mode where:
|
||||||
|
|
||||||
|
- high-value focus and activation events are always preserved
|
||||||
|
- low-value background churn is collapsed, deprioritized, or dropped
|
||||||
|
- stale work from the prior desktop context is pruned aggressively
|
||||||
|
|
||||||
|
Events that should still be preserved during suppression:
|
||||||
|
|
||||||
|
- `window:*`
|
||||||
|
- `object:state-changed:focused` with `detail1=true`
|
||||||
|
- `object:state-changed:active` on frames and windows
|
||||||
|
- `object:text-selection-changed`
|
||||||
|
- `object:selection-changed` for the prioritized context
|
||||||
|
- user-trigger-correlated events associated with the last input event
|
||||||
|
|
||||||
|
Events that should usually be suppressed, collapsed, or deprioritized:
|
||||||
|
|
||||||
|
- `object:children-changed:*`
|
||||||
|
- `object:state-changed:showing`
|
||||||
|
- `object:state-changed:sensitive`
|
||||||
|
- background `object:property-change:accessible-name`
|
||||||
|
- bulk `object:text-changed:*`
|
||||||
|
- repeated `object:text-caret-moved` from non-priority contexts
|
||||||
|
|
||||||
|
### Transition Handling
|
||||||
|
|
||||||
|
When the adapter indicates a desktop transition:
|
||||||
|
|
||||||
|
- `desktop_transition_started`
|
||||||
|
- adapter marks `transition_active=True`
|
||||||
|
- adapter emits `pause_atspi_churn`
|
||||||
|
- `desktop_focus_context_changed`
|
||||||
|
- `event_manager` updates the preferred app/window context before AT-SPI focus settles
|
||||||
|
- focus-related events for the new context get priority
|
||||||
|
- `desktop_transition_finished`
|
||||||
|
- adapter emits `resume_atspi_churn`
|
||||||
|
- adapter emits `flush_stale_atspi_events`
|
||||||
|
- `event_manager` drops queued events that belong to the old context and resumes normal flow
|
||||||
|
|
||||||
|
This allows Cthulhu to be more decisive during workspace switches, app switches, and transient window transitions without needing compositor-authoritative object trees.
|
||||||
|
|
||||||
|
### Script Activation
|
||||||
|
|
||||||
|
`event_manager` should use the adapter's prioritized desktop context as an additional input when deciding whether to activate a script.
|
||||||
|
|
||||||
|
It should not activate a script purely because the compositor hinted at it, but it should:
|
||||||
|
|
||||||
|
- prioritize AT-SPI events from the compositor-indicated context
|
||||||
|
- deprioritize or skip activation from obviously stale background contexts
|
||||||
|
- improve focus recovery when AT-SPI active-window truth is noisy or delayed
|
||||||
|
|
||||||
|
This should reduce cases where script activation thrashes between background and foreground apps during Wayland transitions.
|
||||||
|
|
||||||
|
### Debugging And Observability
|
||||||
|
|
||||||
|
Add explicit logs around the new boundary:
|
||||||
|
|
||||||
|
- backend chosen and why
|
||||||
|
- normalized adapter signal emitted
|
||||||
|
- transition suppression entered and left
|
||||||
|
- events dropped due to context obsolescence
|
||||||
|
- events preserved during suppression and why
|
||||||
|
|
||||||
|
These logs should make it possible to explain every major pruning decision in the same way current flood and ignore logic can be debugged.
|
||||||
|
|
||||||
|
## Testing
|
||||||
|
|
||||||
|
### Automated
|
||||||
|
|
||||||
|
Add targeted tests for:
|
||||||
|
|
||||||
|
- backend capability detection and fallback order
|
||||||
|
- normalization of backend signals into adapter events
|
||||||
|
- transition start and finish behavior
|
||||||
|
- churn suppression activation and release
|
||||||
|
- context-obsolescence pruning of queued AT-SPI events
|
||||||
|
- preservation of focus and selection events during suppression
|
||||||
|
- script activation preferring compositor-indicated context when AT-SPI is noisy
|
||||||
|
- fail-safe fallback to current behavior when the adapter is uncertain
|
||||||
|
|
||||||
|
These tests should be written with mocks and fake backend signals. No real compositor should be required for unit coverage.
|
||||||
|
|
||||||
|
### Manual
|
||||||
|
|
||||||
|
Manual validation should focus on:
|
||||||
|
|
||||||
|
- workspace switches on Mutter, KWin, and niri
|
||||||
|
- fast application switching
|
||||||
|
- opening and dismissing transient dialogs and menus
|
||||||
|
- noisy web or Steam-like scenarios where background AT-SPI churn is high
|
||||||
|
- confirmation that speech follows real focused objects once AT-SPI settles
|
||||||
|
- confirmation that no important notifications or menu interactions are lost during suppression
|
||||||
|
|
||||||
|
## Risks
|
||||||
|
|
||||||
|
- Shared Wayland protocols may provide enough workspace truth but not enough top-level detail on every compositor.
|
||||||
|
- Compositor state may lead AT-SPI focus briefly, which could cause over-eager prioritization if the suppression policy is too aggressive.
|
||||||
|
- Some legitimate background AT-SPI events may look like churn if the rules are too broad.
|
||||||
|
- Adding a new boundary introduces state-synchronization bugs if adapter and event queue state diverge.
|
||||||
|
|
||||||
|
## Risk Management
|
||||||
|
|
||||||
|
- keep suppression guarded rather than absolute
|
||||||
|
- keep AT-SPI authoritative for object semantics
|
||||||
|
- make context obsolescence explicit and debuggable
|
||||||
|
- fail back to current behavior whenever backend certainty is too low
|
||||||
|
- avoid compositor-specific backends in phase one unless a shared protocol is clearly insufficient
|
||||||
|
|
||||||
|
## Recommendation
|
||||||
|
|
||||||
|
Implement a small generic `CompositorStateAdapter` and teach `event_manager` to consume its normalized desktop-state signals and churn-control hints.
|
||||||
|
|
||||||
|
Do not make `niri` IPC part of the core contract.
|
||||||
|
Do not attempt a compositor-authoritative accessibility architecture in this pass.
|
||||||
|
Do not broaden the first implementation beyond shared protocol detection, AT-SPI fallback, context-based pruning, and guarded churn suppression.
|
||||||
+2
-11
@@ -1,5 +1,5 @@
|
|||||||
project('cthulhu',
|
project('cthulhu',
|
||||||
version: '2026.01.26-master',
|
version: '2026.03.02-master',
|
||||||
meson_version: '>= 1.0.0',
|
meson_version: '>= 1.0.0',
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -57,6 +57,7 @@ optional_modules = {
|
|||||||
'speechd': 'speech output',
|
'speechd': 'speech output',
|
||||||
'dasbus': 'D-Bus remote controller',
|
'dasbus': 'D-Bus remote controller',
|
||||||
'psutil': 'system information commands',
|
'psutil': 'system information commands',
|
||||||
|
'pywayland': 'Wayland shared workspace backend',
|
||||||
'gi.repository.Wnck': 'mouse review',
|
'gi.repository.Wnck': 'mouse review',
|
||||||
'pdf2image': 'PDF processing for OCR',
|
'pdf2image': 'PDF processing for OCR',
|
||||||
'scipy': 'Scientific computing for OCR analysis',
|
'scipy': 'Scientific computing for OCR analysis',
|
||||||
@@ -93,16 +94,6 @@ else
|
|||||||
summary += {'sound support': 'no (missing gstreamer)'}
|
summary += {'sound support': 'no (missing gstreamer)'}
|
||||||
endif
|
endif
|
||||||
|
|
||||||
# Integration with session startup
|
|
||||||
i18n.merge_file(
|
|
||||||
input: 'cthulhu-autostart.desktop.in',
|
|
||||||
output: '@BASENAME@',
|
|
||||||
type: 'desktop',
|
|
||||||
po_dir: meson.project_source_root() / 'po',
|
|
||||||
install: true,
|
|
||||||
install_dir: get_option('sysconfdir') / 'xdg' / 'autostart',
|
|
||||||
)
|
|
||||||
|
|
||||||
# Update icon cache manually (desktop-neutral) - optional, ignore failures
|
# Update icon cache manually (desktop-neutral) - optional, ignore failures
|
||||||
gtk_update_icon_cache = find_program('gtk4-update-icon-cache', required: false)
|
gtk_update_icon_cache = find_program('gtk4-update-icon-cache', required: false)
|
||||||
if gtk_update_icon_cache.found()
|
if gtk_update_icon_cache.found()
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
# List of source files containing translatable strings.
|
# List of source files containing translatable strings.
|
||||||
# Please keep this file sorted alphabetically.
|
# Please keep this file sorted alphabetically.
|
||||||
cthulhu-autostart.desktop.in
|
|
||||||
src/cthulhu/braille_rolenames.py
|
src/cthulhu/braille_rolenames.py
|
||||||
src/cthulhu/brltablenames.py
|
src/cthulhu/brltablenames.py
|
||||||
src/cthulhu/chnames.py
|
src/cthulhu/chnames.py
|
||||||
|
|||||||
@@ -13,11 +13,9 @@ msgstr ""
|
|||||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||||
"X-DamnedLies-Scope: partial\n"
|
"X-DamnedLies-Scope: partial\n"
|
||||||
|
|
||||||
#: cthulhu-autostart.desktop.in:3
|
|
||||||
msgid "Cthulhu Screen Reader"
|
msgid "Cthulhu Screen Reader"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: cthulhu-autostart.desktop.in:11
|
|
||||||
msgid "screen;reader;accessibility;speech;braille;"
|
msgid "screen;reader;accessibility;speech;braille;"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
|||||||
@@ -18,11 +18,9 @@ msgstr ""
|
|||||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||||
"X-Generator: Poedit 1.6.10\n"
|
"X-Generator: Poedit 1.6.10\n"
|
||||||
|
|
||||||
#: cthulhu-autostart.desktop.in:3
|
|
||||||
msgid "Cthulhu Screen Reader"
|
msgid "Cthulhu Screen Reader"
|
||||||
msgstr "Lector de pantalla Cthulhu"
|
msgstr "Lector de pantalla Cthulhu"
|
||||||
|
|
||||||
#: cthulhu-autostart.desktop.in:11
|
|
||||||
#, fuzzy
|
#, fuzzy
|
||||||
msgid "screen;reader;accessibility;speech;braille;"
|
msgid "screen;reader;accessibility;speech;braille;"
|
||||||
msgstr "lector de pantalla; fabla; braille;"
|
msgstr "lector de pantalla; fabla; braille;"
|
||||||
|
|||||||
@@ -24,11 +24,9 @@ msgstr ""
|
|||||||
"&& n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n"
|
"&& n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n"
|
||||||
"X-Poedit-Language: Arabic\n"
|
"X-Poedit-Language: Arabic\n"
|
||||||
|
|
||||||
#: cthulhu-autostart.desktop.in:3
|
|
||||||
msgid "Cthulhu Screen Reader"
|
msgid "Cthulhu Screen Reader"
|
||||||
msgstr "قارئ الشاشة Cthulhu"
|
msgstr "قارئ الشاشة Cthulhu"
|
||||||
|
|
||||||
#: cthulhu-autostart.desktop.in:11
|
|
||||||
msgid "screen;reader;accessibility;speech;braille;"
|
msgid "screen;reader;accessibility;speech;braille;"
|
||||||
msgstr "شاشة;قارئ;إمكانية الوصول;كلام;برايل;"
|
msgstr "شاشة;قارئ;إمكانية الوصول;كلام;برايل;"
|
||||||
|
|
||||||
|
|||||||
@@ -19,11 +19,9 @@ msgstr ""
|
|||||||
"X-Poedit-Language: Asturian\n"
|
"X-Poedit-Language: Asturian\n"
|
||||||
"X-Poedit-SourceCharset: utf-8\n"
|
"X-Poedit-SourceCharset: utf-8\n"
|
||||||
|
|
||||||
#: cthulhu-autostart.desktop.in:3
|
|
||||||
msgid "Cthulhu Screen Reader"
|
msgid "Cthulhu Screen Reader"
|
||||||
msgstr "Llector de pantalla d'Cthulhu"
|
msgstr "Llector de pantalla d'Cthulhu"
|
||||||
|
|
||||||
#: cthulhu-autostart.desktop.in:11
|
|
||||||
msgid "screen;reader;accessibility;speech;braille;"
|
msgid "screen;reader;accessibility;speech;braille;"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
|||||||
@@ -17,11 +17,9 @@ msgstr ""
|
|||||||
"X-Generator: Poedit 3.3.2\n"
|
"X-Generator: Poedit 3.3.2\n"
|
||||||
"X-Project-Style: gnome\n"
|
"X-Project-Style: gnome\n"
|
||||||
|
|
||||||
#: cthulhu-autostart.desktop.in:3
|
|
||||||
msgid "Cthulhu Screen Reader"
|
msgid "Cthulhu Screen Reader"
|
||||||
msgstr "Чытач з экрана Cthulhu"
|
msgstr "Чытач з экрана Cthulhu"
|
||||||
|
|
||||||
#: cthulhu-autostart.desktop.in:11
|
|
||||||
#, fuzzy
|
#, fuzzy
|
||||||
msgid "screen;reader;accessibility;speech;braille;"
|
msgid "screen;reader;accessibility;speech;braille;"
|
||||||
msgstr "чытач з экрана;экран;голас;маўленне;Брайль;"
|
msgstr "чытач з экрана;экран;голас;маўленне;Брайль;"
|
||||||
|
|||||||
@@ -23,11 +23,9 @@ msgstr ""
|
|||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||||
|
|
||||||
#: cthulhu-autostart.desktop.in:3
|
|
||||||
msgid "Cthulhu Screen Reader"
|
msgid "Cthulhu Screen Reader"
|
||||||
msgstr "Cthulhu — екранен четец"
|
msgstr "Cthulhu — екранен четец"
|
||||||
|
|
||||||
#: cthulhu-autostart.desktop.in:11
|
|
||||||
msgid "screen;reader;accessibility;speech;braille;"
|
msgid "screen;reader;accessibility;speech;braille;"
|
||||||
msgstr "екран;четец;достъпност;говор;брайл;"
|
msgstr "екран;четец;достъпност;говор;брайл;"
|
||||||
|
|
||||||
|
|||||||
@@ -21,12 +21,10 @@ msgstr ""
|
|||||||
"X-Generator: KBabel 1.9.1\n"
|
"X-Generator: KBabel 1.9.1\n"
|
||||||
"Plural-Forms: nplurals=1; plural=0;\n"
|
"Plural-Forms: nplurals=1; plural=0;\n"
|
||||||
|
|
||||||
#: cthulhu-autostart.desktop.in:3
|
|
||||||
#, fuzzy
|
#, fuzzy
|
||||||
msgid "Cthulhu Screen Reader"
|
msgid "Cthulhu Screen Reader"
|
||||||
msgstr "অর্কা স্ক্রীন রিডার / বিবর্ধন"
|
msgstr "অর্কা স্ক্রীন রিডার / বিবর্ধন"
|
||||||
|
|
||||||
#: cthulhu-autostart.desktop.in:11
|
|
||||||
msgid "screen;reader;accessibility;speech;braille;"
|
msgid "screen;reader;accessibility;speech;braille;"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
|||||||
@@ -18,12 +18,10 @@ msgstr ""
|
|||||||
"X-Generator: KBabel 1.9.1\n"
|
"X-Generator: KBabel 1.9.1\n"
|
||||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||||
|
|
||||||
#: cthulhu-autostart.desktop.in:3
|
|
||||||
#, fuzzy
|
#, fuzzy
|
||||||
msgid "Cthulhu Screen Reader"
|
msgid "Cthulhu Screen Reader"
|
||||||
msgstr "Cthulhu'র বৈশিষ্ট্য"
|
msgstr "Cthulhu'র বৈশিষ্ট্য"
|
||||||
|
|
||||||
#: cthulhu-autostart.desktop.in:11
|
|
||||||
msgid "screen;reader;accessibility;speech;braille;"
|
msgid "screen;reader;accessibility;speech;braille;"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
|||||||
@@ -15,11 +15,9 @@ msgstr ""
|
|||||||
"X-Launchpad-Export-Date: 2015-02-05 06:46+0000\n"
|
"X-Launchpad-Export-Date: 2015-02-05 06:46+0000\n"
|
||||||
"X-Generator: Poedit 1.7.4\n"
|
"X-Generator: Poedit 1.7.4\n"
|
||||||
|
|
||||||
#: cthulhu-autostart.desktop.in:3
|
|
||||||
msgid "Cthulhu Screen Reader"
|
msgid "Cthulhu Screen Reader"
|
||||||
msgstr "Cthulhu čitač ekrana"
|
msgstr "Cthulhu čitač ekrana"
|
||||||
|
|
||||||
#: cthulhu-autostart.desktop.in:11
|
|
||||||
msgid "screen;reader;accessibility;speech;braille;"
|
msgid "screen;reader;accessibility;speech;braille;"
|
||||||
msgstr "čitač ekrana;govor;brailleovo pismo;"
|
msgstr "čitač ekrana;govor;brailleovo pismo;"
|
||||||
|
|
||||||
|
|||||||
@@ -27,11 +27,9 @@ msgstr ""
|
|||||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||||
"X-Generator: Poedit 3.3.2\n"
|
"X-Generator: Poedit 3.3.2\n"
|
||||||
|
|
||||||
#: cthulhu-autostart.desktop.in:3
|
|
||||||
msgid "Cthulhu Screen Reader"
|
msgid "Cthulhu Screen Reader"
|
||||||
msgstr "Lector de pantalla Cthulhu"
|
msgstr "Lector de pantalla Cthulhu"
|
||||||
|
|
||||||
#: cthulhu-autostart.desktop.in:11
|
|
||||||
msgid "screen;reader;accessibility;speech;braille;"
|
msgid "screen;reader;accessibility;speech;braille;"
|
||||||
msgstr "pantalla;lector;accessibilitat;veu;braille;"
|
msgstr "pantalla;lector;accessibilitat;veu;braille;"
|
||||||
|
|
||||||
|
|||||||
@@ -27,11 +27,9 @@ msgstr ""
|
|||||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||||
"X-Generator: Poedit 1.8.11\n"
|
"X-Generator: Poedit 1.8.11\n"
|
||||||
|
|
||||||
#: cthulhu-autostart.desktop.in:3
|
|
||||||
msgid "Cthulhu Screen Reader"
|
msgid "Cthulhu Screen Reader"
|
||||||
msgstr "Lector de pantalla Cthulhu"
|
msgstr "Lector de pantalla Cthulhu"
|
||||||
|
|
||||||
#: cthulhu-autostart.desktop.in:11
|
|
||||||
msgid "screen;reader;accessibility;speech;braille;"
|
msgid "screen;reader;accessibility;speech;braille;"
|
||||||
msgstr "lector de pantalla;pronunciació;braille;"
|
msgstr "lector de pantalla;pronunciació;braille;"
|
||||||
|
|
||||||
|
|||||||
@@ -19,12 +19,10 @@ msgstr ""
|
|||||||
"X-Launchpad-Export-Date: 2020-05-04 21:32+0000\n"
|
"X-Launchpad-Export-Date: 2020-05-04 21:32+0000\n"
|
||||||
"X-Generator: Poedit 2.3\n"
|
"X-Generator: Poedit 2.3\n"
|
||||||
|
|
||||||
#: cthulhu-autostart.desktop.in:3
|
|
||||||
#, fuzzy
|
#, fuzzy
|
||||||
msgid "Cthulhu Screen Reader"
|
msgid "Cthulhu Screen Reader"
|
||||||
msgstr "خوێنەری پەردەی ئۆرکا"
|
msgstr "خوێنەری پەردەی ئۆرکا"
|
||||||
|
|
||||||
#: cthulhu-autostart.desktop.in:11
|
|
||||||
msgid "screen;reader;accessibility;speech;braille;"
|
msgid "screen;reader;accessibility;speech;braille;"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
|||||||
@@ -24,11 +24,9 @@ msgstr ""
|
|||||||
"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
|
"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
|
||||||
"X-Generator: Poedit 3.3.2\n"
|
"X-Generator: Poedit 3.3.2\n"
|
||||||
|
|
||||||
#: cthulhu-autostart.desktop.in:3
|
|
||||||
msgid "Cthulhu Screen Reader"
|
msgid "Cthulhu Screen Reader"
|
||||||
msgstr "Čtečka obrazovky Cthulhu"
|
msgstr "Čtečka obrazovky Cthulhu"
|
||||||
|
|
||||||
#: cthulhu-autostart.desktop.in:11
|
|
||||||
msgid "screen;reader;accessibility;speech;braille;"
|
msgid "screen;reader;accessibility;speech;braille;"
|
||||||
msgstr "obrazovka;čtečka;přístupnost;řeč;braille;"
|
msgstr "obrazovka;čtečka;přístupnost;řeč;braille;"
|
||||||
|
|
||||||
|
|||||||
@@ -17,12 +17,10 @@ msgstr ""
|
|||||||
"Plural-Forms: nplurals=4; plural= (n==1) ? 0 : (n==2) ? 1 : (n != 8 && n != "
|
"Plural-Forms: nplurals=4; plural= (n==1) ? 0 : (n==2) ? 1 : (n != 8 && n != "
|
||||||
"11) ? 2 : 3;\n"
|
"11) ? 2 : 3;\n"
|
||||||
|
|
||||||
#: cthulhu-autostart.desktop.in:3
|
|
||||||
#, fuzzy
|
#, fuzzy
|
||||||
msgid "Cthulhu Screen Reader"
|
msgid "Cthulhu Screen Reader"
|
||||||
msgstr "Hoffterau Cthulhu"
|
msgstr "Hoffterau Cthulhu"
|
||||||
|
|
||||||
#: cthulhu-autostart.desktop.in:11
|
|
||||||
msgid "screen;reader;accessibility;speech;braille;"
|
msgid "screen;reader;accessibility;speech;braille;"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
|||||||
@@ -32,11 +32,9 @@ msgstr ""
|
|||||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||||
"X-Generator: Poedit 3.0.1\n"
|
"X-Generator: Poedit 3.0.1\n"
|
||||||
|
|
||||||
#: cthulhu-autostart.desktop.in:3
|
|
||||||
msgid "Cthulhu Screen Reader"
|
msgid "Cthulhu Screen Reader"
|
||||||
msgstr "Skærmlæseren Cthulhu"
|
msgstr "Skærmlæseren Cthulhu"
|
||||||
|
|
||||||
#: cthulhu-autostart.desktop.in:11
|
|
||||||
msgid "screen;reader;accessibility;speech;braille;"
|
msgid "screen;reader;accessibility;speech;braille;"
|
||||||
msgstr "skærm;læser;tilgængelighed;tale;braille;"
|
msgstr "skærm;læser;tilgængelighed;tale;braille;"
|
||||||
|
|
||||||
|
|||||||
@@ -37,11 +37,9 @@ msgstr ""
|
|||||||
"X-Generator: Poedit 3.3.2\n"
|
"X-Generator: Poedit 3.3.2\n"
|
||||||
"X-Project-Style: gnome\n"
|
"X-Project-Style: gnome\n"
|
||||||
|
|
||||||
#: cthulhu-autostart.desktop.in:3
|
|
||||||
msgid "Cthulhu Screen Reader"
|
msgid "Cthulhu Screen Reader"
|
||||||
msgstr "Cthulhu-Bildschirmleser"
|
msgstr "Cthulhu-Bildschirmleser"
|
||||||
|
|
||||||
#: cthulhu-autostart.desktop.in:11
|
|
||||||
msgid "screen;reader;accessibility;speech;braille;"
|
msgid "screen;reader;accessibility;speech;braille;"
|
||||||
msgstr "bildschirm;leser;barrierefreiheit;sprache;braille;"
|
msgstr "bildschirm;leser;barrierefreiheit;sprache;braille;"
|
||||||
|
|
||||||
|
|||||||
@@ -20,12 +20,10 @@ msgstr ""
|
|||||||
"X-Poedit-SourceCharset: utf-8\n"
|
"X-Poedit-SourceCharset: utf-8\n"
|
||||||
"Plural-Forms: nplurals=2; plural=(n!=1)\n"
|
"Plural-Forms: nplurals=2; plural=(n!=1)\n"
|
||||||
|
|
||||||
#: cthulhu-autostart.desktop.in:3
|
|
||||||
#, fuzzy
|
#, fuzzy
|
||||||
msgid "Cthulhu Screen Reader"
|
msgid "Cthulhu Screen Reader"
|
||||||
msgstr "ཨོར་ཀ་གསལ་གཞི་ལྷག་བྱེད་/ཆེ་ཤེལ་"
|
msgstr "ཨོར་ཀ་གསལ་གཞི་ལྷག་བྱེད་/ཆེ་ཤེལ་"
|
||||||
|
|
||||||
#: cthulhu-autostart.desktop.in:11
|
|
||||||
msgid "screen;reader;accessibility;speech;braille;"
|
msgid "screen;reader;accessibility;speech;braille;"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
|||||||
@@ -28,11 +28,9 @@ msgstr ""
|
|||||||
"X-Generator: Poedit 2.3\n"
|
"X-Generator: Poedit 2.3\n"
|
||||||
"X-Project-Style: gnome\n"
|
"X-Project-Style: gnome\n"
|
||||||
|
|
||||||
#: cthulhu-autostart.desktop.in:3
|
|
||||||
msgid "Cthulhu Screen Reader"
|
msgid "Cthulhu Screen Reader"
|
||||||
msgstr "Αναγνώστης οθόνης Cthulhu"
|
msgstr "Αναγνώστης οθόνης Cthulhu"
|
||||||
|
|
||||||
#: cthulhu-autostart.desktop.in:11
|
|
||||||
msgid "screen;reader;accessibility;speech;braille;"
|
msgid "screen;reader;accessibility;speech;braille;"
|
||||||
msgstr "οθόνη;αναγνώστης;προσβασιμότητα;ομιλία;μπράιγ;"
|
msgstr "οθόνη;αναγνώστης;προσβασιμότητα;ομιλία;μπράιγ;"
|
||||||
|
|
||||||
|
|||||||
@@ -17,11 +17,9 @@ msgstr ""
|
|||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
|
||||||
#: cthulhu-autostart.desktop.in:3
|
|
||||||
msgid "Cthulhu Screen Reader"
|
msgid "Cthulhu Screen Reader"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: cthulhu-autostart.desktop.in:11
|
|
||||||
msgid "screen;reader;accessibility;speech;braille;"
|
msgid "screen;reader;accessibility;speech;braille;"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
|||||||
@@ -21,11 +21,9 @@ msgstr ""
|
|||||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||||
"X-Generator: Gtranslator 45.3\n"
|
"X-Generator: Gtranslator 45.3\n"
|
||||||
|
|
||||||
#: cthulhu-autostart.desktop.in:3
|
|
||||||
msgid "Cthulhu Screen Reader"
|
msgid "Cthulhu Screen Reader"
|
||||||
msgstr "Cthulhu Screen Reader"
|
msgstr "Cthulhu Screen Reader"
|
||||||
|
|
||||||
#: cthulhu-autostart.desktop.in:11
|
|
||||||
msgid "screen;reader;accessibility;speech;braille;"
|
msgid "screen;reader;accessibility;speech;braille;"
|
||||||
msgstr "screen reader;speech;braille;"
|
msgstr "screen reader;speech;braille;"
|
||||||
|
|
||||||
|
|||||||
@@ -21,11 +21,9 @@ msgstr ""
|
|||||||
"X-Generator: Poedit 3.2.2\n"
|
"X-Generator: Poedit 3.2.2\n"
|
||||||
"X-Project-Style: gnome\n"
|
"X-Project-Style: gnome\n"
|
||||||
|
|
||||||
#: cthulhu-autostart.desktop.in:3
|
|
||||||
msgid "Cthulhu Screen Reader"
|
msgid "Cthulhu Screen Reader"
|
||||||
msgstr "Ekranlegilo Orko"
|
msgstr "Ekranlegilo Orko"
|
||||||
|
|
||||||
#: cthulhu-autostart.desktop.in:11
|
|
||||||
#, fuzzy
|
#, fuzzy
|
||||||
msgid "screen;reader;accessibility;speech;braille;"
|
msgid "screen;reader;accessibility;speech;braille;"
|
||||||
msgstr "ekranlegilo;parolo;brajlo;"
|
msgstr "ekranlegilo;parolo;brajlo;"
|
||||||
|
|||||||
@@ -28,11 +28,9 @@ msgstr ""
|
|||||||
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
|
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
|
||||||
"X-Generator: Gtranslator 45.alpha0\n"
|
"X-Generator: Gtranslator 45.alpha0\n"
|
||||||
|
|
||||||
#: cthulhu-autostart.desktop.in:3
|
|
||||||
msgid "Cthulhu Screen Reader"
|
msgid "Cthulhu Screen Reader"
|
||||||
msgstr "Lector de pantalla Cthulhu"
|
msgstr "Lector de pantalla Cthulhu"
|
||||||
|
|
||||||
#: cthulhu-autostart.desktop.in:11
|
|
||||||
msgid "screen;reader;accessibility;speech;braille;"
|
msgid "screen;reader;accessibility;speech;braille;"
|
||||||
msgstr "lector;pantalla;accesibilidad;voz;braille;"
|
msgstr "lector;pantalla;accesibilidad;voz;braille;"
|
||||||
|
|
||||||
|
|||||||
@@ -20,12 +20,10 @@ msgstr ""
|
|||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||||
|
|
||||||
#: cthulhu-autostart.desktop.in:3
|
|
||||||
#, fuzzy
|
#, fuzzy
|
||||||
msgid "Cthulhu Screen Reader"
|
msgid "Cthulhu Screen Reader"
|
||||||
msgstr "Cthulhu ekraanilugeja ja luup"
|
msgstr "Cthulhu ekraanilugeja ja luup"
|
||||||
|
|
||||||
#: cthulhu-autostart.desktop.in:11
|
|
||||||
msgid "screen;reader;accessibility;speech;braille;"
|
msgid "screen;reader;accessibility;speech;braille;"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
|||||||
@@ -20,11 +20,9 @@ msgstr ""
|
|||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||||
|
|
||||||
#: cthulhu-autostart.desktop.in:3
|
|
||||||
msgid "Cthulhu Screen Reader"
|
msgid "Cthulhu Screen Reader"
|
||||||
msgstr "Cthulhu pantaila-irakurlea"
|
msgstr "Cthulhu pantaila-irakurlea"
|
||||||
|
|
||||||
#: cthulhu-autostart.desktop.in:11
|
|
||||||
msgid "screen;reader;accessibility;speech;braille;"
|
msgid "screen;reader;accessibility;speech;braille;"
|
||||||
msgstr "pantaila;irakurlea;irisgarritasuna;mintzamena;braillea;"
|
msgstr "pantaila;irakurlea;irisgarritasuna;mintzamena;braillea;"
|
||||||
|
|
||||||
|
|||||||
@@ -18,11 +18,9 @@ msgstr ""
|
|||||||
"Plural-Forms: nplurals=1; plural=0;\n"
|
"Plural-Forms: nplurals=1; plural=0;\n"
|
||||||
"X-Generator: Poedit 3.4\n"
|
"X-Generator: Poedit 3.4\n"
|
||||||
|
|
||||||
#: cthulhu-autostart.desktop.in:3
|
|
||||||
msgid "Cthulhu Screen Reader"
|
msgid "Cthulhu Screen Reader"
|
||||||
msgstr "صفحهخوان اورکا"
|
msgstr "صفحهخوان اورکا"
|
||||||
|
|
||||||
#: cthulhu-autostart.desktop.in:11
|
|
||||||
msgid "screen;reader;accessibility;speech;braille;"
|
msgid "screen;reader;accessibility;speech;braille;"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
|||||||
@@ -27,11 +27,9 @@ msgstr ""
|
|||||||
"X-Generator: Poedit 3.3.2\n"
|
"X-Generator: Poedit 3.3.2\n"
|
||||||
"X-Poedit-Bookmarks: 814,-1,-1,-1,-1,-1,-1,-1,-1,-1\n"
|
"X-Poedit-Bookmarks: 814,-1,-1,-1,-1,-1,-1,-1,-1,-1\n"
|
||||||
|
|
||||||
#: cthulhu-autostart.desktop.in:3
|
|
||||||
msgid "Cthulhu Screen Reader"
|
msgid "Cthulhu Screen Reader"
|
||||||
msgstr "Cthulhu-näytönlukija"
|
msgstr "Cthulhu-näytönlukija"
|
||||||
|
|
||||||
#: cthulhu-autostart.desktop.in:11
|
|
||||||
msgid "screen;reader;accessibility;speech;braille;"
|
msgid "screen;reader;accessibility;speech;braille;"
|
||||||
msgstr "näyttö;lukija;saavutettavuus;puhe;pistekirjoitus;"
|
msgstr "näyttö;lukija;saavutettavuus;puhe;pistekirjoitus;"
|
||||||
|
|
||||||
|
|||||||
@@ -31,11 +31,9 @@ msgstr ""
|
|||||||
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
|
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
|
||||||
"X-Generator: Poedit 3.3.2\n"
|
"X-Generator: Poedit 3.3.2\n"
|
||||||
|
|
||||||
#: cthulhu-autostart.desktop.in:3
|
|
||||||
msgid "Cthulhu Screen Reader"
|
msgid "Cthulhu Screen Reader"
|
||||||
msgstr "Lecteur d’écran Cthulhu"
|
msgstr "Lecteur d’écran Cthulhu"
|
||||||
|
|
||||||
#: cthulhu-autostart.desktop.in:11
|
|
||||||
msgid "screen;reader;accessibility;speech;braille;"
|
msgid "screen;reader;accessibility;speech;braille;"
|
||||||
msgstr "lecteur;écran;accessibilité;parole;braille;"
|
msgstr "lecteur;écran;accessibilité;parole;braille;"
|
||||||
|
|
||||||
|
|||||||
@@ -18,11 +18,9 @@ msgstr ""
|
|||||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||||
"X-Generator: Poedit 2.0.3\n"
|
"X-Generator: Poedit 2.0.3\n"
|
||||||
|
|
||||||
#: cthulhu-autostart.desktop.in:3
|
|
||||||
msgid "Cthulhu Screen Reader"
|
msgid "Cthulhu Screen Reader"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: cthulhu-autostart.desktop.in:11
|
|
||||||
msgid "screen;reader;accessibility;speech;braille;"
|
msgid "screen;reader;accessibility;speech;braille;"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
|||||||
@@ -18,12 +18,10 @@ msgstr ""
|
|||||||
"Plural-Forms: nplurals=5; plural=n==1 ? 0 : (n%10==1 || n%10==2) ? 1 : "
|
"Plural-Forms: nplurals=5; plural=n==1 ? 0 : (n%10==1 || n%10==2) ? 1 : "
|
||||||
"(n%10>=3 && n%10<= 6) ? 2 : ((n%10>=7 && n%10<=9) || n==10) ? 3 : 4;\n"
|
"(n%10>=3 && n%10<= 6) ? 2 : ((n%10>=7 && n%10<=9) || n==10) ? 3 : 4;\n"
|
||||||
|
|
||||||
#: cthulhu-autostart.desktop.in:3
|
|
||||||
#, fuzzy
|
#, fuzzy
|
||||||
msgid "Cthulhu Screen Reader"
|
msgid "Cthulhu Screen Reader"
|
||||||
msgstr "Léitheoir Scáileáin agus Formhéadaitheoir Cthulhu"
|
msgstr "Léitheoir Scáileáin agus Formhéadaitheoir Cthulhu"
|
||||||
|
|
||||||
#: cthulhu-autostart.desktop.in:11
|
|
||||||
msgid "screen;reader;accessibility;speech;braille;"
|
msgid "screen;reader;accessibility;speech;braille;"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
|||||||
@@ -34,11 +34,9 @@ msgstr ""
|
|||||||
"X-DL-Domain: po\n"
|
"X-DL-Domain: po\n"
|
||||||
"X-DL-State: Translating\n"
|
"X-DL-State: Translating\n"
|
||||||
|
|
||||||
#: cthulhu-autostart.desktop.in:3
|
|
||||||
msgid "Cthulhu Screen Reader"
|
msgid "Cthulhu Screen Reader"
|
||||||
msgstr "Lector da pantalla Cthulhu"
|
msgstr "Lector da pantalla Cthulhu"
|
||||||
|
|
||||||
#: cthulhu-autostart.desktop.in:11
|
|
||||||
msgid "screen;reader;accessibility;speech;braille;"
|
msgid "screen;reader;accessibility;speech;braille;"
|
||||||
msgstr "pantalla;lector;accesibilidade;fala;braille;"
|
msgstr "pantalla;lector;accesibilidade;fala;braille;"
|
||||||
|
|
||||||
|
|||||||
@@ -33,12 +33,10 @@ msgstr ""
|
|||||||
"\n"
|
"\n"
|
||||||
"\n"
|
"\n"
|
||||||
|
|
||||||
#: cthulhu-autostart.desktop.in:3
|
|
||||||
#, fuzzy
|
#, fuzzy
|
||||||
msgid "Cthulhu Screen Reader"
|
msgid "Cthulhu Screen Reader"
|
||||||
msgstr "Cthulhu સ્ક્રીન વાંચક અને વિસ્તૃતકારક"
|
msgstr "Cthulhu સ્ક્રીન વાંચક અને વિસ્તૃતકારક"
|
||||||
|
|
||||||
#: cthulhu-autostart.desktop.in:11
|
|
||||||
msgid "screen;reader;accessibility;speech;braille;"
|
msgid "screen;reader;accessibility;speech;braille;"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
|||||||
@@ -14,11 +14,9 @@ msgstr ""
|
|||||||
"2 : 3);\n"
|
"2 : 3);\n"
|
||||||
"X-Generator: Poedit 3.4.1\n"
|
"X-Generator: Poedit 3.4.1\n"
|
||||||
|
|
||||||
#: cthulhu-autostart.desktop.in:3
|
|
||||||
msgid "Cthulhu Screen Reader"
|
msgid "Cthulhu Screen Reader"
|
||||||
msgstr "מקריא המסך Cthulhu"
|
msgstr "מקריא המסך Cthulhu"
|
||||||
|
|
||||||
#: cthulhu-autostart.desktop.in:11
|
|
||||||
msgid "screen;reader;accessibility;speech;braille;"
|
msgid "screen;reader;accessibility;speech;braille;"
|
||||||
msgstr "מסך;קורא;נגישות;דיבור;ברייל;"
|
msgstr "מסך;קורא;נגישות;דיבור;ברייל;"
|
||||||
|
|
||||||
|
|||||||
@@ -22,11 +22,9 @@ msgstr ""
|
|||||||
"\n"
|
"\n"
|
||||||
"X-Generator: Lokalize 1.5\n"
|
"X-Generator: Lokalize 1.5\n"
|
||||||
|
|
||||||
#: cthulhu-autostart.desktop.in:3
|
|
||||||
msgid "Cthulhu Screen Reader"
|
msgid "Cthulhu Screen Reader"
|
||||||
msgstr "Cthulhu स्क्रीन वाचक"
|
msgstr "Cthulhu स्क्रीन वाचक"
|
||||||
|
|
||||||
#: cthulhu-autostart.desktop.in:11
|
|
||||||
#, fuzzy
|
#, fuzzy
|
||||||
msgid "screen;reader;accessibility;speech;braille;"
|
msgid "screen;reader;accessibility;speech;braille;"
|
||||||
msgstr "स्क्रीन रीडर;भाषण;ब्रेल;"
|
msgstr "स्क्रीन रीडर;भाषण;ब्रेल;"
|
||||||
|
|||||||
@@ -20,11 +20,9 @@ msgstr ""
|
|||||||
"X-Launchpad-Export-Date: 2016-09-15 12:40+0000\n"
|
"X-Launchpad-Export-Date: 2016-09-15 12:40+0000\n"
|
||||||
"X-Generator: Poedit 1.6.10\n"
|
"X-Generator: Poedit 1.6.10\n"
|
||||||
|
|
||||||
#: cthulhu-autostart.desktop.in:3
|
|
||||||
msgid "Cthulhu Screen Reader"
|
msgid "Cthulhu Screen Reader"
|
||||||
msgstr "Cthulhu čitač zaslona"
|
msgstr "Cthulhu čitač zaslona"
|
||||||
|
|
||||||
#: cthulhu-autostart.desktop.in:11
|
|
||||||
msgid "screen;reader;accessibility;speech;braille;"
|
msgid "screen;reader;accessibility;speech;braille;"
|
||||||
msgstr "čitač zaslona;govor;brajica;"
|
msgstr "čitač zaslona;govor;brajica;"
|
||||||
|
|
||||||
|
|||||||
@@ -22,11 +22,9 @@ msgstr ""
|
|||||||
"X-Generator: Poedit 2.3\n"
|
"X-Generator: Poedit 2.3\n"
|
||||||
|
|
||||||
# Megjegyzés: Mivel mindenhol régóta Gáborral egyeztetve az Cthulhu nevet magyarosan Orkaként írjuk a fordításban, így a fordítást megváltoztattam Orka képernyőolvasóra az Cthulhu képernyőolvasó helyett.
|
# Megjegyzés: Mivel mindenhol régóta Gáborral egyeztetve az Cthulhu nevet magyarosan Orkaként írjuk a fordításban, így a fordítást megváltoztattam Orka képernyőolvasóra az Cthulhu képernyőolvasó helyett.
|
||||||
#: cthulhu-autostart.desktop.in:3
|
|
||||||
msgid "Cthulhu Screen Reader"
|
msgid "Cthulhu Screen Reader"
|
||||||
msgstr "Orka képernyőolvasó"
|
msgstr "Orka képernyőolvasó"
|
||||||
|
|
||||||
#: cthulhu-autostart.desktop.in:11
|
|
||||||
msgid "screen;reader;accessibility;speech;braille;"
|
msgid "screen;reader;accessibility;speech;braille;"
|
||||||
msgstr "képernyő;olvasó;akadálymentesítés;beszéd;braille;"
|
msgstr "képernyő;olvasó;akadálymentesítés;beszéd;braille;"
|
||||||
|
|
||||||
|
|||||||
@@ -20,11 +20,9 @@ msgstr ""
|
|||||||
"Plural-Forms: nplurals=1; plural=0;\n"
|
"Plural-Forms: nplurals=1; plural=0;\n"
|
||||||
"X-Generator: Poedit 3.3.2\n"
|
"X-Generator: Poedit 3.3.2\n"
|
||||||
|
|
||||||
#: cthulhu-autostart.desktop.in:3
|
|
||||||
msgid "Cthulhu Screen Reader"
|
msgid "Cthulhu Screen Reader"
|
||||||
msgstr "Pembaca Layar Cthulhu"
|
msgstr "Pembaca Layar Cthulhu"
|
||||||
|
|
||||||
#: cthulhu-autostart.desktop.in:11
|
|
||||||
msgid "screen;reader;accessibility;speech;braille;"
|
msgid "screen;reader;accessibility;speech;braille;"
|
||||||
msgstr "layar;pembaca;aksesibilitas;ucapan;braille;"
|
msgstr "layar;pembaca;aksesibilitas;ucapan;braille;"
|
||||||
|
|
||||||
|
|||||||
@@ -17,11 +17,9 @@ msgstr ""
|
|||||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||||
"X-Generator: Lokalize 1.5\n"
|
"X-Generator: Lokalize 1.5\n"
|
||||||
|
|
||||||
#: cthulhu-autostart.desktop.in:3
|
|
||||||
msgid "Cthulhu Screen Reader"
|
msgid "Cthulhu Screen Reader"
|
||||||
msgstr "Cthulhu skjálestur"
|
msgstr "Cthulhu skjálestur"
|
||||||
|
|
||||||
#: cthulhu-autostart.desktop.in:11
|
|
||||||
msgid "screen;reader;accessibility;speech;braille;"
|
msgid "screen;reader;accessibility;speech;braille;"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
|||||||
@@ -39,11 +39,9 @@ msgstr ""
|
|||||||
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
|
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
|
||||||
"X-Generator: Gtranslator 42.0\n"
|
"X-Generator: Gtranslator 42.0\n"
|
||||||
|
|
||||||
#: cthulhu-autostart.desktop.in:3
|
|
||||||
msgid "Cthulhu Screen Reader"
|
msgid "Cthulhu Screen Reader"
|
||||||
msgstr "Lettore schermo Cthulhu"
|
msgstr "Lettore schermo Cthulhu"
|
||||||
|
|
||||||
#: cthulhu-autostart.desktop.in:11
|
|
||||||
msgid "screen;reader;accessibility;speech;braille;"
|
msgid "screen;reader;accessibility;speech;braille;"
|
||||||
msgstr "lettore;schermo;accessibilità;voce;braille;"
|
msgstr "lettore;schermo;accessibilità;voce;braille;"
|
||||||
|
|
||||||
|
|||||||
@@ -25,11 +25,9 @@ msgstr ""
|
|||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"Plural-Forms: nplurals=1; plural=0;\n"
|
"Plural-Forms: nplurals=1; plural=0;\n"
|
||||||
|
|
||||||
#: cthulhu-autostart.desktop.in:3
|
|
||||||
msgid "Cthulhu Screen Reader"
|
msgid "Cthulhu Screen Reader"
|
||||||
msgstr "Cthulhu スクリーンリーダー"
|
msgstr "Cthulhu スクリーンリーダー"
|
||||||
|
|
||||||
#: cthulhu-autostart.desktop.in:11
|
|
||||||
msgid "screen;reader;accessibility;speech;braille;"
|
msgid "screen;reader;accessibility;speech;braille;"
|
||||||
msgstr "スクリーン;リーダー;アクセシビリティ;音声;点字;"
|
msgstr "スクリーン;リーダー;アクセシビリティ;音声;点字;"
|
||||||
|
|
||||||
|
|||||||
@@ -18,11 +18,9 @@ msgstr ""
|
|||||||
"Plural-Forms: nplurals=1; plural=0;\n"
|
"Plural-Forms: nplurals=1; plural=0;\n"
|
||||||
"X-Generator: Poedit 3.3.2\n"
|
"X-Generator: Poedit 3.3.2\n"
|
||||||
|
|
||||||
#: cthulhu-autostart.desktop.in:3
|
|
||||||
msgid "Cthulhu Screen Reader"
|
msgid "Cthulhu Screen Reader"
|
||||||
msgstr "Cthulhu - ეკრანის მკითხველი"
|
msgstr "Cthulhu - ეკრანის მკითხველი"
|
||||||
|
|
||||||
#: cthulhu-autostart.desktop.in:11
|
|
||||||
msgid "screen;reader;accessibility;speech;braille;"
|
msgid "screen;reader;accessibility;speech;braille;"
|
||||||
msgstr "ეკრანი;მკითხველი;ხელმისაწვდომობა;მეტყველება;ბრაილი;"
|
msgstr "ეკრანი;მკითხველი;ხელმისაწვდომობა;მეტყველება;ბრაილი;"
|
||||||
|
|
||||||
|
|||||||
@@ -18,11 +18,9 @@ msgstr ""
|
|||||||
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
|
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
|
||||||
"X-Generator: Poedit 3.0\n"
|
"X-Generator: Poedit 3.0\n"
|
||||||
|
|
||||||
#: cthulhu-autostart.desktop.in:3
|
|
||||||
msgid "Cthulhu Screen Reader"
|
msgid "Cthulhu Screen Reader"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: cthulhu-autostart.desktop.in:11
|
|
||||||
msgid "screen;reader;accessibility;speech;braille;"
|
msgid "screen;reader;accessibility;speech;braille;"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
|||||||
@@ -18,11 +18,9 @@ msgstr ""
|
|||||||
"Plural-Forms: nplurals=1; plural=0;\n"
|
"Plural-Forms: nplurals=1; plural=0;\n"
|
||||||
"X-Generator: Poedit 3.3.2\n"
|
"X-Generator: Poedit 3.3.2\n"
|
||||||
|
|
||||||
#: cthulhu-autostart.desktop.in:3
|
|
||||||
msgid "Cthulhu Screen Reader"
|
msgid "Cthulhu Screen Reader"
|
||||||
msgstr "Cthulhu экраннан оқитын қолданбасы"
|
msgstr "Cthulhu экраннан оқитын қолданбасы"
|
||||||
|
|
||||||
#: cthulhu-autostart.desktop.in:11
|
|
||||||
msgid "screen;reader;accessibility;speech;braille;"
|
msgid "screen;reader;accessibility;speech;braille;"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
|||||||
@@ -18,12 +18,10 @@ msgstr ""
|
|||||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||||
"X-Generator: KBabel 1.11.4\n"
|
"X-Generator: KBabel 1.11.4\n"
|
||||||
|
|
||||||
#: cthulhu-autostart.desktop.in:3
|
|
||||||
#, fuzzy
|
#, fuzzy
|
||||||
msgid "Cthulhu Screen Reader"
|
msgid "Cthulhu Screen Reader"
|
||||||
msgstr "ಆದ್ಯತೆಗಳು"
|
msgstr "ಆದ್ಯತೆಗಳು"
|
||||||
|
|
||||||
#: cthulhu-autostart.desktop.in:11
|
|
||||||
msgid "screen;reader;accessibility;speech;braille;"
|
msgid "screen;reader;accessibility;speech;braille;"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
|||||||
@@ -15,11 +15,9 @@ msgstr ""
|
|||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"Plural-Forms: nplurals=1; plural=0;\n"
|
"Plural-Forms: nplurals=1; plural=0;\n"
|
||||||
|
|
||||||
#: cthulhu-autostart.desktop.in:3
|
|
||||||
msgid "Cthulhu Screen Reader"
|
msgid "Cthulhu Screen Reader"
|
||||||
msgstr "Cthulhu 화면 낭독기"
|
msgstr "Cthulhu 화면 낭독기"
|
||||||
|
|
||||||
#: cthulhu-autostart.desktop.in:11
|
|
||||||
msgid "screen;reader;accessibility;speech;braille;"
|
msgid "screen;reader;accessibility;speech;braille;"
|
||||||
msgstr "화면;리더;접근성;음성;점자;"
|
msgstr "화면;리더;접근성;음성;점자;"
|
||||||
|
|
||||||
|
|||||||
@@ -25,11 +25,9 @@ msgstr ""
|
|||||||
"(n%100<10 || n%100>=20) ? 1 : 2);\n"
|
"(n%100<10 || n%100>=20) ? 1 : 2);\n"
|
||||||
"X-Generator: Poedit 3.3.2\n"
|
"X-Generator: Poedit 3.3.2\n"
|
||||||
|
|
||||||
#: cthulhu-autostart.desktop.in:3
|
|
||||||
msgid "Cthulhu Screen Reader"
|
msgid "Cthulhu Screen Reader"
|
||||||
msgstr "Cthulhu ekrano skaityklė"
|
msgstr "Cthulhu ekrano skaityklė"
|
||||||
|
|
||||||
#: cthulhu-autostart.desktop.in:11
|
|
||||||
msgid "screen;reader;accessibility;speech;braille;"
|
msgid "screen;reader;accessibility;speech;braille;"
|
||||||
msgstr "ekrano skaityklė;kalba;brailio raštas;"
|
msgstr "ekrano skaityklė;kalba;brailio raštas;"
|
||||||
|
|
||||||
|
|||||||
@@ -23,11 +23,9 @@ msgstr ""
|
|||||||
"2);\n"
|
"2);\n"
|
||||||
"X-Generator: Lokalize 21.12.3\n"
|
"X-Generator: Lokalize 21.12.3\n"
|
||||||
|
|
||||||
#: cthulhu-autostart.desktop.in:3
|
|
||||||
msgid "Cthulhu Screen Reader"
|
msgid "Cthulhu Screen Reader"
|
||||||
msgstr "Cthulhu ekrāna lasītājs"
|
msgstr "Cthulhu ekrāna lasītājs"
|
||||||
|
|
||||||
#: cthulhu-autostart.desktop.in:11
|
|
||||||
msgid "screen;reader;accessibility;speech;braille;"
|
msgid "screen;reader;accessibility;speech;braille;"
|
||||||
msgstr "ekrāna lasītājs;runa;Brails;"
|
msgstr "ekrāna lasītājs;runa;Brails;"
|
||||||
|
|
||||||
|
|||||||
@@ -19,12 +19,10 @@ msgstr ""
|
|||||||
"\n"
|
"\n"
|
||||||
"\n"
|
"\n"
|
||||||
|
|
||||||
#: cthulhu-autostart.desktop.in:3
|
|
||||||
#, fuzzy
|
#, fuzzy
|
||||||
msgid "Cthulhu Screen Reader"
|
msgid "Cthulhu Screen Reader"
|
||||||
msgstr "Cthulhu स्क्रीन पाठक / आवर्द्धक"
|
msgstr "Cthulhu स्क्रीन पाठक / आवर्द्धक"
|
||||||
|
|
||||||
#: cthulhu-autostart.desktop.in:11
|
|
||||||
msgid "screen;reader;accessibility;speech;braille;"
|
msgid "screen;reader;accessibility;speech;braille;"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
|||||||
@@ -18,11 +18,9 @@ msgstr ""
|
|||||||
"Plural-Forms: nplurals=2; plural= n==1 || n%10==1 ? 0 : 1\n"
|
"Plural-Forms: nplurals=2; plural= n==1 || n%10==1 ? 0 : 1\n"
|
||||||
"X-Generator: KBabel 1.11.4\n"
|
"X-Generator: KBabel 1.11.4\n"
|
||||||
|
|
||||||
#: cthulhu-autostart.desktop.in:3
|
|
||||||
msgid "Cthulhu Screen Reader"
|
msgid "Cthulhu Screen Reader"
|
||||||
msgstr "Cthulhu читач на екранот"
|
msgstr "Cthulhu читач на екранот"
|
||||||
|
|
||||||
#: cthulhu-autostart.desktop.in:11
|
|
||||||
msgid "screen;reader;accessibility;speech;braille;"
|
msgid "screen;reader;accessibility;speech;braille;"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
|||||||
@@ -22,12 +22,10 @@ msgstr ""
|
|||||||
"X-Generator: Poedit 2.0.1\n"
|
"X-Generator: Poedit 2.0.1\n"
|
||||||
"X-Project-Style: gnome\n"
|
"X-Project-Style: gnome\n"
|
||||||
|
|
||||||
#: cthulhu-autostart.desktop.in:3
|
|
||||||
#, fuzzy
|
#, fuzzy
|
||||||
msgid "Cthulhu Screen Reader"
|
msgid "Cthulhu Screen Reader"
|
||||||
msgstr "സ്ക്രീന് വായന അവസാനിപ്പിക്കാം."
|
msgstr "സ്ക്രീന് വായന അവസാനിപ്പിക്കാം."
|
||||||
|
|
||||||
#: cthulhu-autostart.desktop.in:11
|
|
||||||
msgid "screen;reader;accessibility;speech;braille;"
|
msgid "screen;reader;accessibility;speech;braille;"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
|||||||
@@ -18,12 +18,10 @@ msgstr ""
|
|||||||
"X-Generator: KBabel 1.9.1\n"
|
"X-Generator: KBabel 1.9.1\n"
|
||||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||||
|
|
||||||
#: cthulhu-autostart.desktop.in:3
|
|
||||||
#, fuzzy
|
#, fuzzy
|
||||||
msgid "Cthulhu Screen Reader"
|
msgid "Cthulhu Screen Reader"
|
||||||
msgstr "वर्धक भिंग"
|
msgstr "वर्धक भिंग"
|
||||||
|
|
||||||
#: cthulhu-autostart.desktop.in:11
|
|
||||||
msgid "screen;reader;accessibility;speech;braille;"
|
msgid "screen;reader;accessibility;speech;braille;"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
|||||||
@@ -18,11 +18,9 @@ msgstr ""
|
|||||||
"Plural-Forms: nplurals=1; plural=0;\n"
|
"Plural-Forms: nplurals=1; plural=0;\n"
|
||||||
"X-Generator: Poedit 2.0.6\n"
|
"X-Generator: Poedit 2.0.6\n"
|
||||||
|
|
||||||
#: cthulhu-autostart.desktop.in:3
|
|
||||||
msgid "Cthulhu Screen Reader"
|
msgid "Cthulhu Screen Reader"
|
||||||
msgstr "Pembaca skrin Cthulhu"
|
msgstr "Pembaca skrin Cthulhu"
|
||||||
|
|
||||||
#: cthulhu-autostart.desktop.in:11
|
|
||||||
msgid "screen;reader;accessibility;speech;braille;"
|
msgid "screen;reader;accessibility;speech;braille;"
|
||||||
msgstr "skrin;pembaca;kebolehcapaian;pertuturan;braille;"
|
msgstr "skrin;pembaca;kebolehcapaian;pertuturan;braille;"
|
||||||
|
|
||||||
|
|||||||
@@ -19,11 +19,9 @@ msgstr ""
|
|||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||||
|
|
||||||
#: cthulhu-autostart.desktop.in:3
|
|
||||||
msgid "Cthulhu Screen Reader"
|
msgid "Cthulhu Screen Reader"
|
||||||
msgstr "Cthulhu skjermleser"
|
msgstr "Cthulhu skjermleser"
|
||||||
|
|
||||||
#: cthulhu-autostart.desktop.in:11
|
|
||||||
msgid "screen;reader;accessibility;speech;braille;"
|
msgid "screen;reader;accessibility;speech;braille;"
|
||||||
msgstr "skjerm;leser;tilgjengelighet;tale;blindeskrift;"
|
msgstr "skjerm;leser;tilgjengelighet;tale;blindeskrift;"
|
||||||
|
|
||||||
|
|||||||
@@ -13,11 +13,9 @@ msgstr ""
|
|||||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||||
"X-Generator: Poedit 3.0.1\n"
|
"X-Generator: Poedit 3.0.1\n"
|
||||||
|
|
||||||
#: cthulhu-autostart.desktop.in:3
|
|
||||||
msgid "Cthulhu Screen Reader"
|
msgid "Cthulhu Screen Reader"
|
||||||
msgstr "ओर्का दृष्टि वाचक"
|
msgstr "ओर्का दृष्टि वाचक"
|
||||||
|
|
||||||
#: cthulhu-autostart.desktop.in:11
|
|
||||||
msgid "screen;reader;accessibility;speech;braille;"
|
msgid "screen;reader;accessibility;speech;braille;"
|
||||||
msgstr "दृष्टि वाचक; वाचन;ब्रेल;"
|
msgstr "दृष्टि वाचक; वाचन;ब्रेल;"
|
||||||
|
|
||||||
|
|||||||
@@ -31,11 +31,9 @@ msgstr ""
|
|||||||
"X-Generator: Poedit 3.2.2\n"
|
"X-Generator: Poedit 3.2.2\n"
|
||||||
|
|
||||||
# vergrootglas/loep
|
# vergrootglas/loep
|
||||||
#: cthulhu-autostart.desktop.in:3
|
|
||||||
msgid "Cthulhu Screen Reader"
|
msgid "Cthulhu Screen Reader"
|
||||||
msgstr "Cthulhu schermlezer"
|
msgstr "Cthulhu schermlezer"
|
||||||
|
|
||||||
#: cthulhu-autostart.desktop.in:11
|
|
||||||
msgid "screen;reader;accessibility;speech;braille;"
|
msgid "screen;reader;accessibility;speech;braille;"
|
||||||
msgstr "scherm;lezer;toegankelijkheid;spraak;braille;"
|
msgstr "scherm;lezer;toegankelijkheid;spraak;braille;"
|
||||||
|
|
||||||
|
|||||||
@@ -18,12 +18,10 @@ msgstr ""
|
|||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||||
|
|
||||||
#: cthulhu-autostart.desktop.in:3
|
|
||||||
#, fuzzy
|
#, fuzzy
|
||||||
msgid "Cthulhu Screen Reader"
|
msgid "Cthulhu Screen Reader"
|
||||||
msgstr "Cthulhu skjermlesar og forstørringsglas"
|
msgstr "Cthulhu skjermlesar og forstørringsglas"
|
||||||
|
|
||||||
#: cthulhu-autostart.desktop.in:11
|
|
||||||
msgid "screen;reader;accessibility;speech;braille;"
|
msgid "screen;reader;accessibility;speech;braille;"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
|||||||
@@ -23,11 +23,9 @@ msgstr ""
|
|||||||
"X-Launchpad-Export-Date: 2015-05-21 18:05+0000\n"
|
"X-Launchpad-Export-Date: 2015-05-21 18:05+0000\n"
|
||||||
"X-Project-Style: gnome\n"
|
"X-Project-Style: gnome\n"
|
||||||
|
|
||||||
#: cthulhu-autostart.desktop.in:3
|
|
||||||
msgid "Cthulhu Screen Reader"
|
msgid "Cthulhu Screen Reader"
|
||||||
msgstr "Lector d'ecran Cthulhu"
|
msgstr "Lector d'ecran Cthulhu"
|
||||||
|
|
||||||
#: cthulhu-autostart.desktop.in:11
|
|
||||||
msgid "screen;reader;accessibility;speech;braille;"
|
msgid "screen;reader;accessibility;speech;braille;"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"lector d'ecran;oral;braille;votz;sintèsi vocala;sintesi vocala;lector "
|
"lector d'ecran;oral;braille;votz;sintèsi vocala;sintesi vocala;lector "
|
||||||
|
|||||||
@@ -22,12 +22,10 @@ msgstr ""
|
|||||||
"\n"
|
"\n"
|
||||||
"\n"
|
"\n"
|
||||||
|
|
||||||
#: cthulhu-autostart.desktop.in:3
|
|
||||||
#, fuzzy
|
#, fuzzy
|
||||||
msgid "Cthulhu Screen Reader"
|
msgid "Cthulhu Screen Reader"
|
||||||
msgstr "ଓର୍କା ସ୍କ୍ରିନ ପାଠକ /ଛୋଟକୁ ବଡ ଦେଖଉଥିବା ଉପକରଣ "
|
msgstr "ଓର୍କା ସ୍କ୍ରିନ ପାଠକ /ଛୋଟକୁ ବଡ ଦେଖଉଥିବା ଉପକରଣ "
|
||||||
|
|
||||||
#: cthulhu-autostart.desktop.in:11
|
|
||||||
msgid "screen;reader;accessibility;speech;braille;"
|
msgid "screen;reader;accessibility;speech;braille;"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
|||||||
@@ -24,11 +24,9 @@ msgstr ""
|
|||||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||||
"X-Poedit-Bookmarks: 589,-1,-1,-1,-1,-1,-1,-1,-1,-1\n"
|
"X-Poedit-Bookmarks: 589,-1,-1,-1,-1,-1,-1,-1,-1,-1\n"
|
||||||
|
|
||||||
#: cthulhu-autostart.desktop.in:3
|
|
||||||
msgid "Cthulhu Screen Reader"
|
msgid "Cthulhu Screen Reader"
|
||||||
msgstr "ਓਰਕਾ ਸਕਰੀਨ ਰੀਡਰ"
|
msgstr "ਓਰਕਾ ਸਕਰੀਨ ਰੀਡਰ"
|
||||||
|
|
||||||
#: cthulhu-autostart.desktop.in:11
|
|
||||||
msgid "screen;reader;accessibility;speech;braille;"
|
msgid "screen;reader;accessibility;speech;braille;"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
|||||||
@@ -24,11 +24,9 @@ msgstr ""
|
|||||||
"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 "
|
"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 "
|
||||||
"|| n%100>=20) ? 1 : 2);\n"
|
"|| n%100>=20) ? 1 : 2);\n"
|
||||||
|
|
||||||
#: cthulhu-autostart.desktop.in:3
|
|
||||||
msgid "Cthulhu Screen Reader"
|
msgid "Cthulhu Screen Reader"
|
||||||
msgstr "Czytnik ekranowy Cthulhu"
|
msgstr "Czytnik ekranowy Cthulhu"
|
||||||
|
|
||||||
#: cthulhu-autostart.desktop.in:11
|
|
||||||
msgid "screen;reader;accessibility;speech;braille;"
|
msgid "screen;reader;accessibility;speech;braille;"
|
||||||
msgstr "czytnik;ekran;dostępność;mowa;braille;"
|
msgstr "czytnik;ekran;dostępność;mowa;braille;"
|
||||||
|
|
||||||
|
|||||||
@@ -28,11 +28,9 @@ msgstr ""
|
|||||||
"X-Source-Language: C\n"
|
"X-Source-Language: C\n"
|
||||||
"X-Project-Style: gnome\n"
|
"X-Project-Style: gnome\n"
|
||||||
|
|
||||||
#: cthulhu-autostart.desktop.in:3
|
|
||||||
msgid "Cthulhu Screen Reader"
|
msgid "Cthulhu Screen Reader"
|
||||||
msgstr "Leitor de ecrã Cthulhu"
|
msgstr "Leitor de ecrã Cthulhu"
|
||||||
|
|
||||||
#: cthulhu-autostart.desktop.in:11
|
|
||||||
msgid "screen;reader;accessibility;speech;braille;"
|
msgid "screen;reader;accessibility;speech;braille;"
|
||||||
msgstr "leitor;ecrã;acessibilidade;voz;braille;"
|
msgstr "leitor;ecrã;acessibilidade;voz;braille;"
|
||||||
|
|
||||||
|
|||||||
@@ -49,11 +49,9 @@ msgstr ""
|
|||||||
"X-DL-Domain: po\n"
|
"X-DL-Domain: po\n"
|
||||||
"X-DL-State: Translating\n"
|
"X-DL-State: Translating\n"
|
||||||
|
|
||||||
#: cthulhu-autostart.desktop.in:3
|
|
||||||
msgid "Cthulhu Screen Reader"
|
msgid "Cthulhu Screen Reader"
|
||||||
msgstr "Leitor de tela Cthulhu"
|
msgstr "Leitor de tela Cthulhu"
|
||||||
|
|
||||||
#: cthulhu-autostart.desktop.in:11
|
|
||||||
msgid "screen;reader;accessibility;speech;braille;"
|
msgid "screen;reader;accessibility;speech;braille;"
|
||||||
msgstr "leitor;tela;acessibilidade;voz;braille;"
|
msgstr "leitor;tela;acessibilidade;voz;braille;"
|
||||||
|
|
||||||
|
|||||||
@@ -24,11 +24,9 @@ msgstr ""
|
|||||||
"X-Project-Style: gnome\n"
|
"X-Project-Style: gnome\n"
|
||||||
"X-Poedit-SourceCharset: UTF-8\n"
|
"X-Poedit-SourceCharset: UTF-8\n"
|
||||||
|
|
||||||
#: cthulhu-autostart.desktop.in:3
|
|
||||||
msgid "Cthulhu Screen Reader"
|
msgid "Cthulhu Screen Reader"
|
||||||
msgstr "Cititorul de ecran Cthulhu"
|
msgstr "Cititorul de ecran Cthulhu"
|
||||||
|
|
||||||
#: cthulhu-autostart.desktop.in:11
|
|
||||||
msgid "screen;reader;accessibility;speech;braille;"
|
msgid "screen;reader;accessibility;speech;braille;"
|
||||||
msgstr "ecran;cititor;accesibilitate;vorbire;braille;"
|
msgstr "ecran;cititor;accesibilitate;vorbire;braille;"
|
||||||
|
|
||||||
|
|||||||
@@ -22,11 +22,9 @@ msgstr ""
|
|||||||
"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
|
"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
|
||||||
"X-Generator: Poedit 3.3.2\n"
|
"X-Generator: Poedit 3.3.2\n"
|
||||||
|
|
||||||
#: cthulhu-autostart.desktop.in:3
|
|
||||||
msgid "Cthulhu Screen Reader"
|
msgid "Cthulhu Screen Reader"
|
||||||
msgstr "Экранный диктор Cthulhu"
|
msgstr "Экранный диктор Cthulhu"
|
||||||
|
|
||||||
#: cthulhu-autostart.desktop.in:11
|
|
||||||
msgid "screen;reader;accessibility;speech;braille;"
|
msgid "screen;reader;accessibility;speech;braille;"
|
||||||
msgstr "экран;чтец;доступность;речь;брайль;"
|
msgstr "экран;чтец;доступность;речь;брайль;"
|
||||||
|
|
||||||
|
|||||||
@@ -24,11 +24,9 @@ msgstr ""
|
|||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
|
||||||
#: cthulhu-autostart.desktop.in:3
|
|
||||||
msgid "Cthulhu Screen Reader"
|
msgid "Cthulhu Screen Reader"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: cthulhu-autostart.desktop.in:11
|
|
||||||
msgid "screen;reader;accessibility;speech;braille;"
|
msgid "screen;reader;accessibility;speech;braille;"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
|||||||
@@ -18,11 +18,9 @@ msgstr ""
|
|||||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||||
"X-Generator: KBabel 1.11.4\n"
|
"X-Generator: KBabel 1.11.4\n"
|
||||||
|
|
||||||
#: cthulhu-autostart.desktop.in:3
|
|
||||||
msgid "Cthulhu Screen Reader"
|
msgid "Cthulhu Screen Reader"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: cthulhu-autostart.desktop.in:11
|
|
||||||
msgid "screen;reader;accessibility;speech;braille;"
|
msgid "screen;reader;accessibility;speech;braille;"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
|||||||
@@ -19,11 +19,9 @@ msgstr ""
|
|||||||
"Plural-Forms: nplurals=3; plural=(n==1) ? 1 : (n>=2 && n<=4) ? 2 : 0;\n"
|
"Plural-Forms: nplurals=3; plural=(n==1) ? 1 : (n>=2 && n<=4) ? 2 : 0;\n"
|
||||||
"X-Generator: Gtranslator 2.91.7\n"
|
"X-Generator: Gtranslator 2.91.7\n"
|
||||||
|
|
||||||
#: cthulhu-autostart.desktop.in:3
|
|
||||||
msgid "Cthulhu Screen Reader"
|
msgid "Cthulhu Screen Reader"
|
||||||
msgstr "Ukončí čítačku obrazovky"
|
msgstr "Ukončí čítačku obrazovky"
|
||||||
|
|
||||||
#: cthulhu-autostart.desktop.in:11
|
|
||||||
msgid "screen;reader;accessibility;speech;braille;"
|
msgid "screen;reader;accessibility;speech;braille;"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
|||||||
@@ -22,11 +22,9 @@ msgstr ""
|
|||||||
"X-Poedit-SourceCharset: utf-8\n"
|
"X-Poedit-SourceCharset: utf-8\n"
|
||||||
"X-Generator: Poedit 3.0.1\n"
|
"X-Generator: Poedit 3.0.1\n"
|
||||||
|
|
||||||
#: cthulhu-autostart.desktop.in:3
|
|
||||||
msgid "Cthulhu Screen Reader"
|
msgid "Cthulhu Screen Reader"
|
||||||
msgstr "Zaslonski bralnik Orka"
|
msgstr "Zaslonski bralnik Orka"
|
||||||
|
|
||||||
#: cthulhu-autostart.desktop.in:11
|
|
||||||
msgid "screen;reader;accessibility;speech;braille;"
|
msgid "screen;reader;accessibility;speech;braille;"
|
||||||
msgstr "govor;zaslonski bralnik;Braillova pisava;brajica;povečevalnik"
|
msgstr "govor;zaslonski bralnik;Braillova pisava;brajica;povečevalnik"
|
||||||
|
|
||||||
|
|||||||
@@ -17,12 +17,10 @@ msgstr ""
|
|||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||||
|
|
||||||
#: cthulhu-autostart.desktop.in:3
|
|
||||||
#, fuzzy
|
#, fuzzy
|
||||||
msgid "Cthulhu Screen Reader"
|
msgid "Cthulhu Screen Reader"
|
||||||
msgstr "Ekrani Zmadhues (Lupë)"
|
msgstr "Ekrani Zmadhues (Lupë)"
|
||||||
|
|
||||||
#: cthulhu-autostart.desktop.in:11
|
|
||||||
msgid "screen;reader;accessibility;speech;braille;"
|
msgid "screen;reader;accessibility;speech;braille;"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
|||||||
@@ -21,11 +21,9 @@ msgstr ""
|
|||||||
"X-Project-Style: gnome\n"
|
"X-Project-Style: gnome\n"
|
||||||
"X-Generator: Poedit 3.1.1\n"
|
"X-Generator: Poedit 3.1.1\n"
|
||||||
|
|
||||||
#: cthulhu-autostart.desktop.in:3
|
|
||||||
msgid "Cthulhu Screen Reader"
|
msgid "Cthulhu Screen Reader"
|
||||||
msgstr "Читач екрана Орка"
|
msgstr "Читач екрана Орка"
|
||||||
|
|
||||||
#: cthulhu-autostart.desktop.in:11
|
|
||||||
msgid "screen;reader;accessibility;speech;braille;"
|
msgid "screen;reader;accessibility;speech;braille;"
|
||||||
msgstr "читач екрана;говор;брајева азбука;"
|
msgstr "читач екрана;говор;брајева азбука;"
|
||||||
|
|
||||||
|
|||||||
@@ -20,11 +20,9 @@ msgstr ""
|
|||||||
"X-Project-Style: gnome\n"
|
"X-Project-Style: gnome\n"
|
||||||
"X-Generator: Poedit 2.0.3\n"
|
"X-Generator: Poedit 2.0.3\n"
|
||||||
|
|
||||||
#: cthulhu-autostart.desktop.in:3
|
|
||||||
msgid "Cthulhu Screen Reader"
|
msgid "Cthulhu Screen Reader"
|
||||||
msgstr "Čitač ekrana Orka"
|
msgstr "Čitač ekrana Orka"
|
||||||
|
|
||||||
#: cthulhu-autostart.desktop.in:11
|
|
||||||
msgid "screen;reader;accessibility;speech;braille;"
|
msgid "screen;reader;accessibility;speech;braille;"
|
||||||
msgstr "čitač ekrana;govor;brajeva azbuka;"
|
msgstr "čitač ekrana;govor;brajeva azbuka;"
|
||||||
|
|
||||||
|
|||||||
@@ -20,11 +20,9 @@ msgstr ""
|
|||||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||||
"X-Generator: Poedit 3.3.2\n"
|
"X-Generator: Poedit 3.3.2\n"
|
||||||
|
|
||||||
#: cthulhu-autostart.desktop.in:3
|
|
||||||
msgid "Cthulhu Screen Reader"
|
msgid "Cthulhu Screen Reader"
|
||||||
msgstr "Cthulhu skärmläsare"
|
msgstr "Cthulhu skärmläsare"
|
||||||
|
|
||||||
#: cthulhu-autostart.desktop.in:11
|
|
||||||
msgid "screen;reader;accessibility;speech;braille;"
|
msgid "screen;reader;accessibility;speech;braille;"
|
||||||
msgstr "skärm;läsare;tillgänglighet;tal;punktskrift;"
|
msgstr "skärm;läsare;tillgänglighet;tal;punktskrift;"
|
||||||
|
|
||||||
|
|||||||
@@ -24,11 +24,9 @@ msgstr ""
|
|||||||
"Plural-Forms: nplurals=2; plural=(n!=1);\\n\n"
|
"Plural-Forms: nplurals=2; plural=(n!=1);\\n\n"
|
||||||
"\n"
|
"\n"
|
||||||
|
|
||||||
#: cthulhu-autostart.desktop.in:3
|
|
||||||
msgid "Cthulhu Screen Reader"
|
msgid "Cthulhu Screen Reader"
|
||||||
msgstr "ஆர்கா திரை படிப்பி "
|
msgstr "ஆர்கா திரை படிப்பி "
|
||||||
|
|
||||||
#: cthulhu-autostart.desktop.in:11
|
|
||||||
#, fuzzy
|
#, fuzzy
|
||||||
msgid "screen;reader;accessibility;speech;braille;"
|
msgid "screen;reader;accessibility;speech;braille;"
|
||||||
msgstr "திரைபடிப்பான்;பேசுதல்;ப்ரெய்ல்;"
|
msgstr "திரைபடிப்பான்;பேசுதல்;ப்ரெய்ல்;"
|
||||||
|
|||||||
@@ -23,11 +23,9 @@ msgstr ""
|
|||||||
"Plural-Forms: nplurals=2; plural=(n!=1);\n"
|
"Plural-Forms: nplurals=2; plural=(n!=1);\n"
|
||||||
"X-Generator: KBabel 1.11.4\n"
|
"X-Generator: KBabel 1.11.4\n"
|
||||||
|
|
||||||
#: cthulhu-autostart.desktop.in:3
|
|
||||||
msgid "Cthulhu Screen Reader"
|
msgid "Cthulhu Screen Reader"
|
||||||
msgstr "ఓర్కా తెరచదువరి"
|
msgstr "ఓర్కా తెరచదువరి"
|
||||||
|
|
||||||
#: cthulhu-autostart.desktop.in:11
|
|
||||||
msgid "screen;reader;accessibility;speech;braille;"
|
msgid "screen;reader;accessibility;speech;braille;"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
|||||||
@@ -18,11 +18,9 @@ msgstr ""
|
|||||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||||
"X-Generator: Poedit 1.6.3\n"
|
"X-Generator: Poedit 1.6.3\n"
|
||||||
|
|
||||||
#: cthulhu-autostart.desktop.in:3
|
|
||||||
msgid "Cthulhu Screen Reader"
|
msgid "Cthulhu Screen Reader"
|
||||||
msgstr "Хонандаи экрани Cthulhu"
|
msgstr "Хонандаи экрани Cthulhu"
|
||||||
|
|
||||||
#: cthulhu-autostart.desktop.in:11
|
|
||||||
#, fuzzy
|
#, fuzzy
|
||||||
msgid "screen;reader;accessibility;speech;braille;"
|
msgid "screen;reader;accessibility;speech;braille;"
|
||||||
msgstr "хонандаи экран;нутқ;брайл;"
|
msgstr "хонандаи экран;нутқ;брайл;"
|
||||||
|
|||||||
@@ -19,11 +19,9 @@ msgstr ""
|
|||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"Plural-Forms: nplurals=1; plural=0;\n"
|
"Plural-Forms: nplurals=1; plural=0;\n"
|
||||||
|
|
||||||
#: cthulhu-autostart.desktop.in:3
|
|
||||||
msgid "Cthulhu Screen Reader"
|
msgid "Cthulhu Screen Reader"
|
||||||
msgstr "โปรแกรมอ่านหน้าจอ Cthulhu"
|
msgstr "โปรแกรมอ่านหน้าจอ Cthulhu"
|
||||||
|
|
||||||
#: cthulhu-autostart.desktop.in:11
|
|
||||||
msgid "screen;reader;accessibility;speech;braille;"
|
msgid "screen;reader;accessibility;speech;braille;"
|
||||||
msgstr "หน้าจอ;อ่าน;การเข้าถึง;เสียงพูด;อักษรเบรลล์;"
|
msgstr "หน้าจอ;อ่าน;การเข้าถึง;เสียงพูด;อักษรเบรลล์;"
|
||||||
|
|
||||||
|
|||||||
@@ -27,11 +27,9 @@ msgstr ""
|
|||||||
"Plural-Forms: nplurals=1; plural=0;\n"
|
"Plural-Forms: nplurals=1; plural=0;\n"
|
||||||
"X-Generator: Poedit 3.4\n"
|
"X-Generator: Poedit 3.4\n"
|
||||||
|
|
||||||
#: cthulhu-autostart.desktop.in:3
|
|
||||||
msgid "Cthulhu Screen Reader"
|
msgid "Cthulhu Screen Reader"
|
||||||
msgstr "Cthulhu Ekran Okuyucu"
|
msgstr "Cthulhu Ekran Okuyucu"
|
||||||
|
|
||||||
#: cthulhu-autostart.desktop.in:11
|
|
||||||
msgid "screen;reader;accessibility;speech;braille;"
|
msgid "screen;reader;accessibility;speech;braille;"
|
||||||
msgstr "ekran;okuyucu;erişilebilirlik;konuşma;braille;"
|
msgstr "ekran;okuyucu;erişilebilirlik;konuşma;braille;"
|
||||||
|
|
||||||
|
|||||||
@@ -20,11 +20,9 @@ msgstr ""
|
|||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"Plural-Forms: nplurals=1; plural=0;\n"
|
"Plural-Forms: nplurals=1; plural=0;\n"
|
||||||
|
|
||||||
#: cthulhu-autostart.desktop.in:3
|
|
||||||
msgid "Cthulhu Screen Reader"
|
msgid "Cthulhu Screen Reader"
|
||||||
msgstr "Cthulhu ئېكران ئوقۇغۇ"
|
msgstr "Cthulhu ئېكران ئوقۇغۇ"
|
||||||
|
|
||||||
#: cthulhu-autostart.desktop.in:11
|
|
||||||
#, fuzzy
|
#, fuzzy
|
||||||
msgid "screen;reader;accessibility;speech;braille;"
|
msgid "screen;reader;accessibility;speech;braille;"
|
||||||
msgstr "screen reader;speech;braille;ئېكران ئوقۇغۇچ;تاۋۇش;ئەمالار ئېلىپبەسى;"
|
msgstr "screen reader;speech;braille;ئېكران ئوقۇغۇچ;تاۋۇش;ئەمالار ئېلىپبەسى;"
|
||||||
|
|||||||
@@ -26,11 +26,9 @@ msgstr ""
|
|||||||
"n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
|
"n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
|
||||||
"X-Generator: Lokalize 20.12.0\n"
|
"X-Generator: Lokalize 20.12.0\n"
|
||||||
|
|
||||||
#: cthulhu-autostart.desktop.in:3
|
|
||||||
msgid "Cthulhu Screen Reader"
|
msgid "Cthulhu Screen Reader"
|
||||||
msgstr "Інструмент читання з екрана «Cthulhu»"
|
msgstr "Інструмент читання з екрана «Cthulhu»"
|
||||||
|
|
||||||
#: cthulhu-autostart.desktop.in:11
|
|
||||||
msgid "screen;reader;accessibility;speech;braille;"
|
msgid "screen;reader;accessibility;speech;braille;"
|
||||||
msgstr "екран;читач;доступність;мовлення;брайль;"
|
msgstr "екран;читач;доступність;мовлення;брайль;"
|
||||||
|
|
||||||
|
|||||||
@@ -18,11 +18,9 @@ msgstr ""
|
|||||||
"Plural-Forms: nplurals=1; plural=0;\n"
|
"Plural-Forms: nplurals=1; plural=0;\n"
|
||||||
"X-Generator: LocFactoryEditor 1.8\n"
|
"X-Generator: LocFactoryEditor 1.8\n"
|
||||||
|
|
||||||
#: cthulhu-autostart.desktop.in:3
|
|
||||||
msgid "Cthulhu Screen Reader"
|
msgid "Cthulhu Screen Reader"
|
||||||
msgstr "Trình đọc màn hình Cthulhu"
|
msgstr "Trình đọc màn hình Cthulhu"
|
||||||
|
|
||||||
#: cthulhu-autostart.desktop.in:11
|
|
||||||
msgid "screen;reader;accessibility;speech;braille;"
|
msgid "screen;reader;accessibility;speech;braille;"
|
||||||
msgstr "màn hình;đọc;trợ năng;giọng nói;chữ nổi;"
|
msgstr "màn hình;đọc;trợ năng;giọng nói;chữ nổi;"
|
||||||
|
|
||||||
|
|||||||
@@ -29,11 +29,9 @@ msgstr ""
|
|||||||
"Plural-Forms: nplurals=1; plural=0;\n"
|
"Plural-Forms: nplurals=1; plural=0;\n"
|
||||||
"X-Generator: Poedit 3.3.2\n"
|
"X-Generator: Poedit 3.3.2\n"
|
||||||
|
|
||||||
#: cthulhu-autostart.desktop.in:3
|
|
||||||
msgid "Cthulhu Screen Reader"
|
msgid "Cthulhu Screen Reader"
|
||||||
msgstr "Cthulhu 屏幕阅读器"
|
msgstr "Cthulhu 屏幕阅读器"
|
||||||
|
|
||||||
#: cthulhu-autostart.desktop.in:11
|
|
||||||
msgid "screen;reader;accessibility;speech;braille;"
|
msgid "screen;reader;accessibility;speech;braille;"
|
||||||
msgstr "屏幕;阅读器;无障碍;语音;盲文;"
|
msgstr "屏幕;阅读器;无障碍;语音;盲文;"
|
||||||
|
|
||||||
|
|||||||
@@ -20,11 +20,9 @@ msgstr ""
|
|||||||
"Plural-Forms: nplurals=1; plural=0;\n"
|
"Plural-Forms: nplurals=1; plural=0;\n"
|
||||||
"X-Generator: Poedit 1.6.5\n"
|
"X-Generator: Poedit 1.6.5\n"
|
||||||
|
|
||||||
#: cthulhu-autostart.desktop.in:3
|
|
||||||
msgid "Cthulhu Screen Reader"
|
msgid "Cthulhu Screen Reader"
|
||||||
msgstr "Cthulhu 螢幕閱讀器"
|
msgstr "Cthulhu 螢幕閱讀器"
|
||||||
|
|
||||||
#: cthulhu-autostart.desktop.in:11
|
|
||||||
#, fuzzy
|
#, fuzzy
|
||||||
msgid "screen;reader;accessibility;speech;braille;"
|
msgid "screen;reader;accessibility;speech;braille;"
|
||||||
msgstr "screen reader;speech;braille;螢幕閱讀器;語音;點字;"
|
msgstr "screen reader;speech;braille;螢幕閱讀器;語音;點字;"
|
||||||
|
|||||||
@@ -20,11 +20,9 @@ msgstr ""
|
|||||||
"Plural-Forms: nplurals=1; plural=0;\n"
|
"Plural-Forms: nplurals=1; plural=0;\n"
|
||||||
"X-Generator: Poedit 1.8.12\n"
|
"X-Generator: Poedit 1.8.12\n"
|
||||||
|
|
||||||
#: cthulhu-autostart.desktop.in:3
|
|
||||||
msgid "Cthulhu Screen Reader"
|
msgid "Cthulhu Screen Reader"
|
||||||
msgstr "Cthulhu 螢幕閱讀器"
|
msgstr "Cthulhu 螢幕閱讀器"
|
||||||
|
|
||||||
#: cthulhu-autostart.desktop.in:11
|
|
||||||
msgid "screen;reader;accessibility;speech;braille;"
|
msgid "screen;reader;accessibility;speech;braille;"
|
||||||
msgstr "螢幕;閱讀器;無障礙;語音;點字;"
|
msgstr "螢幕;閱讀器;無障礙;語音;點字;"
|
||||||
|
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user