[feat] Server-wide default language for live transcription
Nobody has claimed this yet.
- Dominant language
- JavaScript
- Stars
- 2.2k
- Forks
- 586
- Avg merge
- 18h 27m
- Merged PRs (30d)
- 333
Description
Is your feature request related to a problem? Please describe.
The live transcription language is stored per conversation only. LiveTranscriptionService::enable() reads $room->getLiveTranscriptionLanguageId() and omits langId entirely when it is empty, so the live_transcription app falls back to its hardcoded default (TranscribeRequest.langId: str = "en").
On an instance where the spoken language is not English this means:
- every conversation starts in English until somebody opens the conversation settings and changes it,
- users who do not know about that setting see English transcription of non-English speech, which produces nonsense,
- the obvious-looking workaround — picking their own language in the personal "translation target language" setting — makes it worse, because the speech is still transcribed with the wrong acoustic model and is then machine-translated on top, adding a task-processing round trip per segment.
We run a Nextcloud for a public-sector organisation in Türkiye with several thousand users. Turkish is the language of essentially every call. There is no way to express that once for the whole instance.
Describe the solution you'd like
A server-level default that is used when a conversation has no explicit language set, for example:
occ config:app:set spreed transcription_language_default --value tr
LiveTranscriptionService::enable() would fall back to that value before falling back to the app's own default, and the conversation setting would continue to override it. The conversation settings dropdown could show it as "Default language (Türkçe)" instead of the current hardcoded "Default language (English)".
An admin UI field in the Talk settings would be nice but the occ/app-config key alone would already solve the problem for us — it is scriptable, which is what matters for a large deployment.
Describe alternatives you've considered
- Setting the language on every conversation by hand. Not workable at our size, and it does not help conversations created later.
- Updating
oc_talk_rooms.transcription_languagedirectly in the database. It would fix existing rooms but bypasses the service layer and still leaves new rooms defaulting to English. - Changing the default in the
live_transcriptionapp instead. That app already carries a# todo: declarative settings for language overridenote, but the value logically belongs to Talk, since Talk is what decides whether to sendlangIdat all.
Additional context
Related: the same "make the default configurable instead of hardcoded" gap exists for the Photos and Talk attachment folder names, which we also hit on this deployment.
Nextcloud version: 34.0.3
Talk version: 24.0.4
live_transcription version: 2.1.3
Happy to open a PR for the app-config fallback if the approach sounds right to you.
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
Start at LiveTranscriptionService::enable() and trace how the conversation language, the spreed app-config value, and the live_transcription fallback are selected. Check the conversation settings dropdown and existing tests or app-config handling before deciding whether the UI is in scope. Done means an explicit conversation language still wins, while a configured default is passed to transcription and the existing fallback remains available.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- javascript, php
- Domain
- backend, cli, frontend
- Issue type
- Feature
- Difficulty
- 3/5
- Estimated time
- 1-2 days
- Activity status
- Active
- Clarity
- Mostly clear
- Newbie friendliness
- 68/100