Building Multilingual Moderation: Lessons from 14 Languages
Reaching production detection quality across 14 languages is not a translation problem. It is a cultural, linguistic, and engineering problem. Here is what we learned.
The myth of "just translate the taxonomy"
When we started building Sentiqra, the obvious approach to multilingual support was: take the English taxonomy, translate the indicators into 13 other languages, and evaluate. It took us about two weeks to discover why that does not work.
The first problem was German. The English indicator "worthless person" has a clean German translation: "wertlose Person." But German speakers do not say "wertlose Person" when they insult someone. They say "Witzfigur" (figure of fun), "Nietenheld" (hero of failures), or "Null" (zero). A literal translation of the English indicator misses 90% of the actual harmful language.
The second problem was Russian. Russian has a diminutive suffix system that does not exist in English. "Идиот" (idiot) and "идиотик" (little idiot) have different intensities and different social contexts. A translation that treats them as the same indicator loses the distinction. A translation that treats them as different indicators explodes the taxonomy.
The third problem was Finnish. Finnish is an agglutinative language. "Et ole mitään" (you are nothing) is three words. "Et ole mitään sellaista" (you are nothing like that) is five words with a different meaning. A system that cannot handle the morphology misses the meaning.
By the time we got to Lithuanian, we had abandoned the translation approach entirely.
What we do instead
Every supported language ships as its own versioned configuration. The indicator taxonomy is shared — the same groups and concepts apply everywhere — but each language's coverage is built for how native speakers actually write, then reviewed with native speakers, then evaluated against a per-language evaluation suite before release.
Each language is held to the same published bar before it ships: a 44-case evaluation suite per language, measured as PASS/PARTIAL/FAIL, with per-language precision results published in our benchmark methodology. A language does not reach general availability until it clears that bar.
What we learned, language by language
English (22 PASS, 22 PARTIAL, 0 FAIL)
English was the baseline. The main challenge was sarcasm and indirect insults. "Oh, you're a genius, aren't you" is harassment in context but has no explicit harmful words. Cases like this are where most evaluation effort goes — the difference between a genuine compliment and an insult is context, not vocabulary.
German (26 PASS, 18 PARTIAL, 0 FAIL)
German compound words are a detection challenge. "Witzfigur" is a single word, but its meaning is compositional. The bigger surprise was German profanity: a rich tradition of scatological insults ("Arschgeige" — literally "ass violin") that do not translate to English. Native-speaker review caught both.
French (28 PASS, 16 PARTIAL, 0 FAIL)
French was easier than expected. The main challenge was verlan — French slang that reverses syllables ("meuf" from "femme"). Verlan is used in informal French and is not captured by systems evaluated only on formal text.
Spanish (29 PASS, 15 PARTIAL, 0 FAIL)
Spanish has regional variation. "Cabron" is a severe insult in Spain but a friendly term in parts of Latin America. We ship the conservative interpretation and let customers tune behavior per region on their own evaluation sets.
Italian (30 PASS, 14 PARTIAL, 0 FAIL)
Italian was the easiest Romance language. The main challenge was dialect — Neapolitan and Sicilian insults are different from standard Italian.
Dutch (35 PASS, 9 PARTIAL, 0 FAIL)
Dutch was a surprise. Detection quality on Dutch was strong out of the gate, and the taxonomy mapped cleanly. The only challenge was compound words, similar to German but less severe.
Norwegian (30 PASS, 14 PARTIAL, 0 FAIL)
Norwegian has two written standards: Bokmål and Nynorsk. We evaluated against Bokmål (the majority standard) and found that Nynorsk works well enough due to linguistic similarity. The main challenge was that Norwegian profanity is milder than English — "drittsekk" (dirt bag) is offensive but not as severe as its English equivalent.
Polish (38 PASS, 6 PARTIAL, 0 FAIL — 86.4% precision)
Polish was the first Slavic language and the first to use Latin script with diacritics. The main challenge was case — Polish has 7 cases, and the surface form of an insult changes depending on the grammatical context.
Ukrainian (37 PASS, 7 PARTIAL, 0 FAIL — 84.1% precision)
Ukrainian uses Cyrillic and has specific characters (ї, є, ґ) that distinguish it from Russian. Detection quality held up well; reaching the published bar took more evaluation iterations than the Romance languages.
Russian (36 PASS, 8 PARTIAL, 0 FAIL — 81.8% precision)
Russian was the hardest Slavic language. Russian has a rich system of diminutives and augmentatives that change the intensity of insults. "Дурачок" (little fool) is milder than "дурак" (fool), which is milder than "дурило" (big fool). Intensity distinctions like these are exactly what per-language evaluation exists to catch.
Swedish, Finnish, Latvian, Lithuanian (all 22 PASS, 22 PARTIAL, 0 FAIL)
These four languages share a common challenge: less naturally occurring evaluation material. Reaching the published bar required the most evaluation iterations of any language family. Finnish was the hardest because of agglutination — Finnish morphology can produce very long forms that the detection system handles as single units.
The three biggest lessons
1. Translation is not localization
A translated taxonomy detects translated insults. A localized taxonomy detects the insults that native speakers actually use. The difference is the difference between a system that works and a system that does not.
2. Difficult negatives decide precision
Most quality failures are false positives — text that is close to an indicator's territory but should not trigger it. False-positive rate on difficult cases is the metric that decides whether a language is ready to ship, and it is published per language.
3. Evaluate per language, not in aggregate
Aggregate accuracy hides weak languages. Every language has its own evaluation suite, its own published precision, and its own release decision. Polish, Ukrainian, and Finnish — not English — are what separated approaches when we evaluated detection systems.
What we would do differently
If we were starting over, we would:
-
Build the test suite first. We built the taxonomy, then the test suite. In hindsight, the test suite should have been built alongside the taxonomy, with native speakers writing test cases before coverage work began.
-
Hire native speakers earlier. Initial coverage drafts go further with automation; actual coverage needs native speakers from the first pass.
-
Treat false positives as the gating metric from day one. Early versions optimized for recall. Precision on difficult cases is what makes a production system usable.
The takeaway
Multilingual moderation is not a translation problem. It is a cultural problem, a linguistic problem, and an engineering problem. The good news is that modern detection systems handle the linguistic part well. The cultural part requires native speakers. The engineering part requires evaluating every language independently rather than assuming one configuration fits all.
We spent six months bringing 14 languages to production quality. The result is a system that detects harmful content in Finnish and Lithuanian as well as it does in English. That is not because Finnish and Lithuanian are easy. It is because we treated them as first-class languages, not as translations of English.
Sentiqra supports 16 languages with published per-language precision. See our benchmark methodology for per-language results, or try the playground with your own text.
Editorial note: This article was drafted with AI assistance and reviewed by Sentiqra Engineering for technical accuracy. Classification results shown here were generated using the pinned detection configuration identified above.