OpenCues has no fixed list of supported languages, and it would be dishonest to print one: language capability follows whichever model you configure. What the runtime itself contributes is script-aware plumbing (sentence boundaries, spans, and command detection that don't assume English), plus some measured caveats worth knowing.
What the runtime handles explicitly
- CJK sentence terminators. The sentence segmenter and blank routing recognise fullwidth
。!?.directly (no trailing space needed), alongside ASCII.!?. The CJK comma、is deliberately not a terminator. - Spaceless scripts. In text without word spaces, several sentences can share one whitespace-delimited word; the runtime re-homes them to synthetic span keys and uses character ranges rather than word ranges, so a Japanese or Chinese sentence dims fully and cycles correctly.
- Language-invariant settings commands. The boundary of a trailing settings phrase is found by a dedicated model call rather than English punctuation rules, validated 10/10 across English, Japanese, Korean, Thai, French, and Chinese, including Thai, which has neither sentence punctuation nor spaces. A regex over terminators remains the deterministic floor.
What's exercised in the test suites
Translation is the best-covered multilingual surface: the benchmark suites assert transforms into Spanish, Japanese, French, Chinese, Korean, Polish, Swedish, Turkish, Arabic, and Hindi, and fluid-blank lookups across French, Japanese, Spanish, German, Italian, Portuguese, Latin, Korean, Hebrew, and Russian. Grammar and rewrite prompts are written language-neutrally, but their benchmarks are English-heavy, so treat non-English rewrite quality as model-dependent rather than verified.
The honest caveats
| Caveat | Detail |
|---|---|
| Dense scripts cost more tokens | Japanese, other CJK, and Arabic run 2-3 tokens per character. An early output budget truncated a ~700-character Japanese translation mid-sentence; budgets were raised (and the bug class documented) after exactly that failure. |
| Long-buffer declines | The default model occasionally answers "nothing to do" under budget pressure on long buffers; the runtime distrusts such a verdict on buffers past a 400-character floor and takes a fresh look. |
| Simple segmenter | Sentence splitting is regex-based; unusual abbreviations can split oddly, with the model's decline path as the safety net. |
| Model differences are real | In the project's own benches, a faster candidate model measurably underperformed the default on the multilingual set (77% vs 90%), one reason the default hasn't moved. |
Practical guidance
For writing in or translating between major languages on the default provider, things just work, and inline translation is one of the most-used features. For heavy work in one specific language, spend ten minutes benchmarking your own provider choice on your own text; switching is one scalar.
Related: Translate inline · For non-native English writers · Sentence cues · GitHub repo