Skip to content

Commit 86f475c

Browse files
nextlevelshitMichael Czechowski
authored andcommitted
feat(i18n): full DE coverage — translate remaining 10 modules (#203)
Co-authored-by: Michael Czechowski <mail@dailysh.it> Co-committed-by: Michael Czechowski <mail@dailysh.it>
1 parent 70ffa2d commit 86f475c

11 files changed

Lines changed: 1005 additions & 29 deletions

lessons/de/03-colors.json

Lines changed: 105 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,105 @@
1+
{
2+
"$schema": "../schemas/code-crispies-module-schema.json",
3+
"id": "colors-backgrounds",
4+
"title": "CSS Farben",
5+
"description": "Lerne, wie man Farben auf Text und Hintergründe mit CSS-Eigenschaften anwendet.",
6+
"difficulty": "beginner",
7+
"lessons": [
8+
{
9+
"id": "colors-1",
10+
"title": "Hintergrundfarbe",
11+
"description": "Color is one of the most powerful tools in web design. It creates visual hierarchy, conveys meaning, and establishes brand identity. CSS provides multiple ways to specify colors.<br><br><strong>CSS named colors:</strong> CSS includes 147 named colors like <kbd>steelblue</kbd>, <kbd>coral</kbd>, <kbd>gold</kbd>, and <kbd>tomato</kbd>. These are easy to remember and read.<br><br><strong>The background-color property:</strong> Sets the fill color behind an element's content and padding areas.<br><br><pre>.card {\n background-color: lightblue;\n}</pre>",
12+
"task": "Diese Benachrichtigungskarte sieht kahl aus. Gib ihr eine warme, sanfte Hintergrundfarbe.",
13+
"previewHTML": "<div class=\"alert\"><strong>New message</strong><p>You have 3 unread notifications</p></div>",
14+
"previewBaseCSS": "body { font-family: system-ui, sans-serif; padding: 1rem; } .alert { padding: 1rem; border-left: 4px solid coral; border-radius: 4px; } .alert strong { display: block; margin-bottom: 4px; } .alert p { margin: 0; color: #666; font-size: 0.9rem; }",
15+
"sandboxCSS": "",
16+
"codePrefix": ".alert {\n ",
17+
"initialCode": "",
18+
"codeSuffix": "\n}",
19+
"solution": "background-color: seashell;",
20+
"previewContainer": "preview-area",
21+
"validations": [
22+
{
23+
"type": "regex",
24+
"value": "background-color:\\s*(seashell|linen|mistyrose|lavenderblush|cornsilk|oldlace|papayawhip|antiquewhite|bisque|peachpuff)",
25+
"message": "Welche Eigenschaft füllt den Bereich hinter dem Inhalt? Probiere eine warme, weiche Farbe",
26+
"options": {
27+
"caseSensitive": false
28+
}
29+
}
30+
]
31+
},
32+
{
33+
"id": "colors-2",
34+
"title": "Textfarbe",
35+
"description": "The <kbd>color</kbd> property sets the color of text content. Good contrast between text and background is essential for readability and accessibility.",
36+
"task": "Der Alarm-Titel verschwimmt mit dem Fließtext. Lass ihn mit einer warmen Akzentfarbe hervorstechen.",
37+
"previewHTML": "<div class=\"alert\"><strong class=\"title\">Warning</strong><p>Your session will expire in 5 minutes</p></div>",
38+
"previewBaseCSS": "body { font-family: system-ui, sans-serif; padding: 1rem; } .alert { padding: 1rem; background-color: seashell; border-left: 4px solid coral; border-radius: 4px; } .alert .title { display: block; margin-bottom: 4px; } .alert p { margin: 0; color: #666; font-size: 0.9rem; }",
39+
"sandboxCSS": "",
40+
"codePrefix": ".title {\n ",
41+
"initialCode": "",
42+
"codeSuffix": "\n}",
43+
"solution": "color: coral;",
44+
"previewContainer": "preview-area",
45+
"validations": [
46+
{
47+
"type": "regex",
48+
"value": "color:\\s*(coral|tomato|orangered|indianred|salmon|darksalmon)",
49+
"message": "Welche Eigenschaft ändert die Textfarbe? Probiere eine warme, lebendige Farbe",
50+
"options": {
51+
"caseSensitive": false
52+
}
53+
}
54+
]
55+
},
56+
{
57+
"id": "colors-3",
58+
"title": "Rahmenfarbe",
59+
"description": "Borders can have their own color using <kbd>border-color</kbd>. This is useful when you want to change just the color without redefining the entire border.",
60+
"task": "Der Rahmen ist langweilig grau. Gib ihm eine warme Akzentfarbe.",
61+
"previewHTML": "<article class=\"card\"><h3>Premium Plan</h3><p>Unlimited access to all features</p></article>",
62+
"previewBaseCSS": "body { font-family: system-ui, sans-serif; padding: 1rem; background: #f5f5f5; } .card { padding: 1rem; background: white; border: 4px solid #ddd; border-radius: 8px; } .card h3 { margin: 0 0 8px; } .card p { margin: 0; color: #666; }",
63+
"sandboxCSS": "",
64+
"codePrefix": ".card {\n ",
65+
"initialCode": "",
66+
"codeSuffix": "\n}",
67+
"solution": "border-color: coral;",
68+
"previewContainer": "preview-area",
69+
"validations": [
70+
{
71+
"type": "regex",
72+
"value": "border-color:\\s*(coral|tomato|orangered|indianred|salmon|darksalmon|crimson)",
73+
"message": "Welche Eigenschaft ändert nur die Rahmenfarbe? Probiere eine warme, lebendige Farbe",
74+
"options": {
75+
"caseSensitive": false
76+
}
77+
}
78+
]
79+
},
80+
{
81+
"id": "colors-4",
82+
"title": "Hex-Farben",
83+
"description": "Beyond named colors, CSS supports hex codes (<kbd>#ff6347</kbd>), RGB (<kbd>rgb(255, 99, 71)</kbd>), and HSL (<kbd>hsl(9, 100%, 64%)</kbd>). Hex codes are the most common format in professional projects.",
84+
"task": "Dieses Abzeichen braucht einen goldenen Hintergrund. Verwende einen Hex-Farbcode.",
85+
"previewHTML": "<span class=\"badge\">NEW</span>",
86+
"previewBaseCSS": "body { font-family: system-ui, sans-serif; padding: 1rem; } .badge { display: inline-block; padding: 4px 12px; border-radius: 999px; font-size: 0.75rem; font-weight: bold; text-transform: uppercase; color: #333; }",
87+
"sandboxCSS": "",
88+
"codePrefix": ".badge {\n ",
89+
"initialCode": "",
90+
"codeSuffix": "\n}",
91+
"solution": "background-color: #ffd700;",
92+
"previewContainer": "preview-area",
93+
"validations": [
94+
{
95+
"type": "regex",
96+
"value": "background-color:\\s*(#ffd700|#ffcc00|#ffc107|#f0c000|gold)",
97+
"message": "Verwende einen Hex-Code für background-color — etwas im Gold/Gelb-Bereich",
98+
"options": {
99+
"caseSensitive": false
100+
}
101+
}
102+
]
103+
}
104+
]
105+
}

lessons/de/04-typography.json

Lines changed: 171 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,171 @@
1+
{
2+
"$schema": "../schemas/code-crispies-module-schema.json",
3+
"id": "typography-fonts",
4+
"title": "Typografie",
5+
"description": "Lerne, das Erscheinungsbild von Text durch Schriftauswahl, Größe, Abstände und Effekte zu steuern.",
6+
"difficulty": "beginner",
7+
"lessons": [
8+
{
9+
"id": "monospace-font",
10+
"title": "Monospace-Schriften",
11+
"description": "Different font families create different visual impressions. <kbd>monospace</kbd> fonts have equal-width characters, making them perfect for displaying code, data, or keyboard shortcuts.<br><br>Every computer has a monospace font built in, so <kbd>font-family: monospace</kbd> always works. This makes it a safe choice for inline code in any web project.",
12+
"task": "Style den Inline-Code mit einer Monospace-Schrift. Füge <kbd>font-family: monospace</kbd> hinzu.",
13+
"previewHTML": "<article>\n <h3>Quick Tip</h3>\n <p>Press <span class=\"code\">Ctrl + S</span> to save your work, or <span class=\"code\">Ctrl + Z</span> to undo.</p>\n</article>",
14+
"previewBaseCSS": "body { font-family: system-ui; padding: 1rem; } h3 { margin: 0 0 0.5rem; } p { margin: 0; color: #555; line-height: 1.6; } .code { background: #f0f0f0; padding: 0.2rem 0.4rem; border-radius: 4px; }",
15+
"sandboxCSS": "",
16+
"codePrefix": ".code {\n ",
17+
"initialCode": "",
18+
"codeSuffix": "\n}",
19+
"previewContainer": "preview-area",
20+
"solution": "font-family: monospace;",
21+
"validations": [
22+
{
23+
"type": "property_value",
24+
"value": {
25+
"property": "font-family",
26+
"expected": "monospace"
27+
},
28+
"message": "Setze font-family auf <kbd>monospace</kbd>"
29+
}
30+
]
31+
},
32+
{
33+
"id": "font-size-line-height",
34+
"title": "Lesbarer Fließtext",
35+
"description": "Good typography is invisible—readers focus on content, not struggling to read it. Two properties work together for readability:<br><br><kbd>font-size</kbd> controls how big the text appears. For body text, <kbd>1rem</kbd> (16px by default) is a comfortable starting point.<br><br><kbd>line-height</kbd> sets the space between lines. A value of <kbd>1.6</kbd> means the line height is 1.6 times the font size—giving text room to breathe.",
36+
"task": "Mach den Text angenehm lesbar. Füge <kbd>font-size: 1rem</kbd> und <kbd>line-height: 1.6</kbd> hinzu.",
37+
"previewHTML": "<article>\n <h2>The Art of Coffee</h2>\n <p>Great coffee starts with quality beans. The roast level affects flavor—light roasts are fruity and acidic, while dark roasts are bold and smoky.</p>\n <p>Water temperature matters too. Brew between 90-96°C for optimal extraction. Too hot burns the coffee; too cold leaves it weak.</p>\n</article>",
38+
"previewBaseCSS": "body { font-family: system-ui; padding: 1rem; } h2 { margin: 0 0 1rem; color: #333; } p { margin: 0 0 1rem; color: #444; } p:last-child { margin-bottom: 0; }",
39+
"sandboxCSS": "",
40+
"codePrefix": "article {\n ",
41+
"initialCode": "",
42+
"codeSuffix": "\n}",
43+
"previewContainer": "preview-area",
44+
"solution": "font-size: 1rem;\n line-height: 1.6;",
45+
"validations": [
46+
{
47+
"type": "property_value",
48+
"value": {
49+
"property": "font-size",
50+
"expected": "1rem"
51+
},
52+
"message": "Setze font-size auf <kbd>1rem</kbd>"
53+
},
54+
{
55+
"type": "property_value",
56+
"value": {
57+
"property": "line-height",
58+
"expected": "1.6"
59+
},
60+
"message": "Setze line-height auf <kbd>1.6</kbd>"
61+
}
62+
]
63+
},
64+
{
65+
"id": "font-weight",
66+
"title": "Fette Überschriften",
67+
"description": "Font weight controls how thick or thin text appears. Common values include:<br><br>• <kbd>normal</kbd> (400) — default body text<br>• <kbd>bold</kbd> (700) — strong emphasis<br>• <kbd>lighter</kbd> / <kbd>bolder</kbd> — relative to parent<br><br>Card titles and headings often use bold text to create visual hierarchy and draw attention to key information.",
68+
"task": "Lass den Karten-Titel hervorstechen. Füge <kbd>font-weight: bold</kbd> hinzu.",
69+
"previewHTML": "<article class=\"card\">\n <span class=\"title\">Weekend Special</span>\n <p>Fresh pastries and artisan coffee, 20% off all items this Saturday and Sunday.</p>\n</article>",
70+
"previewBaseCSS": "body { font-family: system-ui; padding: 1rem; } .card { background: #f8f9fa; padding: 1.5rem; border-radius: 8px; max-width: 320px; } .title { display: block; font-size: 1.25rem; color: steelblue; margin-bottom: 0.5rem; font-weight: normal; } p { margin: 0; color: #555; line-height: 1.5; }",
71+
"sandboxCSS": "",
72+
"codePrefix": ".title {\n ",
73+
"initialCode": "",
74+
"codeSuffix": "\n}",
75+
"previewContainer": "preview-area",
76+
"solution": "font-weight: bold;",
77+
"validations": [
78+
{
79+
"type": "property_value",
80+
"value": {
81+
"property": "font-weight",
82+
"expected": "bold"
83+
},
84+
"message": "Setze font-weight auf <kbd>bold</kbd>"
85+
}
86+
]
87+
},
88+
{
89+
"id": "text-transform",
90+
"title": "Großbuchstaben-Labels",
91+
"description": "The <kbd>text-transform</kbd> property changes text capitalization without editing the HTML. This keeps content semantic while styling it differently:<br><br>• <kbd>uppercase</kbd> — ALL CAPS (great for labels, buttons)<br>• <kbd>lowercase</kbd> — all lowercase<br>• <kbd>capitalize</kbd> — First Letter Of Each Word<br><br>Combined with <kbd>letter-spacing</kbd>, uppercase text creates a clean, modern label style often used in UI design.",
92+
"task": "Style die Tag-Labels. Füge <kbd>text-transform: uppercase</kbd> und <kbd>letter-spacing: 1px</kbd> hinzu.",
93+
"previewHTML": "<article>\n <div class=\"tags\">\n <span class=\"tag\">Design</span>\n <span class=\"tag\">CSS</span>\n <span class=\"tag\">Tutorial</span>\n </div>\n <h3>Getting Started with Typography</h3>\n <p>Learn the fundamentals of web typography in this beginner-friendly guide.</p>\n</article>",
94+
"previewBaseCSS": "body { font-family: system-ui; padding: 1rem; } .tags { display: flex; gap: 0.5rem; margin-bottom: 1rem; } .tag { background: #e8f4f8; color: steelblue; padding: 0.25rem 0.75rem; border-radius: 4px; font-size: 0.75rem; } h3 { margin: 0 0 0.5rem; } p { margin: 0; color: #555; line-height: 1.5; }",
95+
"sandboxCSS": "",
96+
"codePrefix": ".tag {\n ",
97+
"initialCode": "",
98+
"codeSuffix": "\n}",
99+
"previewContainer": "preview-area",
100+
"solution": "text-transform: uppercase;\n letter-spacing: 1px;",
101+
"validations": [
102+
{
103+
"type": "property_value",
104+
"value": {
105+
"property": "text-transform",
106+
"expected": "uppercase"
107+
},
108+
"message": "Setze text-transform auf <kbd>uppercase</kbd>"
109+
},
110+
{
111+
"type": "property_value",
112+
"value": {
113+
"property": "letter-spacing",
114+
"expected": "1px"
115+
},
116+
"message": "Setze letter-spacing auf <kbd>1px</kbd>"
117+
}
118+
]
119+
},
120+
{
121+
"id": "text-decoration",
122+
"title": "Text-Dekoration",
123+
"description": "The <kbd>text-decoration</kbd> property adds lines to text. Common values:<br><br>• <kbd>underline</kbd> — line below text<br>• <kbd>line-through</kbd> — strikethrough<br>• <kbd>none</kbd> — removes decoration (useful for links)<br><br>You can also style decorations with <kbd>text-decoration-color</kbd> and <kbd>text-decoration-style</kbd>.",
124+
"task": "Zeige den alten Preis durchgestrichen. Füge <kbd>text-decoration: line-through</kbd> hinzu.",
125+
"previewHTML": "<div class=\"price-box\"><span class=\"old-price\">$49.99</span><span class=\"new-price\">$29.99</span></div>",
126+
"previewBaseCSS": "body { font-family: system-ui; padding: 1rem; } .price-box { display: flex; gap: 1rem; align-items: center; } .old-price { color: #999; font-size: 1rem; } .new-price { color: coral; font-size: 1.5rem; font-weight: bold; }",
127+
"sandboxCSS": "",
128+
"codePrefix": ".old-price {\n ",
129+
"initialCode": "",
130+
"codeSuffix": "\n}",
131+
"previewContainer": "preview-area",
132+
"solution": "text-decoration: line-through;",
133+
"validations": [
134+
{
135+
"type": "property_value",
136+
"value": {
137+
"property": "text-decoration",
138+
"expected": "line-through"
139+
},
140+
"message": "Setze text-decoration auf <kbd>line-through</kbd>"
141+
}
142+
]
143+
},
144+
{
145+
"id": "text-shadow",
146+
"title": "Text-Schatten",
147+
"description": "The <kbd>text-shadow</kbd> property adds shadow effects to text. The syntax is:<br><br><pre>text-shadow: x-offset y-offset blur color;</pre><br>Example: <kbd>text-shadow: 2px 2px 4px gray</kbd> creates a soft shadow offset down and right.",
148+
"task": "Gib der Überschrift Tiefe mit <kbd>text-shadow: 2px 2px 4px gray</kbd>.",
149+
"previewHTML": "<h1 class=\"hero-title\">Welcome</h1>",
150+
"previewBaseCSS": "body { font-family: system-ui; padding: 2rem; background: linear-gradient(135deg, #667eea, #764ba2); } .hero-title { margin: 0; font-size: 3rem; color: white; text-align: center; }",
151+
"sandboxCSS": "",
152+
"codePrefix": ".hero-title {\n ",
153+
"initialCode": "",
154+
"codeSuffix": "\n}",
155+
"previewContainer": "preview-area",
156+
"solution": "text-shadow: 2px 2px 4px gray;",
157+
"validations": [
158+
{
159+
"type": "contains",
160+
"value": "text-shadow",
161+
"message": "Verwende die <kbd>text-shadow</kbd>-Eigenschaft"
162+
},
163+
{
164+
"type": "contains",
165+
"value": "2px 2px",
166+
"message": "Setze Versatz auf <kbd>2px 2px</kbd>"
167+
}
168+
]
169+
}
170+
]
171+
}

lessons/de/09-gradients.json

Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,92 @@
1+
{
2+
"$schema": "../schemas/code-crispies-module-schema.json",
3+
"id": "css-gradients",
4+
"title": "CSS Verläufe",
5+
"description": "Erstelle weiche Farbübergänge mit CSS-Verläufen.",
6+
"difficulty": "intermediate",
7+
"lessons": [
8+
{
9+
"id": "gradients-1",
10+
"title": "Linearer Verlauf",
11+
"description": "Gradients create smooth transitions between colors. The <kbd>linear-gradient()</kbd> function creates a gradient along a straight line.<br><br><strong>Basic syntax:</strong><br><pre>background: linear-gradient(color1, color2);</pre><br>By default, gradients flow from top to bottom.",
12+
"task": "Füge einen Verlauf-Hintergrund von <kbd>coral</kbd> nach <kbd>gold</kbd> hinzu.",
13+
"previewHTML": "<div class=\"card\"><h3>Summer Sale</h3><p>Up to 50% off</p></div>",
14+
"previewBaseCSS": "body { font-family: system-ui, sans-serif; padding: 1rem; } .card { padding: 2rem; border-radius: 12px; color: white; text-shadow: 0 1px 2px rgba(0,0,0,0.2); } .card h3 { margin: 0 0 8px; font-size: 1.5rem; } .card p { margin: 0; opacity: 0.9; }",
15+
"sandboxCSS": "",
16+
"codePrefix": ".card {\n ",
17+
"initialCode": "",
18+
"codeSuffix": "\n}",
19+
"solution": "background: linear-gradient(coral, gold);",
20+
"previewContainer": "preview-area",
21+
"validations": [
22+
{
23+
"type": "contains",
24+
"value": "linear-gradient",
25+
"message": "Verwende <kbd>linear-gradient()</kbd>"
26+
},
27+
{
28+
"type": "contains",
29+
"value": "coral",
30+
"message": "Setze <kbd>coral</kbd> als erste Farbe"
31+
},
32+
{
33+
"type": "contains",
34+
"value": "gold",
35+
"message": "Setze <kbd>gold</kbd> als zweite Farbe"
36+
}
37+
]
38+
},
39+
{
40+
"id": "gradients-2",
41+
"title": "Verlauf-Richtung",
42+
"description": "Control the gradient direction by adding an angle or keyword before the colors.<br><br><strong>Keywords:</strong> <kbd>to right</kbd>, <kbd>to left</kbd>, <kbd>to bottom right</kbd><br><strong>Angles:</strong> <kbd>45deg</kbd>, <kbd>90deg</kbd>, <kbd>180deg</kbd><br><br><pre>background: linear-gradient(to right, blue, purple);</pre>",
43+
"task": "Lass den Verlauf von links nach rechts fließen mit <kbd>to right</kbd>.",
44+
"previewHTML": "<button class=\"btn\">Get Started</button>",
45+
"previewBaseCSS": "body { font-family: system-ui, sans-serif; padding: 2rem; } .btn { padding: 1rem 2rem; border: none; border-radius: 8px; font-size: 1rem; font-weight: 600; color: white; cursor: pointer; }",
46+
"sandboxCSS": "",
47+
"codePrefix": ".btn {\n background: linear-gradient(",
48+
"initialCode": "",
49+
"codeSuffix": ", steelblue, mediumseagreen);\n}",
50+
"solution": "to right",
51+
"previewContainer": "preview-area",
52+
"validations": [
53+
{
54+
"type": "contains",
55+
"value": "to right",
56+
"message": "Füge <kbd>to right</kbd> für die Richtung hinzu"
57+
}
58+
]
59+
},
60+
{
61+
"id": "gradients-3",
62+
"title": "Radialer Verlauf",
63+
"description": "The <kbd>radial-gradient()</kbd> function creates a gradient that radiates from a center point outward in a circular or elliptical pattern.<br><br><pre>background: radial-gradient(circle, white, steelblue);</pre><br>Add <kbd>circle</kbd> for a perfect circular gradient.",
64+
"task": "Erstelle einen radialen Verlauf von <kbd>white</kbd> zu <kbd>steelblue</kbd>.",
65+
"previewHTML": "<div class=\"orb\"></div>",
66+
"previewBaseCSS": "body { font-family: system-ui, sans-serif; padding: 2rem; display: flex; justify-content: center; } .orb { width: 150px; height: 150px; border-radius: 50%; box-shadow: 0 8px 32px rgba(70, 130, 180, 0.4); }",
67+
"sandboxCSS": "",
68+
"codePrefix": ".orb {\n ",
69+
"initialCode": "",
70+
"codeSuffix": "\n}",
71+
"solution": "background: radial-gradient(circle, white, steelblue);",
72+
"previewContainer": "preview-area",
73+
"validations": [
74+
{
75+
"type": "contains",
76+
"value": "radial-gradient",
77+
"message": "Verwende <kbd>radial-gradient()</kbd>"
78+
},
79+
{
80+
"type": "contains",
81+
"value": "white",
82+
"message": "Beginne mit <kbd>white</kbd>"
83+
},
84+
{
85+
"type": "contains",
86+
"value": "steelblue",
87+
"message": "Ende mit <kbd>steelblue</kbd>"
88+
}
89+
]
90+
}
91+
]
92+
}

0 commit comments

Comments
 (0)