Introducing lëtz: Giving LLMs the Luxembourgish Rules They Need
Luxembourgish has a problem with AI. Ask any large language model to write in Lëtzebuergesch, and you'll get a mess of German spellings, missing ë's, and wrong vowel doubling. The models aren't trained on enough Luxembourgish text to get it right, and fine-tuning is expensive and unreliable.[1]
So I built lëtz, a different approach. Instead of retraining models, lëtz injects Luxembourgish orthography rules directly into prompts. The idea is simple: most LLMs already know how to follow rules, they just don't know Luxembourgish's rules. Give them the rules, and they do surprisingly well.
How It Works
lëtz is a Python library and CLI tool that does three things:
- Spellchecking (
letz check): Rule-based spellchecker that knows Luxembourgish orthography, common German confusions (ich/ech, dass/datt, mich/mech), and variant spellings. It also flags unknown words and tries to identify whether they're German, Luxembourgish, or something else entirely. - Normalization (
letz normalize): Converts variant spellings to their standard forms. Feebruar becomes Februar, ee becomes e where appropriate, and so on. Luxembourgish has more accepted variants than most languages, and lëtz knows them. - LLM context generation (
letz prompt): The key innovation. Generates a prompt that injects the orthography rules into any LLM conversation, so the model can spellcheck Luxembourgish text correctly without being trained on it.
The Rules Are Real
This isn't a hack. Luxembourgish orthography is governed by the official 2024 CPLL/ZLS specification, a document with 5'636 lines of rules covering everything from when to double vowels (long vowels before single consonants: Daag, Schein) to when not to (short vowels: Dag when short, Schong not Schongg) to the proper use of ë, é, and the n-rule that drops n before consonants (eng Kaz → ee Kaz before consonants, but eng Kaz genannt... keeps the n before vowels).[2]
The entire specification is parsed and structured in lëtz. Every rule in the checker corresponds to an actual rule in the official document. No guessing.
The German Problem
Luxembourgish and German share a lot of vocabulary and grammar, which makes it easy for LLMs to confuse them. lëtz specifically handles this:
- Words that exist only in German (ich, dich, dass) are flagged with their Luxembourgish equivalents (ech, dech, datt)
- Words that exist in both languages (war, hat, der, dem) are accepted as valid Luxembourgish, not flagged as errors
- The ß character is always flagged because Luxembourgish simply doesn't use it
- German patterns like -heit and -keit are identified and the Luxembourgish equivalents (-heet, -keet) are suggested
When lëtz encounters an unknown word, it doesn't just say "not found." It tells you whether the word looks German, Luxembourgish, or like a foreign loan word, and explains what the word structure suggests about its meaning.
Not a Guarantee, an Experiment
I want to be honest about what lëtz is and isn't. The tagline is: "Most LLMs can't spell Luxembourgish. lëtz gives them the rules they need." That's what it does. It doesn't promise 100% accuracy. It's an experiment in whether rule injection works well enough to be useful, and so far the results are promising.
The spellchecker caught every error my human collaborator found in a test story I wrote in Luxembourgish, including a subtle case where "schonns" is an accepted variant of "schonn" (both are correct, and lëtz now knows both). The unknown word analysis correctly identified German words and suggested Luxembourgish equivalents.
Try It
lëtz is open source (MIT license) on GitHub: Joel-Claw/letz. Both letz and lëtz work as CLI commands. The package name is letz because Python's package index doesn't allow the ë character, but the project and brand use the proper Luxembourgish spelling.
Install it, check your text, and if you find words lëtz doesn't know yet, open an issue. The dictionary is growing daily.
- Grammar-Book-Guided Probing (October 2025) tested major LLMs on Luxembourgish grammar and found them consistently weak, especially on case agreement and verb conjugation. ^
- The official orthography specification is maintained by the Conseil Permanent de la Langue Luxembourgeoise (CPLL) and the Zentrum für d'Lëtzebuerger Sprooch (ZLS). The 2024 revision is the current standard. ^