263 lines
9.6 KiB
HTML
263 lines
9.6 KiB
HTML
<!DOCTYPE html>
|
|
<html lang="en">
|
|
<head>
|
|
<meta charset="UTF-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
<title>Lesson 1 — V2 Word Order</title>
|
|
<link rel="stylesheet" href="../assets/style.css">
|
|
</head>
|
|
<body>
|
|
<div class="page">
|
|
|
|
<p class="subtitle">Lesson 1 of your German course</p>
|
|
<h1>V2 Word Order: The Rule That Fixes 40% of Your Errors</h1>
|
|
<p class="subtitle">B1.2 · Grammar · ~15 minutes</p>
|
|
|
|
<h2>Why this matters</h2>
|
|
|
|
<p>
|
|
German verbs are obsessed with position. In a main clause, the <strong>finite verb always occupies the second slot</strong> — the second grammatical unit, not the second word. This is called the <em>Verb-Second</em> (V2) rule and it affects every sentence you speak or write in German.
|
|
</p>
|
|
|
|
<p>
|
|
In English, the subject almost always comes first. German doesn't care. You can put a time expression, a location, a reason, or an adverb in front — but the moment you do, the subject has to step aside and the verb takes slot two.
|
|
</p>
|
|
|
|
<div class="rule-box">
|
|
<strong>The Rule</strong>
|
|
<div class="formula">[ Front element ] → VERB → Subject → rest of sentence</div>
|
|
</div>
|
|
|
|
<h2>The pattern in your own sentences</h2>
|
|
|
|
<p>These are the exact constructions you've been writing — and the correction each time:</p>
|
|
|
|
<table>
|
|
<tr>
|
|
<th>What you wrote</th>
|
|
<th>What it should be</th>
|
|
<th>Front element</th>
|
|
</tr>
|
|
<tr>
|
|
<td class="wrong">Heute <em>ich werde</em> Code-Review machen</td>
|
|
<td class="right">Heute <em>werde ich</em> Code-Review machen</td>
|
|
<td>Heute (time)</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="wrong">Am Freitag <em>ich hat</em> gearbeitet</td>
|
|
<td class="right">Am Freitag <em>habe ich</em> gearbeitet</td>
|
|
<td>Am Freitag (time)</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="wrong">Danach <em>ich werde</em> weiter</td>
|
|
<td class="right">Danach <em>werde ich</em> weiter</td>
|
|
<td>Danach (sequence)</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="wrong"><em>Weiss ich nicht</em> was...</td>
|
|
<td class="right"><em>Ich weiß</em> nicht, was...</td>
|
|
<td>Subject first → no inversion needed</td>
|
|
</tr>
|
|
</table>
|
|
|
|
<p>
|
|
Notice the last row: when the subject is already in front, there is <em>no inversion</em>. The rule only triggers when something other than the subject occupies slot one.
|
|
</p>
|
|
|
|
<h2>Common front elements that trigger inversion</h2>
|
|
|
|
<table>
|
|
<tr><th>Type</th><th>Examples</th></tr>
|
|
<tr><td>Time</td><td><code>Heute, Gestern, Am Freitag, Um 9 Uhr, Letzte Woche</code></td></tr>
|
|
<tr><td>Sequence</td><td><code>Dann, Danach, Zuerst, Anschließend, Zuletzt</code></td></tr>
|
|
<tr><td>Contrast / addition</td><td><code>Trotzdem, Also, Außerdem, Dennoch</code></td></tr>
|
|
<tr><td>Reason phrase</td><td><code>Deshalb, Daher, Deswegen</code></td></tr>
|
|
<tr><td>Location</td><td><code>In Heitersheim, Im Büro, Zu Hause</code></td></tr>
|
|
<tr><td>Object moved to front</td><td><code>Das Ticket habe ich gestern geschlossen.</code></td></tr>
|
|
</table>
|
|
|
|
<h2>A trick that never fails</h2>
|
|
|
|
<p>
|
|
After you write a sentence, hold up one finger for the first unit. Ask: <em>is this the verb?</em> If no — your next word <strong>must</strong> be the verb, and the subject comes after it. Count on your fingers if needed. This catches the error every time before it leaves your head.
|
|
</p>
|
|
|
|
<hr style="border:none; border-top: 1px solid #ddd; margin: 2.5rem 0;">
|
|
|
|
<h2>Drill — choose the correct word order</h2>
|
|
|
|
<p>All sentences are grounded in your actual life. Eight questions. Immediate feedback after each answer.</p>
|
|
|
|
<div class="quiz-section" id="quiz"></div>
|
|
|
|
<div class="score-bar" id="score-bar">
|
|
<span class="score-number" id="score-number"></span> — <span id="score-comment"></span>
|
|
</div>
|
|
|
|
<hr style="border:none; border-top: 1px solid #ddd; margin: 2.5rem 0;">
|
|
|
|
<h2>Primary source for this lesson</h2>
|
|
|
|
<p>
|
|
<a href="https://git.sometimescode.com/cgsmith/German-for-English-Speakers/src/branch/main/basics/sentence-structure.md" target="_blank">German for English Speakers: Sentence Structure</a> — covers V2, subordinate clause word order, and compound verbs in one page. Then <a href="https://yourdailygerman.com/german-word-order-explained/" target="_blank">Your Daily German: Word Order Explained</a> for deeper coverage (subscription).
|
|
</p>
|
|
|
|
<div class="ask-teacher">
|
|
<strong>Ask your teacher:</strong> Anything from this lesson that felt unclear — a sentence that confused you, or a case where you're unsure whether inversion applies — paste it into the chat and ask. The teacher is here to dig into it with you.
|
|
</div>
|
|
|
|
<div class="lesson-nav">
|
|
<strong>Related:</strong>
|
|
<a href="../reference/word-order.html">Word Order Reference Sheet</a> ·
|
|
Lesson 2 coming next session
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<script>
|
|
const questions = [
|
|
{
|
|
prefix: "Heute",
|
|
suffix: "einen Code-Review gemacht.",
|
|
correct: "habe ich",
|
|
distractor: "ich habe",
|
|
feedback: "<strong>Heute</strong> is a fronted time element → verb comes second: <em>Heute habe ich …</em>"
|
|
},
|
|
{
|
|
prefix: "Am Freitag",
|
|
suffix: "an dem Sprint gearbeitet.",
|
|
correct: "habe ich",
|
|
distractor: "ich habe",
|
|
feedback: "<strong>Am Freitag</strong> is a fronted time phrase → inversion required: <em>Am Freitag habe ich …</em>"
|
|
},
|
|
{
|
|
prefix: "Danach",
|
|
suffix: "die E-Mail an Herrn Amann geschrieben.",
|
|
correct: "habe ich",
|
|
distractor: "ich habe",
|
|
feedback: "<strong>Danach</strong> (sequence adverb) triggers inversion: <em>Danach habe ich …</em>"
|
|
},
|
|
{
|
|
prefix: "In Heitersheim",
|
|
suffix: "viele schöne Spazierwege.",
|
|
correct: "gibt es",
|
|
distractor: "es gibt",
|
|
feedback: "<strong>In Heitersheim</strong> is a fronted location → verb second: <em>In Heitersheim gibt es …</em>"
|
|
},
|
|
{
|
|
prefix: "Normalerweise",
|
|
suffix: "um acht Uhr im Büro.",
|
|
correct: "bin ich",
|
|
distractor: "ich bin",
|
|
feedback: "<strong>Normalerweise</strong> (manner adverb) triggers inversion: <em>Normalerweise bin ich …</em>"
|
|
},
|
|
{
|
|
prefix: "Nach der Schule",
|
|
suffix: "oft Hunger.",
|
|
correct: "haben die Kinder",
|
|
distractor: "die Kinder haben",
|
|
feedback: "<strong>Nach der Schule</strong> is fronted → verb must come second, subject after: <em>Nach der Schule haben die Kinder oft Hunger.</em>"
|
|
},
|
|
{
|
|
prefix: "Letzte Woche",
|
|
suffix: "das Deployment abgeschlossen.",
|
|
correct: "haben wir",
|
|
distractor: "wir haben",
|
|
feedback: "<strong>Letzte Woche</strong> fronted → verb second: <em>Letzte Woche haben wir das Deployment abgeschlossen.</em>"
|
|
},
|
|
{
|
|
prefix: "Deshalb",
|
|
suffix: "dir eine kurze Nachricht.",
|
|
correct: "schreibe ich",
|
|
distractor: "ich schreibe",
|
|
feedback: "<strong>Deshalb</strong> (reason connector) triggers inversion: <em>Deshalb schreibe ich dir eine kurze Nachricht.</em>"
|
|
}
|
|
];
|
|
|
|
// Build quiz HTML
|
|
const quiz = document.getElementById('quiz');
|
|
let answered = 0;
|
|
let correct = 0;
|
|
const total = questions.length;
|
|
|
|
// Pre-determined option order: ensures correct answer appears in both positions across the quiz
|
|
// true = correct first, false = distractor first
|
|
const correctFirst = [true, false, false, true, false, true, false, true];
|
|
|
|
questions.forEach((q, i) => {
|
|
const opts = correctFirst[i]
|
|
? [q.correct, q.distractor]
|
|
: [q.distractor, q.correct];
|
|
|
|
const block = document.createElement('div');
|
|
block.className = 'question-block';
|
|
block.id = 'q' + i;
|
|
|
|
block.innerHTML = `
|
|
<div class="question-text">
|
|
<strong>${i + 1}.</strong> “${q.prefix} <span class="blank">___________</span> ${q.suffix}”
|
|
</div>
|
|
<div class="options">
|
|
${opts.map((opt, j) => `<button class="option-btn" onclick="answer(${i}, '${opt.replace(/'/g, "\\'")}', this)">${opt}</button>`).join('')}
|
|
</div>
|
|
<div class="feedback" id="fb${i}"></div>
|
|
`;
|
|
|
|
quiz.appendChild(block);
|
|
});
|
|
|
|
function answer(i, chosen, btn) {
|
|
const q = questions[i];
|
|
const block = document.getElementById('q' + i);
|
|
const fb = document.getElementById('fb' + i);
|
|
const buttons = block.querySelectorAll('.option-btn');
|
|
|
|
// Disable all buttons in this block
|
|
buttons.forEach(b => b.disabled = true);
|
|
|
|
const isCorrect = chosen === q.correct;
|
|
answered++;
|
|
|
|
if (isCorrect) {
|
|
correct++;
|
|
block.classList.add('correct');
|
|
btn.classList.add('selected-correct');
|
|
fb.className = 'feedback show correct-fb';
|
|
fb.innerHTML = '✓ Correct. ' + q.feedback;
|
|
} else {
|
|
block.classList.add('incorrect');
|
|
btn.classList.add('selected-incorrect');
|
|
fb.className = 'feedback show incorrect-fb';
|
|
fb.innerHTML = '✗ Not quite. ' + q.feedback;
|
|
// Reveal correct answer
|
|
buttons.forEach(b => {
|
|
if (b.textContent.trim() === q.correct) b.classList.add('reveal-correct');
|
|
});
|
|
}
|
|
|
|
if (answered === total) showScore();
|
|
}
|
|
|
|
function showScore() {
|
|
const bar = document.getElementById('score-bar');
|
|
const num = document.getElementById('score-number');
|
|
const comment = document.getElementById('score-comment');
|
|
|
|
bar.classList.add('show');
|
|
num.textContent = correct + ' / ' + total;
|
|
|
|
if (correct === total) {
|
|
comment.textContent = 'Perfect. V2 is clicking. Ready to drill the next pattern.';
|
|
} else if (correct >= 6) {
|
|
comment.textContent = 'Solid — V2 is mostly there. Review the ones you missed and revisit tomorrow.';
|
|
} else if (correct >= 4) {
|
|
comment.textContent = 'The pattern is forming. Run this lesson again in 24 hours to consolidate it.';
|
|
} else {
|
|
comment.textContent = 'Keep the rule visible when you write today. Run this drill again before tomorrow\'s session.';
|
|
}
|
|
}
|
|
</script>
|
|
|
|
</body>
|
|
</html>
|