WordLangSwitch (Переключение языка в Word)
Дополнение NVDA, которое автоматически переключает голос синтезатора при обнаружении помеченных изменений языка в Microsoft Word (а также в окне сообщений Outlook) – например, с нейтральными/естественными голосами (OneCore, SAPI 5).
Проблема
В интернете NVDA преобразует атрибуты lang в команды смены языка, и синтезатор подбирает соответствующий голос. В Word (при использовании доступа UIA, который включён по умолчанию для современных версий Office) язык, помеченный для каждого фрагмента текста, часто не передаётся, поэтому всё читается голосом по умолчанию.
Решение
Дополнение получает язык, указанный в документе, через объектную модель Word (Range.LanguageID), и передаёт его в данные чтения NVDA. Затем NVDA генерирует команды смены языка, и синтезатор переключает голоса – точно так же, как в интернете.
Требования
- NVDA 2023.1 или новее.
- В настройках речи NVDA должна быть включена опция «Автоматическое переключение языка (при поддержке)» (дополнительно также можно включить «Автоматическое переключение диалекта»).
- Синтезатор, поддерживающий переключение языка и имеющий голоса для нужных языков, например:
- Голоса Windows OneCore (включая естественные голоса в Windows 11),
- SAPI 5 (автоматическое переключение языка доступно начиная с NVDA 2025.1),
- eSpeak NG.
- Текст в документе Word должен быть правильно размечен с указанием языка (Рецензирование → Язык → Задать язык проверки).
Использование
- Дополнение работает автоматически при чтении с помощью клавиш со стрелками, по предложениям/абзацам, а также при чтении всего текста.
- NVDA+alt+w включает и выключает дополнение.
- NVDA+alt+k показывает диагностическую информацию (обнаруженные языки, объектную модель, настройки) – полезно для поиска неисправностей.
- Оба жеста можно изменить в диалоге «Жесты ввода» (категория «Word language switching»).
Настройки (Параметры NVDA → «Word language switching»)
- Включить/выключить дополнение.
- Упрощать диалекты: передавать только базовый язык (например,
en вместо en_GB). Рекомендуется, если драйвер синтезатора ожидает точные коды языка и игнорирует диалекты (например, некоторые драйверы нейтральных голосов).
- Сопоставления языков: переопределять отдельные коды языка в формате
источник=цель, разделяя несколько записей точкой с запятой ;.
Примеры: en_GB=en или en_GB=en_US;fr_CA=fr_FR.
Примечания / поиск неисправностей
- Если переключение не работает, сначала проверьте, работает ли оно на двуязычной веб-странице. Если нет, причина в синтезаторе/голосах или в том, что автоматическое переключение языка отключено.
- После установки новых голосов перезапустите NVDA, чтобы драйвер перезагрузил свой список голосов.
- Альтернативно, в расширенных настройках NVDA можно установить параметр «Использовать UI Automation для доступа к элементам управления документов Microsoft Word» в значение «Только при необходимости»; классическая объектная модель Word поддерживает переключение языка изначально.
- Дополнение действует только тогда, когда доступна объектная модель Word (не в защищённом режиме просмотра).
Сборка из исходных кодов
Дополнение собирается с помощью SCons, используя структуру проекта из текущего шаблона дополнений NVDA.
Необходимые компоненты:
uv
- Инструменты gettext (
xgettext, msgfmt) должны быть доступны в PATH
Сборка:
uv sync
uv run scons
Эта команда создаёт файл wordLangSwitch-<версия>.nvda-addon в корневой папке.
Выполните uv run scons pot, чтобы создать шаблон перевода (.pot).
Альтернативно, в вашем собственном окружении Python:
pip install scons Markdown
scons
Лицензия
Это дополнение распространяется по лицензии GNU General Public License версии 2 или более поздней (см. файл LICENSE).