pingdotgg / pingdotgg/t3code

[Bug]: Desktop spellcheck stays on OS locale (en-US) and underlines other languages

Open
#7,742 0 comments 2 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Dominant language
TypeScript
Stars
23k
Forks
5.9k
Avg merge
11h 14m
Merged PRs (30d)
357

Description

Before submitting
  • I searched existing issues and did not find a duplicate.
  • I included enough detail to reproduce or investigate the problem.
Area

apps/desktop

Steps to reproduce
  1. Install the Linux desktop app (Nightly is enough).
  2. Keep the OS locale as English, for example LANG=en_US.UTF-8, while the keyboard layout is another language. Here that layout is Brazilian Portuguese (br / ABNT2).
  3. Open a new thread in the desktop composer.
  4. Type a normal Portuguese sentence, for example: Preciso revisar o relatório amanhã pela manhã.
  5. Optionally inspect the Chromium spellcheck dictionaries persisted for the app. On this machine they were only en-US.

This is not limited to Portuguese. The same thing happens for any language that is not the OS locale. Related closed request: https://github.com/pingdotgg/t3code/issues/2554 (Spanish, closed as "composer disables spellcheck"). That is not true on current Nightly: the underlines are still there, and there is still no settings control.

https://github.com/pingdotgg/t3code/issues/4253 / https://github.com/pingdotgg/t3code/pull/4254 are a different bug. They keep native English spellcheck attached and even enable spellcheck on the composer. They do not add a language picker or a disable toggle.

Expected behavior

The desktop composer should not treat correct text in another language as misspelled.

Concretely, one of these (ideally both):

  • A settings control to disable spellcheck.
  • A way to choose spellcheck dictionaries (for example pt-BR, en-US, or both), instead of inferring only from the OS locale.

Keyboard layout or the language being typed should matter more than LANG=en_US. Empty dictionary lists should not fall back to en-US when the user is writing something else.

Actual behavior

Every Portuguese word is underlined as misspelled. The app has persisted Chromium spellcheck dictionaries as ["en-US"] only. Electron's default is to fill that list from the OS locale, and an empty list falls back to en-US again, so the keyboard layout never comes into play.

There is no settings toggle to turn this off, and no UI to add pt-BR (Chromium already knows that dictionary; the browser on the same machine already had it downloaded).

Impact

Cosmetic issue

Version or commit

0.0.34-nightly.20260820.1142 (package t3code-nightly-bin)

Environment
  • OS: Linux (Arch / Omarchy 4), Wayland
  • App: T3 Code Nightly desktop (t3code-nightly)
  • Locale: LANG=en_US.UTF-8 (all LC_* the same)
  • Keyboard: br (ABNT2)
  • Electron/Chromium spellcheck dictionaries in the app user data: en-US only
Logs or stack traces
$ locale | head -1
LANG=en_US.UTF-8

# Chromium Preferences for the desktop app
spellcheck.dictionaries = ["en-US"]

# Dictionaries actually downloaded for the app
en-US-10-1.bdic   # present
pt-BR-*.bdic      # missing in the app; present in Chromium on the same machine

Electron documents this fallback: if getSpellCheckerLanguages() is empty, the spellchecker uses en-US, and on launch an empty list is populated from the OS locale. That matches what is stored here.

Workaround

Quit the desktop app, then either:

  • Clear spellcheck.dictionaries in the app Chromium Preferences and start with --disable-spell-checking, or
  • Add pt-BR to that dictionaries list (Chromium will download the .bdic).

Those are user-data hacks. The running session overwrites Preferences on quit unless the process is fully stopped first. They should not be required.

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

The issue identifies apps/desktop but names no source file or test. Start by locating the Electron spellcheck initialization and the desktop settings entry point, then verify how dictionaries and disabling are exposed. Done means the composer no longer marks supported non-OS languages incorrectly and the chosen language or disable setting persists.

Written by the indexing model from the issue text.

Assessment

Tech stack
electron, typescript
Domain
desktop, internationalization
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Quiet
Clarity
Mostly clear
Newbie friendliness
48/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.