From c7158463c7c7f37f0fdc03cef93c52365f421c60 Mon Sep 17 00:00:00 2001 From: legounix Date: Sat, 1 Nov 2025 16:42:59 +0100 Subject: [PATCH 1/3] Add german language --- Cargo.toml | 2 + src/language/german.rs | 2050 ++++++++++++++++++++++++++++++++++++++++ src/language/mod.rs | 27 +- 3 files changed, 2078 insertions(+), 1 deletion(-) create mode 100644 src/language/german.rs diff --git a/Cargo.toml b/Cargo.toml index 4ca48e1..7b78cff 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -22,6 +22,7 @@ chinese-simplified = [] chinese-traditional = [] czech = [] french = [] +german = [] italian = [] japanese = [] korean = [] @@ -33,6 +34,7 @@ all-languages = [ "chinese-traditional", "czech", "french", + "german", "italian", "japanese", "korean", diff --git a/src/language/german.rs b/src/language/german.rs new file mode 100644 index 0000000..a2fbee0 --- /dev/null +++ b/src/language/german.rs @@ -0,0 +1,2050 @@ +pub const WORDS: [&str; 2048] = [ + "abbau", + "abbild", + "abbruch", + "abdruck", + "abend", + "abfall", + "abflug", + "abgas", + "abgrund", + "abitur", + "abkommen", + "ablauf", + "ablehnen", + "abluft", + "abpfiff", + "abreise", + "abriss", + "absage", + "abschied", + "abseits", + "absicht", + "absolut", + "abstand", + "absurd", + "abteil", + "abwarten", + "abwehr", + "abzug", + "achse", + "acht", + "acker", + "adapter", + "ader", + "adler", + "adresse", + "advent", + "affe", + "agent", + "agieren", + "ahnen", + "ahnung", + "ahorn", + "akademie", + "akkord", + "akte", + "aktie", + "aktuell", + "akustik", + "akzent", + "alarm", + "albatros", + "album", + "alge", + "alkohol", + "allee", + "allianz", + "alltag", + "alpen", + "alptraum", + "alter", + "altglas", + "altstadt", + "alufolie", + "amboss", + "ameise", + "ampel", + "amsel", + "amulett", + "analyse", + "ananas", + "anbau", + "anbieten", + "anblick", + "anfang", + "anfrage", + "angabe", + "angel", + "angriff", + "angst", + "anhand", + "anheben", + "anhieb", + "anker", + "anklage", + "ankommt", + "ankunft", + "anlage", + "anleiten", + "anliegen", + "anmelden", + "annehmen", + "annonce", + "anomalie", + "anpassen", + "anregung", + "anruf", + "ansatz", + "anschein", + "ansehen", + "ansicht", + "anspruch", + "anstalt", + "anteil", + "antik", + "antrag", + "antwort", + "anwalt", + "anwesen", + "anwohner", + "anzahl", + "anzeige", + "anzug", + "apfel", + "apotheke", + "apparat", + "appell", + "applaus", + "april", + "aquarell", + "arbeit", + "archiv", + "areal", + "arena", + "argument", + "armband", + "armut", + "aroma", + "arten", + "artikel", + "arzt", + "asche", + "aspekt", + "asphalt", + "atelier", + "atem", + "athlet", + "atlas", + "atom", + "attacke", + "auerhahn", + "aufbau", + "aufgabe", + "auflage", + "aufnahme", + "aufruf", + "aufstand", + "auftrag", + "aufwand", + "aufzug", + "auge", + "august", + "auktion", + "aula", + "ausbruch", + "ausdruck", + "ausflug", + "ausgang", + "auskunft", + "ausnahme", + "aussicht", + "auswahl", + "auszug", + "autark", + "auto", + "avocado", + "baby", + "bach", + "backen", + "baden", + "bagger", + "bahn", + "baldrian", + "balkon", + "ball", + "balsam", + "bambus", + "banane", + "band", + "bank", + "bargeld", + "barsch", + "bart", + "basis", + "bass", + "basteln", + "batterie", + "bauch", + "bauer", + "bauland", + "baum", + "bauplan", + "bausatz", + "baut", + "bauwagen", + "bauzaun", + "beachten", + "beamte", + "bebauung", + "beben", + "becher", + "becken", + "bedarf", + "bedenken", + "bedienen", + "bedroht", + "beenden", + "beere", + "befahren", + "befehl", + "befinden", + "befragen", + "befund", + "begabt", + "begeben", + "beginn", + "begonnen", + "begriff", + "behalten", + "beide", + "beifall", + "beige", + "beihilfe", + "beil", + "bein", + "beirat", + "beispiel", + "beitrag", + "bekannt", + "bekennen", + "beklagen", + "bekommen", + "belasten", + "belegen", + "beliebt", + "belohnen", + "bemerkt", + "benannt", + "benutzen", + "benzin", + "bequem", + "beraten", + "bereich", + "berg", + "bericht", + "beruf", + "bescheid", + "besen", + "besitz", + "besorgen", + "besser", + "bestand", + "besuch", + "beton", + "betrieb", + "bett", + "beule", + "beute", + "bewahren", + "bewegen", + "bewirken", + "bewohner", + "bezahlen", + "bezirk", + "bezog", + "bezug", + "biber", + "bieder", + "biene", + "bier", + "biest", + "bieten", + "bilanz", + "bild", + "billig", + "binden", + "binnen", + "biologie", + "biotonne", + "birgt", + "birke", + "birne", + "bitter", + "blasen", + "blatt", + "blau", + "blech", + "blick", + "blind", + "blitz", + "block", + "blume", + "blut", + "boden", + "bogen", + "bohne", + "bohren", + "boje", + "bolzen", + "bombe", + "bonus", + "boot", + "bord", + "botanik", + "bote", + "boxen", + "boxring", + "boykott", + "brachten", + "brand", + "braten", + "braun", + "brav", + "brechen", + "brei", + "bremsen", + "brennen", + "brett", + "brief", + "brille", + "bringen", + "brisant", + "brokkoli", + "bronze", + "brosche", + "brot", + "bruch", + "bruder", + "brunnen", + "brust", + "bube", + "buch", + "bude", + "budget", + "bunker", + "bunt", + "burg", + "busch", + "busfahrt", + "bussard", + "butter", + "campen", + "caravan", + "chance", + "chaos", + "charme", + "chat", + "chemie", + "chillen", + "chlor", + "chor", + "chrom", + "clever", + "clown", + "code", + "computer", + "couch", + "creme", + "dach", + "damals", + "dame", + "damm", + "dampf", + "danken", + "darm", + "datei", + "dattel", + "datum", + "dauer", + "daumen", + "deal", + "debatte", + "decke", + "defekt", + "defizit", + "dehnen", + "deich", + "delfin", + "delle", + "denkmal", + "depot", + "design", + "dessert", + "detail", + "detektiv", + "deuten", + "devise", + "dezember", + "diagnose", + "dialog", + "dichter", + "dick", + "dieb", + "dienstag", + "diesel", + "digital", + "diktat", + "dilemma", + "dill", + "ding", + "diplomat", + "direktor", + "dirigent", + "diskette", + "distel", + "diverse", + "docht", + "doktor", + "dokument", + "dolch", + "domizil", + "donner", + "doppelt", + "dorf", + "dorn", + "dose", + "dozent", + "drache", + "draht", + "drama", + "dreck", + "drehbuch", + "drei", + "dringend", + "drohne", + "drossel", + "drucker", + "ducken", + "duell", + "duft", + "dunkel", + "dunst", + "durst", + "dusche", + "dynamik", + "ebbe", + "ebene", + "echo", + "echse", + "echt", + "ecke", + "efeu", + "effekt", + "egal", + "ehefrau", + "ehemann", + "ehepaar", + "ehre", + "ehrgeiz", + "ehrlich", + "eichel", + "eidechse", + "eier", + "eigentum", + "eile", + "eimer", + "einblick", + "eindruck", + "einfach", + "eingang", + "einheit", + "einigung", + "einkauf", + "einladen", + "einmal", + "einnahme", + "einrad", + "eins", + "eintritt", + "einzeln", + "eisberg", + "eisdecke", + "eisen", + "eistee", + "eisvogel", + "eiszeit", + "elch", + "elefant", + "elegant", + "element", + "elend", + "elite", + "elle", + "elster", + "eltern", + "empfang", + "ende", + "endlich", + "energie", + "engel", + "engpass", + "enkel", + "enorm", + "ensemble", + "ente", + "entgegen", + "entlang", + "entwurf", + "entzogen", + "epoche", + "erbe", + "erbracht", + "erbse", + "erdbeere", + "erde", + "erdgas", + "erdnuss", + "ereignis", + "erfassen", + "erfinden", + "erfolg", + "erfreuen", + "ergebnis", + "erhalten", + "erheben", + "erholung", + "erinnern", + "erkennen", + "erlauben", + "erlebnis", + "erlitten", + "erneut", + "ernst", + "ernte", + "erobern", + "erproben", + "erregen", + "ersatz", + "ersetzen", + "ersparen", + "erteilen", + "ertrag", + "erwarten", + "erwerben", + "erwiesen", + "erworben", + "erzeugen", + "erzielen", + "esel", + "essen", + "essig", + "esstisch", + "etage", + "etappe", + "etat", + "ethik", + "etikett", + "etliche", + "eule", + "euphorie", + "event", + "ewig", + "exakt", + "examen", + "exil", + "existenz", + "exkurs", + "experte", + "export", + "express", + "extern", + "extrem", + "fabel", + "fabrik", + "fach", + "fackel", + "faden", + "fahne", + "fahrrad", + "faktor", + "falke", + "fallen", + "falsch", + "falter", + "familie", + "fangen", + "fans", + "fantasie", + "farbe", + "farn", + "fasching", + "fass", + "faultier", + "fauna", + "faust", + "favorit", + "faxen", + "fazit", + "februar", + "fechten", + "feder", + "fegen", + "fehler", + "feier", + "feile", + "fein", + "feld", + "fell", + "fels", + "fenchel", + "fenster", + "ferien", + "fern", + "ferse", + "fertig", + "fest", + "fett", + "feucht", + "feuer", + "fichte", + "fieber", + "figur", + "fiktion", + "filiale", + "film", + "filter", + "filz", + "finale", + "finden", + "finger", + "fink", + "finster", + "firma", + "fisch", + "flach", + "flagge", + "flamme", + "flasche", + "fleck", + "fleisch", + "flexibel", + "fliege", + "flink", + "flocke", + "floh", + "flora", + "flucht", + "flugzeug", + "flur", + "fluss", + "flut", + "fokus", + "folge", + "folie", + "fordern", + "forelle", + "formel", + "forst", + "foto", + "foyer", + "fracht", + "frage", + "fraktion", + "frau", + "frech", + "freizeit", + "fremd", + "frequenz", + "freund", + "frieden", + "friseur", + "froh", + "front", + "frosch", + "frucht", + "frust", + "fuchs", + "fund", + "funktion", + "furcht", + "fusion", + "futter", + "gabel", + "galaxie", + "galerie", + "gang", + "ganove", + "gans", + "ganz", + "garage", + "gardine", + "garn", + "garten", + "gasse", + "gast", + "gattung", + "gauner", + "gazelle", + "geben", + "gebiet", + "geboren", + "gebracht", + "geburt", + "gecko", + "gedanke", + "gedicht", + "geduld", + "gefahr", + "gefieder", + "geflecht", + "gegend", + "gegner", + "gehen", + "gehirn", + "geier", + "geige", + "geist", + "geiz", + "gelassen", + "gelb", + "geld", + "gelee", + "gelten", + "gelungen", + "gemacht", + "gemein", + "genau", + "generell", + "genie", + "genug", + "gepard", + "gerade", + "gerecht", + "gericht", + "gern", + "gerste", + "geruch", + "gesamt", + "geschenk", + "gesetz", + "gesicht", + "gespenst", + "gestalt", + "gesund", + "getan", + "getreide", + "gewalt", + "gewerbe", + "gewitter", + "gewonnen", + "giebel", + "gier", + "gift", + "gigant", + "gipfel", + "gips", + "giraffe", + "girlande", + "gitarre", + "gitter", + "glanz", + "glas", + "glatt", + "glaube", + "gleis", + "glitzer", + "globus", + "glocke", + "glut", + "gnade", + "gold", + "golf", + "gondel", + "gorilla", + "grab", + "grad", + "grafik", + "gramm", + "granit", + "gras", + "gratis", + "grau", + "gravur", + "greifen", + "gremium", + "grenze", + "griff", + "grill", + "grinsen", + "groll", + "grotte", + "grube", + "gruft", + "grund", + "gruppe", + "gruselig", + "gulasch", + "gully", + "gummi", + "gunst", + "gurke", + "gurt", + "guthaben", + "haar", + "habgier", + "habicht", + "hacken", + "hafen", + "haft", + "hagel", + "hahn", + "haken", + "halb", + "halde", + "halle", + "halm", + "hals", + "halten", + "hammer", + "hamster", + "hand", + "hanger", + "hantel", + "harfe", + "harke", + "harmonie", + "hart", + "hase", + "haube", + "hauch", + "haufen", + "haus", + "haut", + "hebamme", + "hebel", + "hecht", + "hecke", + "hefe", + "heft", + "heilen", + "heim", + "heiraten", + "heizung", + "hektar", + "held", + "helfen", + "hell", + "helm", + "hemd", + "henkel", + "herbst", + "herd", + "hering", + "herkunft", + "herr", + "herz", + "heute", + "hilfe", + "himbeere", + "himmel", + "hinblick", + "hinsicht", + "hinten", + "hinweis", + "hirse", + "hirte", + "hitze", + "hobel", + "hoch", + "hoffen", + "hohl", + "holen", + "holunder", + "holz", + "honig", + "honorar", + "hopfen", + "horizont", + "horn", + "hose", + "hotel", + "hufeisen", + "huhn", + "hummer", + "humor", + "hund", + "hunger", + "hupe", + "husten", + "hydrant", + "hygiene", + "ideal", + "idee", + "idol", + "idyll", + "igel", + "illegal", + "illusion", + "imbiss", + "imker", + "immun", + "impfen", + "import", + "impuls", + "index", + "indiz", + "infolge", + "ingwer", + "inhalt", + "innen", + "insasse", + "insel", + "institut", + "internet", + "investor", + "irgendwo", + "ironie", + "irrtum", + "isoliert", + "jacht", + "jacke", + "jagd", + "jagen", + "jaguar", + "jahr", + "januar", + "jargon", + "jazz", + "jemand", + "joggen", + "joghurt", + "jubel", + "jugend", + "juli", + "jung", + "juni", + "jurist", + "jury", + "justiz", + "juwel", + "kabarett", + "kabel", + "kabine", + "kaffee", + "kahl", + "kajak", + "kakao", + "kaktus", + "kalender", + "kalt", + "kamera", + "kamin", + "kamm", + "kampf", + "kanal", + "kandidat", + "kanister", + "kanne", + "kante", + "kanu", + "kapelle", + "kapitel", + "kapsel", + "kaputt", + "karneval", + "karotte", + "karriere", + "karte", + "kasse", + "kasten", + "katalog", + "katze", + "kaufhaus", + "kauz", + "kegel", + "kehren", + "keks", + "kelch", + "keller", + "kennen", + "keramik", + "kern", + "kerze", + "kessel", + "ketchup", + "kette", + "keule", + "kiefer", + "kiesel", + "kilo", + "kind", + "kino", + "kiosk", + "kirsche", + "kissen", + "kiste", + "kittel", + "kiwi", + "klage", + "klammer", + "klang", + "klappe", + "klar", + "klasse", + "klavier", + "kleben", + "klee", + "kleid", + "klettern", + "klientel", + "klima", + "klinik", + "klippe", + "klon", + "klopfen", + "klotz", + "klug", + "knapp", + "kneipe", + "knie", + "knochen", + "knopf", + "knoten", + "koala", + "kochen", + "koffer", + "kohle", + "koje", + "kolibri", + "kollege", + "komisch", + "kommen", + "komplett", + "konflikt", + "konkurs", + "konsum", + "kontakt", + "konzert", + "kopf", + "kopie", + "korb", + "korn", + "korrekt", + "kosten", + "krabbe", + "kraft", + "kralle", + "kran", + "kraut", + "krawatte", + "krebs", + "kredit", + "kreis", + "kresse", + "kreuz", + "kriegen", + "krippe", + "krise", + "kritik", + "krokodil", + "krone", + "krug", + "krumm", + "kruste", + "kuchen", + "kugel", + "kuhstall", + "kulisse", + "kultur", + "kunde", + "kunst", + "kupfer", + "kurier", + "kurs", + "kurve", + "kurz", + "kuss", + "kutsche", + "label", + "labor", + "lachen", + "lack", + "laden", + "ladung", + "lager", + "laie", + "lama", + "lamm", + "lampe", + "land", + "lang", + "lappen", + "larve", + "lassen", + "last", + "laterne", + "latte", + "laub", + "lauch", + "laufen", + "laune", + "laut", + "lavendel", + "lawine", + "leben", + "lecker", + "leder", + "leer", + "legen", + "lehm", + "lehnen", + "lehrer", + "leib", + "leicht", + "leid", + "leim", + "leinwand", + "leiste", + "leiter", + "lektor", + "lemming", + "lenken", + "leopard", + "lernen", + "lesen", + "lesung", + "leuchte", + "leute", + "lexikon", + "libelle", + "licht", + "liebe", + "lied", + "liefern", + "liegen", + "lila", + "lilie", + "limette", + "linde", + "lineal", + "linie", + "links", + "lippe", + "liste", + "liter", + "lizenz", + "loch", + "locke", + "logistik", + "lohn", + "lokal", + "lotse", + "loyal", + "luchs", + "luft", + "lunge", + "lupe", + "lustig", + "luxus", + "lyrik", + "machen", + "made", + "magazin", + "magen", + "magie", + "magnet", + "mahnen", + "mais", + "malen", + "mama", + "mango", + "mann", + "mantel", + "marder", + "markt", + "marmor", + "marsch", + "maschine", + "maske", + "masse", + "mast", + "material", + "matrose", + "matte", + "mauer", + "maulwurf", + "maus", + "maximal", + "medaille", + "medizin", + "meer", + "mehl", + "mehrweg", + "meinung", + "meister", + "melden", + "melken", + "melone", + "membran", + "menge", + "mensch", + "mentor", + "merkmal", + "messer", + "metall", + "meter", + "methode", + "miene", + "mieten", + "milan", + "milch", + "milde", + "milieu", + "mimik", + "mineral", + "minigolf", + "minute", + "minze", + "mischung", + "mitglied", + "mitleid", + "mittag", + "mode", + "molch", + "moment", + "monat", + "mond", + "monitor", + "monster", + "montag", + "moos", + "moped", + "moral", + "morgen", + "motiv", + "motor", + "motte", + "mulde", + "mund", + "muschel", + "museum", + "musik", + "muskel", + "muster", + "mutig", + "mutter", + "mythos", + "nacht", + "nacken", + "nadel", + "nagel", + "nahrung", + "name", + "napf", + "narbe", + "narr", + "narzisse", + "nase", + "nashorn", + "nass", + "natter", + "natur", + "nebel", + "negativ", + "nehmen", + "neid", + "neigung", + "nektar", + "nennen", + "nerven", + "nest", + "nett", + "netz", + "neubau", + "neugier", + "neuland", + "neun", + "niedrig", + "niemand", + "nilpferd", + "niveau", + "nobel", + "nochmal", + "norden", + "normal", + "note", + "notfall", + "notiz", + "november", + "nudel", + "null", + "nummer", + "nuss", + "nutzen", + "oase", + "oben", + "objekt", + "obst", + "ofen", + "offen", + "ohne", + "ohren", + "ohrring", + "oktober", + "olive", + "olympia", + "omelett", + "onkel", + "online", + "oper", + "option", + "orange", + "ordnung", + "organ", + "orgel", + "original", + "orkan", + "ortsrand", + "ostern", + "otter", + "oval", + "paar", + "packen", + "paket", + "palast", + "palette", + "palme", + "panda", + "panik", + "papagei", + "papier", + "pappe", + "paprika", + "parade", + "park", + "parole", + "party", + "passage", + "patent", + "pathos", + "patient", + "pause", + "pavian", + "pech", + "pedal", + "pegel", + "peinlich", + "peitsche", + "pelikan", + "pelz", + "pendel", + "perfekt", + "periode", + "perle", + "person", + "pfad", + "pfahl", + "pfanne", + "pfau", + "pfeffer", + "pfeil", + "pferd", + "pfiff", + "pfirsich", + "pflaume", + "pflegen", + "pflicht", + "pflug", + "pforte", + "pfosten", + "pfote", + "phase", + "physik", + "picknick", + "pier", + "pigment", + "pille", + "pilot", + "pilz", + "pinguin", + "pink", + "pinnwand", + "pinsel", + "pinzette", + "pirat", + "piste", + "pixel", + "plakat", + "planet", + "plastik", + "platz", + "pleite", + "plus", + "podest", + "podium", + "poesie", + "pokal", + "politik", + "pollen", + "polster", + "pommes", + "pony", + "pool", + "portrait", + "positiv", + "post", + "pracht", + "praxis", + "preis", + "presse", + "prinzip", + "privat", + "probe", + "produkt", + "profil", + "programm", + "projekt", + "prospekt", + "protest", + "provinz", + "prozent", + "psyche", + "publikum", + "pudding", + "puder", + "puls", + "pulver", + "puma", + "pumpe", + "punkt", + "punsch", + "puppe", + "pute", + "putzen", + "puzzel", + "pyjama", + "pyramide", + "quadrat", + "qualle", + "quark", + "quatsch", + "quelle", + "quer", + "quittung", + "quiz", + "quote", + "rabatt", + "rabe", + "rache", + "radar", + "radio", + "radtour", + "radweg", + "rahmen", + "rakete", + "rampe", + "rand", + "rang", + "ranke", + "raps", + "rasen", + "rassel", + "rast", + "rasur", + "raten", + "ratgeber", + "rathaus", + "ratte", + "rauch", + "raum", + "raupe", + "raus", + "raute", + "razzia", + "reaktion", + "real", + "rebell", + "rechnen", + "reden", + "redner", + "referent", + "reform", + "regal", + "regen", + "region", + "rehkitz", + "reibe", + "reich", + "reifen", + "reihe", + "reim", + "rein", + "reise", + "reiten", + "reiz", + "rekord", + "rektor", + "relativ", + "rennen", + "rentier", + "reporter", + "reptil", + "reserve", + "residenz", + "resonanz", + "respekt", + "rest", + "resultat", + "retten", + "revier", + "rezept", + "rhythmus", + "richtig", + "riechen", + "riegel", + "riesig", + "rind", + "ring", + "rinnsaal", + "risiko", + "riss", + "ritter", + "ritual", + "ritze", + "robbe", + "roboter", + "rock", + "roggen", + "rohbau", + "rohkost", + "rohr", + "rohstoff", + "roller", + "roman", + "rosa", + "rose", + "rosine", + "rost", + "rotkohl", + "rotor", + "rucksack", + "rudel", + "rufen", + "ruhe", + "ruhig", + "ruhm", + "ruine", + "rummel", + "rund", + "runter", + "rute", + "rutsche", + "saal", + "saat", + "sache", + "sack", + "safran", + "saft", + "sagen", + "sahne", + "saison", + "salat", + "salbe", + "saloon", + "salz", + "samen", + "sammeln", + "samstag", + "samt", + "sand", + "sanft", + "saniert", + "sardine", + "satellit", + "satire", + "sattel", + "satz", + "sauber", + "sauer", + "saugen", + "sauna", + "saurier", + "schaf", + "schere", + "schirm", + "schlange", + "schmuck", + "schnee", + "schock", + "schrank", + "schuh", + "schwan", + "sechs", + "seefahrt", + "seehund", + "seekuh", + "seele", + "seestern", + "segel", + "segment", + "sehen", + "seide", + "seife", + "seil", + "seite", + "sektor", + "sekunde", + "sellerie", + "selten", + "semester", + "seminar", + "senden", + "senf", + "senior", + "senken", + "sense", + "serie", + "serum", + "server", + "sessel", + "setzen", + "shop", + "sichel", + "sieb", + "siedlung", + "sieg", + "signal", + "silber", + "simpel", + "singen", + "sinken", + "sinn", + "sirene", + "sirup", + "sitzen", + "skala", + "skandal", + "skelett", + "skizze", + "skript", + "skulptur", + "socke", + "sofa", + "sohle", + "sohn", + "soja", + "solide", + "sollen", + "sommer", + "sonne", + "sorge", + "sorte", + "sozial", + "spachtel", + "spagat", + "spalten", + "spange", + "spargel", + "spaten", + "specht", + "speise", + "spektrum", + "spende", + "sperling", + "speziell", + "spiegel", + "spinne", + "spion", + "spitze", + "sponsor", + "sport", + "sprache", + "sprechen", + "springen", + "sprotte", + "sprung", + "spur", + "stabil", + "stachel", + "stadt", + "stahl", + "stall", + "stamm", + "standort", + "stapel", + "stark", + "station", + "staub", + "stecken", + "steg", + "stehen", + "stein", + "stellen", + "stempel", + "steppe", + "stern", + "stetig", + "steuer", + "stichtag", + "stier", + "stift", + "still", + "stimme", + "stirn", + "stock", + "stoff", + "stolz", + "stoppen", + "storch", + "strand", + "strecke", + "strich", + "strom", + "strumpf", + "stube", + "stuck", + "studium", + "stufe", + "stuhl", + "stumm", + "stunde", + "sturm", + "substanz", + "suche", + "summe", + "sumpf", + "suppe", + "surfen", + "symbol", + "symptome", + "system", + "szenario", + "tabelle", + "tabu", + "tacker", + "tadel", + "tafel", + "tagebuch", + "takt", + "talent", + "talfahrt", + "tango", + "tank", + "tanne", + "tante", + "tanz", + "tapfer", + "tapir", + "tarif", + "tarnen", + "tasche", + "tasse", + "tastatur", + "tatort", + "tatsache", + "taube", + "tauchen", + "tausch", + "taxi", + "team", + "technik", + "teekanne", + "teer", + "teesieb", + "teich", + "teig", + "teilen", + "telefon", + "teller", + "tempo", + "tendenz", + "tennis", + "tenor", + "teppich", + "termin", + "terrasse", + "test", + "teuer", + "text", + "theater", + "thema", + "theorie", + "therapie", + "these", + "tief", + "tier", + "tiger", + "tinte", + "tipp", + "tisch", + "titel", + "tochter", + "toilette", + "toleranz", + "toll", + "tomate", + "tonband", + "tonne", + "topf", + "torbogen", + "torte", + "torwart", + "total", + "tracht", + "tragen", + "training", + "trapez", + "trasse", + "traum", + "treffen", + "treiben", + "trennen", + "treppe", + "tresor", + "treten", + "treu", + "triangel", + "trick", + "trinken", + "trocken", + "trommel", + "tropfen", + "trost", + "trubel", + "truhe", + "trumpf", + "trunk", + "truthahn", + "tuch", + "tukan", + "tulpe", + "tunnel", + "turbine", + "turm", + "turnen", + "tusche", + "typisch", + "ufer", + "uhrwerk", + "umbau", + "umbruch", + "umfang", + "umfeld", + "umfrage", + "umgang", + "umgebung", + "umhang", + "umkreis", + "umland", + "umriss", + "umsatz", + "umschlag", + "umsetzen", + "umsonst", + "umstand", + "umwelt", + "umzug", + "unfall", + "unikat", + "unmut", + "unrat", + "unrecht", + "unruhe", + "unschuld", + "unsinn", + "unten", + "unweit", + "urkunde", + "urlaub", + "ursache", + "ursprung", + "urteil", + "utopie", + "vage", + "vakuum", + "vanille", + "variante", + "vase", + "vater", + "ventil", + "veranda", + "verband", + "verdacht", + "verein", + "verfall", + "verkehr", + "verloren", + "vernunft", + "verrat", + "verstand", + "vertrag", + "verwandt", + "verzicht", + "video", + "vieh", + "viel", + "vier", + "villa", + "virus", + "vision", + "vitamine", + "vitrine", + "vogel", + "voliere", + "voll", + "volumen", + "vorbild", + "vorfall", + "vorgabe", + "vorhang", + "vorlage", + "vorn", + "vorort", + "vorrat", + "vorsicht", + "vortrag", + "vorwurf", + "votum", + "vulkan", + "waage", + "wachs", + "wade", + "waffel", + "wagen", + "waggon", + "wahl", + "wahrheit", + "wald", + "walnuss", + "walross", + "walze", + "wand", + "wanne", + "wanze", + "wappen", + "ware", + "warm", + "warnung", + "warten", + "warze", + "waschen", + "wasser", + "webstuhl", + "wechsel", + "wecker", + "wedel", + "weggabel", + "wehren", + "weich", + "weide", + "wein", + "weisheit", + "weit", + "weizen", + "welken", + "welle", + "welpe", + "welt", + "wende", + "wenig", + "werbung", + "werfen", + "werkzeug", + "wert", + "wesen", + "wespe", + "weste", + "wetter", + "wichtig", + "widder", + "wiegen", + "wiese", + "wild", + "wille", + "wimper", + "wind", + "winkel", + "winter", + "winzig", + "wippe", + "wirbel", + "wirkung", + "wirt", + "wischen", + "wisent", + "wissen", + "witz", + "woche", + "wohl", + "wohnen", + "wolf", + "wolke", + "wolle", + "wort", + "wunder", + "wunsch", + "wurm", + "wurzel", + "zacke", + "zahl", + "zahm", + "zahn", + "zander", + "zange", + "zapfen", + "zart", + "zauber", + "zaun", + "zebra", + "zeche", + "zecke", + "zehe", + "zehn", + "zeichen", + "zeigen", + "zeile", + "zeit", + "zelle", + "zelt", + "zement", + "zensur", + "zentrum", + "zettel", + "zeug", + "ziege", + "ziehen", + "ziel", + "ziffer", + "zimmer", + "zimt", + "zins", + "zipfel", + "zirkus", + "zitat", + "zitrone", + "zocken", + "zollfrei", + "zone", + "zorn", + "zucchini", + "zucker", + "zufall", + "zuflucht", + "zugang", + "zugriff", + "zukunft", + "zunge", + "zusatz", + "zuschlag", + "zustand", + "zutat", + "zwang", + "zweck", + "zwei", + "zwiebel", + "zwilling", + "zwingen", + "zwirn", + "zyklus", +]; diff --git a/src/language/mod.rs b/src/language/mod.rs index 99da0de..3464a20 100644 --- a/src/language/mod.rs +++ b/src/language/mod.rs @@ -9,6 +9,8 @@ mod czech; mod english; #[cfg(feature = "french")] mod french; +#[cfg(feature = "german")] +mod german; #[cfg(feature = "italian")] mod italian; #[cfg(feature = "japanese")] @@ -21,7 +23,7 @@ mod portuguese; mod spanish; /// The maximum number of languages enabled. -pub(crate) const MAX_NB_LANGUAGES: usize = 10; +pub(crate) const MAX_NB_LANGUAGES: usize = 11; /// Language to be used for the mnemonic phrase. /// @@ -43,6 +45,9 @@ pub enum Language { #[cfg(feature = "french")] /// The French language. French, + #[cfg(feature = "german")] + /// The German language. + German, #[cfg(feature = "italian")] /// The Italian language. Italian, @@ -79,6 +84,8 @@ impl Language { Language::Czech, #[cfg(feature = "french")] Language::French, + #[cfg(feature = "german")] + Language::German, #[cfg(feature = "italian")] Language::Italian, #[cfg(feature = "japanese")] @@ -111,6 +118,8 @@ impl Language { Language::Czech => &czech::WORDS, #[cfg(feature = "french")] Language::French => &french::WORDS, + #[cfg(feature = "german")] + Language::German => &german::WORDS, #[cfg(feature = "italian")] Language::Italian => &italian::WORDS, #[cfg(feature = "japanese")] @@ -138,6 +147,8 @@ impl Language { Language::Czech => true, #[cfg(feature = "french")] Language::French => false, + #[cfg(feature = "german")] + Language::German => true, #[cfg(feature = "italian")] Language::Italian => true, #[cfg(feature = "japanese")] @@ -189,6 +200,7 @@ impl Language { feature = "french", feature = "japanese", feature = "spanish", + feature = "german", ))] _ => self.word_list().iter().position(|w| *w == word).map(|i| i as u16), } @@ -210,6 +222,7 @@ mod tests { feature = "chinese-traditional", feature = "czech", feature = "french", + feature = "german", feature = "italian", feature = "japanese", feature = "korean", @@ -226,6 +239,7 @@ mod tests { //! 7e80e161c3e93d9554c2efb78d4e3cebf8fc727e9c52e03b83b94406bdcc95fc czech.txt //! 2f5eed53a4727b4bf8880d8f3f199efc90e58503646d9ff8eff3a2ed3b24dbda english.txt //! ebc3959ab7801a1df6bac4fa7d970652f1df76b683cd2f4003c941c63d517e59 french.txt + //! 7965dc8c6b413ccb635d3021043365e18df0367bf5413a50a069a98addfe4e1d german.txt (https://github.com/dys2p/wordlists-de/blob/main/de-2048-v1.txt) //! d392c49fdb700a24cd1fceb237c1f65dcc128f6b34a8aacb58b59384b5c648c2 italian.txt //! 2eed0aef492291e061633d7ad8117f1a2b03eb80a29d0e4e3117ac2528d05ffd japanese.txt //! 9e95f86c167de88f450f0aaf89e87f6624a57f973c67b516e338e8e8b8897f60 korean.txt @@ -246,6 +260,7 @@ mod tests { ("7e80e161c3e93d9554c2efb78d4e3cebf8fc727e9c52e03b83b94406bdcc95fc", Language::Czech), ("2f5eed53a4727b4bf8880d8f3f199efc90e58503646d9ff8eff3a2ed3b24dbda", Language::English), ("ebc3959ab7801a1df6bac4fa7d970652f1df76b683cd2f4003c941c63d517e59", Language::French), + ("7965dc8c6b413ccb635d3021043365e18df0367bf5413a50a069a98addfe4e1d", Language::German), ("d392c49fdb700a24cd1fceb237c1f65dcc128f6b34a8aacb58b59384b5c648c2", Language::Italian), ( "2eed0aef492291e061633d7ad8117f1a2b03eb80a29d0e4e3117ac2528d05ffd", @@ -297,6 +312,7 @@ mod tests { feature = "chinese-traditional", feature = "czech", feature = "french", + feature = "german", feature = "italian", feature = "japanese", feature = "korean", @@ -397,6 +413,15 @@ mod tests { } } + #[cfg(feature = "german")] + #[test] + fn german() { + for i in 0..0x800 { + let word_str = Language::German.word_list()[i]; + assert_eq!(Language::German.find_word(word_str), Some(i as _)); + } + } + #[cfg(feature = "italian")] #[test] fn italian() { From 9068a2eb531847d8d99d0fd5894b803f6a9bd2a8 Mon Sep 17 00:00:00 2001 From: legounix Date: Thu, 6 Nov 2025 12:33:10 +0100 Subject: [PATCH 2/3] don't test german language for word overlaps --- src/language/mod.rs | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/language/mod.rs b/src/language/mod.rs index 3464a20..86ab3e9 100644 --- a/src/language/mod.rs +++ b/src/language/mod.rs @@ -144,13 +144,13 @@ impl Language { #[cfg(feature = "chinese-traditional")] Language::TraditionalChinese => false, #[cfg(feature = "czech")] - Language::Czech => true, + Language::Czech => false, #[cfg(feature = "french")] Language::French => false, #[cfg(feature = "german")] - Language::German => true, + Language::German => false, #[cfg(feature = "italian")] - Language::Italian => true, + Language::Italian => false, #[cfg(feature = "japanese")] Language::Japanese => true, #[cfg(feature = "korean")] @@ -328,6 +328,11 @@ mod tests { // if either of those is guaranteed to have unique words. let mut words: HashMap<&str, Vec> = HashMap::new(); for lang in Language::ALL.iter() { + // Skip adding german as german is not officially specified + // in BIP39 and causes more word overlaps + if lang == &Language::German { + continue; + } for word in lang.word_list().iter() { words.entry(word).or_insert(Vec::new()).push(*lang); } From 0c5b3bdd36c15fb08aed17c04969f9ff246de86c Mon Sep 17 00:00:00 2001 From: legounix Date: Thu, 6 Nov 2025 12:46:09 +0100 Subject: [PATCH 3/3] Clarify that german language is not part of the BIP39 standard --- src/language/mod.rs | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/language/mod.rs b/src/language/mod.rs index 86ab3e9..7448fce 100644 --- a/src/language/mod.rs +++ b/src/language/mod.rs @@ -47,6 +47,10 @@ pub enum Language { French, #[cfg(feature = "german")] /// The German language. + /// The german wordlist is based on https://github.com/dys2p/wordlists-de/blob/main/de-2048-v1.txt + /// WARNING: German is not part of the BIP39 standard. + /// If you enable support for german, this will cause + /// word overlaps with other languages. German, #[cfg(feature = "italian")] /// The Italian language.