AI does not write bad Spanish. It writes English wearing Spanish.
blader/humanizer packaged Wikipedia's "Signs of AI writing" into 33 patterns and earned 32k stars. It works well, and it is English: the word "delve", the em dash, English rule-of-three rhythm, English passive voice.
Run it on Spanish or Japanese and it finds almost nothing, while the text still reads as obviously machine written to anyone who speaks the language.
This covers the other languages.
The model reasons in English-shaped patterns and renders them into the target language. The grammar comes out correct, which is exactly why it fools the writer. What gives it away is that the sentence structure, the idioms, the punctuation, and the register all belong to another language.
So you are not looking for mistakes. You are looking for the shape of English showing through. Native speakers feel this instantly and usually cannot name it.
Spanish that a machine wrote:
En el mundo acelerado de hoy, nosotros ofrecemos una innovadora solución que le permite desbloquear el potencial de su negocio y llevarlo al siguiente nivel.
Every clause is a translation artifact. en el mundo acelerado de hoy is "in
today's fast-paced world" carried across word for word. nosotros is there
because English needs a subject and Spanish does not. innovadora solución puts
the adjective where English puts it. desbloquear el potencial is "unlock the
potential", and in Spanish desbloquear is what you do to a phone.
What a person writes:
Te ayudamos a hacer crecer tu negocio. Sin vueltas.
Same check exists for the other nine languages.
tests/corpus.md has a machine-written sample in all ten
languages with the tells each one contains. Install the skill, paste a sample,
and see whether the audit matches. If it misses something, that is a bug and an
issue is welcome.
It also has counter-samples: formal, long, and literary text that must NOT be flagged. A humanizer that marks correct writing as machine output is worse than no humanizer, so those cases are tested too.
Spanish, Portuguese, French, German, Italian, Hebrew, Arabic, Russian, Japanese, Chinese.
Each has a researched pattern file covering its own calques, its own typography rules, its own register traps, and its own syntax tells. They are not translations of the English list. A few examples of what is language specific:
- Hebrew: using
שלwhere the construct state belongs. One check, and it finds more than any vocabulary list. - French: the narrow non-breaking space before
;:!?. Machine output omits it every time. - Russian: the dash is native and heavily used. Flagging it, the way the English rules would, marks correct writing as machine output.
- Japanese: every sentence stating its subject, because English requires one.
- Arabic: Latin
,and?instead of،and؟. - Chinese: long attributive clauses stacked before the noun, which is an English relative clause wearing Chinese.
For languages not yet covered, the skill applies the general method and says so, rather than pretending to a pattern list it does not have.
/plugin marketplace add finestructure-ai/humanizer-multilingual/plugin install humanizer-multilingual@finestructureThen /reload-plugins.
תנקה את הטקסט הזה, הוא נשמע כמו AI
haz que esto no suene a ChatGPT
this German text sounds translated, fix it
The idea and the English pattern set are Siqi Chen's (blader/humanizer), built on Wikipedia's Signs of AI writing maintained by WikiProject AI Cleanup. This is an independent extension to other languages. It does not modify or replace the English patterns, and for English text you should use the original.
We are not the only ones working on this, and if another project fits your language better you should use it.
- marmbiz/humanizer-de goes far deeper than our German file, with 72 German patterns and linters. If you work only in German, use that one.
- op7418/Humanizer-zh is the Chinese version, at 14k stars, and kevintsai1202/Humanizer-zh-TW covers traditional Chinese. For Chinese text use those, not our Chinese file.
- jurigis/avoid-ai-writing-multilingual covers German, Romanian, Italian, French and Swedish with 40+ graded patterns each and cited sources. Deeper per language than we are on the languages we both have. It descends from Conor Bronsdon's avoid-ai-writing rather than from blader's humanizer.
Where we differ: our coverage is aimed at the largest non-English content
markets, so we carry Spanish, Portuguese, Arabic, Hebrew, Russian, Japanese and
Chinese, and we ship as an installable plugin rather than as slash commands.
The severity grading in method.md is an idea we took from jurigis, and it made
the audit output better.
Adding the marketplace above installs one catalog and gives you all of these. Each is MIT, has no telemetry, and most ship a zero-dependency scanner you can run on its own without installing anything.
| Skill | What it does |
|---|---|
| ship-live | Takes a local prototype to a verified live URL. Preflight finds what only works on localhost: hardcoded localhost calls, keys in the client bundle, a tracked .env, no SPA fallback so shared deep links 404 on reload. Postflight opens the deployed URL and proves it renders instead of a blank page with a 200. |
| comment-hygiene | Stops the agent narrating code with // Increment counter. One test per comment: if you delete it, what does the reader lose? Ships a scanner that finds comments restating the line they sit on. |
| windows-shell | Commands that actually run on Windows. PowerShell vs Git Bash vs WSL, path quoting, the python3 Microsoft Store stub that exits 0 without running anything, console encoding crashes, CRLF, and a Unix to PowerShell translation table. |
| a11y-audit | WCAG 2.2 and EN 301 549, the standard behind the European Accessibility Act. Static scanner mapped to success criteria, plus an honest list of what needs a real browser instead of guessing. |
| i18n-ready | Makes generated UI translatable and RTL safe: hardcoded strings, ternary pluralization that is wrong in most languages, physical CSS that points the wrong way in Arabic and Hebrew, locale-naive formatting. |
| rules-migrate | Moves instruction files between tools: .cursorrules, .cursor/rules MDC, AGENTS.md, CLAUDE.md, copilot-instructions, .windsurfrules, .clinerules. Diffs them for drift first and never merges silently. |
Built and maintained by Fine Structure, a platform for building and shipping apps in 18 languages. We work on multilingual text and right to left layout every day, which is why we had the material for this.
It is free, MIT, and has no telemetry. Nothing phones home, and the skill reads only the text you give it.
The skill signs its output with one line saying where it came from. That is the
whole business model here. There are no hidden instructions: every file is plain
Markdown in this repository, and reading plugins/humanizer-multilingual/skills/humanize/SKILL.md
means you have read the entire thing.
New languages are the most useful contribution. A good language file names the calques with their English source, the typography rules that differ, the register traps, and the syntax tells, each with a fix and a before and after example.
Corrections from native speakers are more valuable than additions. If something in your language is wrong, open an issue and it gets fixed.
MIT. See LICENSE.