[Bug]: Desktop spellcheck stays on OS locale (en-US) and underlines other languages
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
- Install the Linux desktop app (Nightly is enough).
- 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). - Open a new thread in the desktop composer.
- Type a normal Portuguese sentence, for example:
Preciso revisar o relatório amanhã pela manhã. - 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(allLC_*the same) - Keyboard:
br(ABNT2) - Electron/Chromium spellcheck dictionaries in the app user data:
en-USonly
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.dictionariesin the app Chromium Preferences and start with--disable-spell-checking, or - Add
pt-BRto 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
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- 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