Unit 2 Vocabulary

This commit is contained in:
dvorakmortonxd 2026-09-14 08:24:16 +02:00
commit c1a4edaa67
4 changed files with 261 additions and 11 deletions

View file

@ -1156,13 +1156,7 @@ const TypedQ trans_p15[] = {
{"Auf Wiedersehen!", "na shledanou|na viděnou|goodbye", "Na shledanou!"}, {"Auf Wiedersehen!", "na shledanou|na viděnou|goodbye", "Na shledanou!"},
}; };
typedef struct { const TransSection u1_trans_sections[] = {
const char *header; /* i18n key, e.g. "Strana 10" */
const TypedQ *rows;
int n;
} TransSection;
static const TransSection trans_sections[] = {
{"Strana 10", trans_p10, (int)G_N_ELEMENTS(trans_p10)}, {"Strana 10", trans_p10, (int)G_N_ELEMENTS(trans_p10)},
{"Strana 11", trans_p11, (int)G_N_ELEMENTS(trans_p11)}, {"Strana 11", trans_p11, (int)G_N_ELEMENTS(trans_p11)},
{"Strana 12", trans_p12, (int)G_N_ELEMENTS(trans_p12)}, {"Strana 12", trans_p12, (int)G_N_ELEMENTS(trans_p12)},
@ -1170,6 +1164,7 @@ static const TransSection trans_sections[] = {
{"Strana 14", trans_p14, (int)G_N_ELEMENTS(trans_p14)}, {"Strana 14", trans_p14, (int)G_N_ELEMENTS(trans_p14)},
{"Strana 15", trans_p15, (int)G_N_ELEMENTS(trans_p15)}, {"Strana 15", trans_p15, (int)G_N_ELEMENTS(trans_p15)},
}; };
const int u1_trans_sections_n = (int)G_N_ELEMENTS(u1_trans_sections);
typedef struct { typedef struct {
UnitCtx *unit; UnitCtx *unit;
@ -1296,8 +1291,8 @@ GtkWidget *build_translate(UnitCtx *unit) {
int total = 0; int total = 0;
int k = 0; int k = 0;
for (guint s = 0; s < G_N_ELEMENTS(trans_sections); s++) for (int s = 0; s < unit->n_trans_sections; s++)
total += trans_sections[s].n; total += unit->trans_sections[s].n;
ctx->unit = unit; ctx->unit = unit;
ctx->ex_num = unit->branch_ex; ctx->ex_num = unit->branch_ex;
@ -1307,8 +1302,8 @@ GtkWidget *build_translate(UnitCtx *unit) {
ctx->headers = g_new0(const char *, total); ctx->headers = g_new0(const char *, total);
ctx->order = g_new0(int, total); ctx->order = g_new0(int, total);
for (guint s = 0; s < G_N_ELEMENTS(trans_sections); s++) { for (int s = 0; s < unit->n_trans_sections; s++) {
const TransSection *sec = &trans_sections[s]; const TransSection *sec = &unit->trans_sections[s];
for (int i = 0; i < sec->n; i++, k++) { for (int i = 0; i < sec->n; i++, k++) {
ctx->qs[k] = sec->rows[i]; ctx->qs[k] = sec->rows[i];

View file

@ -1305,3 +1305,236 @@ GtkWidget *u2ex19(UnitCtx *unit) {
s03_rows, G_N_ELEMENTS(s03_rows), NULL, TRUE); s03_rows, G_N_ELEMENTS(s03_rows), NULL, TRUE);
} }
/* ------------------------------------------------------------------ */
/* Unit 2 vocabulary (off-path Vokabeltraining branch) */
/* ------------------------------------------------------------------ */
const TypedQ u2_trans_p22[] = {
{"arbeiten (Infinitiv)", "pracovat|pracuje|to work", "pracovat"},
{"das Auto, -s", "auto|car", "auto"},
{"brauchen (Infinitiv)", "potřebovat|potřebuje|to need", "potřebovat"},
{"die Britin, -nen", "britka|british woman", "Britka"},
{"britisch", "britský|british", "britský"},
{"deutsch", "německý|german", "německý"},
{"das Deutsch",
"němčina|německy|němčina, německy|german", "němčina, německy"},
{"die Eisschnelläuferin, -nen",
"rychlobruslařka|speed skater", "rychlobruslařka"},
{"fahren (Infinitiv)", "jezdit|jet|řídit|to drive|to go", "jezdit"},
{"Er fährt gern Auto.",
"rád řídí auto|rád jezdí autem|he likes driving a car",
"Rád řídí auto."},
{"Frankreich", "francie|france", "Francie"},
{"für", "pro|za|for", "pro, za"},
{"der Fußballspieler", "fotbalista|footballer|football player",
"fotbalista"},
{"das Jahrhunderttalent, -e",
"talent století|talent of the century", "talent století"},
{"das Kind, -er", "dítě|child", "dítě"},
{"lesen (Infinitiv)", "číst|to read", "číst"},
{"das Model, -s", "model|modelka|model, modelka", "model, modelka"},
{"die Nummer, -n", "číslo|number", "číslo"},
{"die Schauspielerin, -nen", "herečka|actress", "herečka"},
{"der Schüler, -", "žák|pupil|schoolboy", "žák"},
{"die Sportinitiative, -n",
"sportovní iniciativa|sports initiative", "sportovní iniciativa"},
{"sprechen (Infinitiv)", "mluvit|to speak", "mluvit"},
{"Sie spricht Englisch.",
"mluví anglicky|ona mluví anglicky|she speaks english",
"Mluví anglicky."},
{"der Trainer, -", "trenér|coach|trainer", "trenér"},
};
const TypedQ u2_trans_p23[] = {
{"besuchen (Infinitiv)", "navštěvovat|navštívit|to visit",
"navštěvovat, navštívit"},
{"Er besucht das Gymnasium.",
"chodí na gymnázium|navštěvuje gymnázium|he attends grammar school",
"Chodí na gymnázium."},
{"dort", "tam|there", "tam"},
{"dreifach", "trojnásobný|threefold|triple", "trojnásobný"},
{"gewinnen (Infinitiv)", "vyhrát|vyhrávat|to win", "vyhrát, vyhrávat"},
{"die Goldmedaille, -n", "zlatá medaile|gold medal", "zlatá medaile"},
{"das Gymnasium, Gymnasien", "gymnázium|grammar school", "gymnázium"},
{"heute", "dnes|dneska|today", "dnes"},
{"das Kroatisch",
"chorvatština|chorvatsky|chorvatština, chorvatsky|croatian",
"chorvatština, chorvatsky"},
{"leben (Infinitiv)", "žít|to live", "žít"},
{"Sie lebt in Österreich.", "žije v rakousku|she lives in austria",
"Žije v Rakousku."},
{"die Muttersprache, -n", "mateřský jazyk|mother tongue",
"mateřský jazyk"},
{"oft", "často|often", "často"},
{"Österreich", "rakousko|austria", "Rakousko"},
{"die Rad(renn)fahrerin, -nen", "cyklistka|cyclist", "cyklistka"},
{"das Spanisch",
"španělština|španělsky|španělština, španělsky|spanish",
"španělština, španělsky"},
{"die Sportlerin, -nen", "sportovkyně|sportswoman|athlete",
"sportovkyně"},
{"sportlich", "sportovní|sporty", "sportovní"},
{"tschechisch", "český|czech", "český"},
{"das Tschechisch",
"čeština|česky|čeština, česky|czech", "čeština, česky"},
};
const TypedQ u2_trans_p24[] = {
{"das Amerika", "amerika|america", "Amerika"},
{"die Assistentin, -nen", "asistentka|assistant", "asistentka"},
{"der Beruf, -e", "povolání|profese|job|profession", "povolání"},
{"Was ist er von Beruf?",
"jaké má povolání|čím je|what is his job", "Jaké má povolání?"},
{"Deutschland", "německo|germany", "Německo"},
{"England", "anglie|england", "Anglie"},
{"die Flagge, -n", "vlajka|flag", "vlajka"},
{"Griechenland", "řecko|greece", "Řecko"},
{"das Griechisch",
"řečtina|řecky|řečtina, řecky|greek", "řečtina, řecky"},
{"Großbritannien", "velká británie|great britain", "Velká Británie"},
{"die Herkunft", "původ|origin", "původ"},
{"Italien", "itálie|italy", "Itálie"},
{"das Italienisch",
"italština|italsky|italština, italsky|italian", "italština, italsky"},
{"Kroatien", "chorvatsko|croatia", "Chorvatsko"},
{"das Land, Länder", "země|stát|country", "země, stát"},
{"der Lehrer, -", "učitel|teacher", "učitel"},
{"die Lehrerin, -nen", "učitelka|teacher", "učitelka"},
{"der Manager, -", "manažer|manager", "manažer"},
{"Polen", "polsko|poland", "Polsko"},
{"das Polnisch",
"polština|polsky|polština, polsky|polish", "polština, polsky"},
{"das Russisch",
"ruština|rusky|ruština, rusky|russian", "ruština, rusky"},
{"Russland", "rusko|russia", "Rusko"},
{"die Schweiz", "švýcarsko|switzerland", "Švýcarsko"},
{"die Slowakei", "slovensko|slovakia", "Slovensko"},
{"das Slowakisch",
"slovenština|slovensky|slovenština, slovensky|slovak",
"slovenština, slovensky"},
{"Spanien", "španělsko|spain", "Španělsko"},
{"die Sprache, -n", "jazyk|řeč|language", "jazyk, řeč"},
{"der Student, -en", "student|student", "student"},
{"die Studentin, -nen", "studentka|student", "studentka"},
{"Tschechien", "česko|czechia", "Česko"},
{"die Türkei", "turecko|turkey", "Turecko"},
{"das Türkisch",
"turečtina|turecky|turečtina, turecky|turkish", "turečtina, turecky"},
{"das Ungarisch",
"maďarština|maďarsky|maďarština, maďarsky|hungarian",
"maďarština, maďarsky"},
{"Ungarn", "maďarsko|hungary", "Maďarsko"},
{"die Verkäuferin, -nen", "prodavačka|shop assistant|saleswoman",
"prodavačka"},
{"welcher/welche/welches", "jaký|jaká|jaké|which", "jaký/jaká/jaké"},
{"Welche Sprachen spricht sie?",
"jakými jazyky mluví|které jazyky mluví|which languages does she speak",
"Jakými jazyky mluví?"},
{"super", "super|skvělý|great|super, skvělý", "super, skvělý"},
{"wenig", "málo|little|few", "málo"},
{"ein wenig", "trochu|a little|a bit", "trochu"},
{"das Wort, Wörter", "slovo|word", "slovo"},
};
const TypedQ u2_trans_p25[] = {
{"das Abitur, -e", "maturita|a-levels", "maturita"},
{"der Austausch, -e", "výměna|exchange", "výměna"},
{"ein bisschen", "trochu|a bit|a little", "trochu"},
{"finden (Infinitiv)",
"najít|považovat|shledávat|myslet si|to find",
"najít, považovat"},
{"Sie findet den Kurs...",
"kurz se jí líbí|kurz shledává skvělým|she likes the course",
"Kurz se jí líbí. (Kurz shledává skvělým.)"},
{"interessant", "zajímavý|interesting", "zajímavý"},
{"der Kurs, -e", "kurz|course", "kurz"},
{"leider", "bohužel|unfortunately", "bohužel"},
{"mein/meine/mein", "můj|moje|my", "můj/moje/moje"},
{"der Mensch, -en", "člověk|human|person", "člověk"},
{"die Mutter, Mütter", "matka|mother", "matka"},
{"noch", "ještě|still", "ještě"},
{"Portugal", "portugalsko|portugal", "Portugalsko"},
{"das Portugiesisch",
"portugalština|portugalsky|portugalština, portugalsky|portuguese",
"portugalština, portugalsky"},
{"Schweden", "švédsko|sweden", "Švédsko"},
{"das Schwedisch",
"švédština|švédsky|švédština, švédsky|swedish", "švédština, švédsky"},
{"sehr", "velmi|very", "velmi"},
{"nicht sehr gut", "ne moc dobře|not very well", "ne moc dobře"},
{"studieren (Infinitiv)", "studovat|to study", "studovat"},
{"das Südamerika", "jižní amerika|south america", "Jižní Amerika"},
{"die USA (mn. č.)", "usa|united states|spojené státy", "USA"},
{"viel", "hodně|much|a lot", "hodně"},
{"wie viel", "kolik|how much|how many", "kolik"},
};
const TypedQ u2_trans_p26a[] = {
{"Deutscher/Deutsche", "němec|němka|němec/němka", "Němec/Němka"},
{"Engländer/Engländerin",
"angličan|angličanka|angličan/angličanka", "Angličan/Angličanka"},
{"Franzose/Französin",
"francouz|francouzka|francouz/francouzka", "Francouz/Francouzka"},
{"Italiener/Italienerin", "ital|italka|ital/italka", "Ital/Italka"},
{"die Nationalität, -en", "národnost|nationality", "národnost"},
{"Österreicher/Österreicherin",
"rakušan|rakušanka|rakušan/rakušanka", "Rakušan/Rakušanka"},
{"Russe/Russin", "rus|ruska|rus/ruska", "Rus/Ruska"},
{"Schweizer/Schweizerin",
"švýcar|švýcarka|švýcar/švýcarka", "Švýcar/Švýcarka"},
{"Slowake/Slowakin", "slovák|slovenka|slovák/slovenka",
"Slovák/Slovenka"},
{"Spanier/Spanierin", "španěl|španělka|španěl/španělka",
"Španěl/Španělka"},
{"Tscheche/Tschechin", "čech|češka|čech/češka", "Čech/Češka"},
};
const TypedQ u2_trans_p26b[] = {
{"dreißig", "30|třicet", "třicet (30)"},
{"vierzig", "40|čtyřicet", "čtyřicet (40)"},
{"fünfzig", "50|padesát", "padesát (50)"},
{"sechzig", "60|šedesát", "šedesát (60)"},
{"siebzig", "70|sedmdesát", "sedmdesát (70)"},
{"achtzig", "80|osmdesát", "osmdesát (80)"},
{"neunzig", "90|devadesát", "devadesát (90)"},
{"(ein)hundert", "100|sto", "sto (100)"},
{"(ein)tausend", "1000|tisíc", "tisíc (1000)"},
};
const TypedQ u2_trans_p27[] = {
{"das Afrika", "afrika|africa", "Afrika"},
{"die Arbeit, -en", "práce|work|job", "práce"},
{"Asien", "asie|asia", "Asie"},
{"das Australien", "austrálie|australia", "Austrálie"},
{"beginnen (Infinitiv)", "začít|začínat|to begin|to start",
"začít, začínat"},
{"danke", "děkuji|díky|thanks|thank you", "děkuji, díky"},
{"das Europa", "evropa|europe", "Evropa"},
{"ganz", "celý|whole", "celý"},
{"gehen (Infinitiv)", "jít|chodit|to go", "jít"},
{"Wie geht es Ihnen?", "jak se máte|how are you", "Jak se máte?"},
{"Wie geht es dir?", "jak se máš|how are you", "Jak se máš?"},
{"genau", "přesně|exactly", "přesně"},
{"morgen", "zítra|tomorrow", "zítra"},
{"nur", "jen|only", "jen"},
{"der Rekord, -e", "rekord|record", "rekord"},
{"schon", "již|už|already", "již, už"},
{"das Semester, -", "semestr|semester", "semestr"},
{"viel", "hodně|much|a lot", "hodně"},
{"wie viel", "kolik|how much|how many", "kolik"},
{"die Welt", "svět|world", "svět"},
{"aus der ganzen Welt", "z celého světa|from all over the world",
"z celého světa"},
};
const TransSection u2_trans_sections[] = {
{"Strana 22", u2_trans_p22, (int)G_N_ELEMENTS(u2_trans_p22)},
{"Strana 23", u2_trans_p23, (int)G_N_ELEMENTS(u2_trans_p23)},
{"Strana 24", u2_trans_p24, (int)G_N_ELEMENTS(u2_trans_p24)},
{"Strana 25", u2_trans_p25, (int)G_N_ELEMENTS(u2_trans_p25)},
{"Strana 26", u2_trans_p26a, (int)G_N_ELEMENTS(u2_trans_p26a)},
{"Strana 26", u2_trans_p26b, (int)G_N_ELEMENTS(u2_trans_p26b)},
{"Strana 27", u2_trans_p27, (int)G_N_ELEMENTS(u2_trans_p27)},
};
const int u2_trans_sections_n = (int)G_N_ELEMENTS(u2_trans_sections);

10
main.c
View file

@ -37,6 +37,16 @@ void unit_meta_init(void) {
units[0].branch_name = "Vokabeltraining"; units[0].branch_name = "Vokabeltraining";
units[0].branch_target = "u1vocab"; units[0].branch_target = "u1vocab";
units[0].branch_ex = MAX_UNIT_EX; units[0].branch_ex = MAX_UNIT_EX;
units[0].trans_sections = u1_trans_sections;
units[0].n_trans_sections = u1_trans_sections_n;
/* Same vocabulary-training branch for unit 2 ("Aus aller Welt"). */
units[1].has_branch = TRUE;
units[1].branch_name = "Vokabeltraining";
units[1].branch_target = "u2vocab";
units[1].branch_ex = MAX_UNIT_EX;
units[1].trans_sections = u2_trans_sections;
units[1].n_trans_sections = u2_trans_sections_n;
} }
void unit_configure(int idx, const char *const *names, int n) { void unit_configure(int idx, const char *const *names, int n) {

View file

@ -86,6 +86,7 @@ typedef enum {
LANG_CS = 0, LANG_CS = 0,
LANG_EN LANG_EN
} UiLang; } UiLang;
typedef struct TransSection TransSection; /* vocabulary word list for a branch */
typedef struct { typedef struct {
unsigned crust; unsigned crust;
unsigned base; unsigned base;
@ -145,6 +146,8 @@ typedef struct {
GtkWidget *branch_icon; GtkWidget *branch_icon;
double branch_cx; double branch_cx;
double branch_cy; double branch_cy;
const struct TransSection *trans_sections; /* branch vocabulary content */
int n_trans_sections;
} UnitCtx; } UnitCtx;
typedef struct { double r, g, b; } Rgb; typedef struct { double r, g, b; } Rgb;
typedef struct { typedef struct {
@ -337,6 +340,11 @@ typedef struct {
const char *answers; /* accepted answers separated by '|' */ const char *answers; /* accepted answers separated by '|' */
const char *meaning; /* i18n key of the revealed meaning or NULL */ const char *meaning; /* i18n key of the revealed meaning or NULL */
} TypedQ; } TypedQ;
struct TransSection {
const char *header; /* page label shown above the word, e.g. "Strana 22" */
const TypedQ *rows;
int n;
};
typedef struct { typedef struct {
const TypedQ *qs; const TypedQ *qs;
int n; int n;
@ -606,6 +614,10 @@ extern const TypedQ g06_rows[];
extern const TypedQ g07_rows[]; extern const TypedQ g07_rows[];
extern const TypedQ g11_rows[]; extern const TypedQ g11_rows[];
extern const TypedQ s03_rows[]; extern const TypedQ s03_rows[];
extern const TransSection u1_trans_sections[];
extern const int u1_trans_sections_n;
extern const TransSection u2_trans_sections[];
extern const int u2_trans_sections_n;
extern const VerbQ g01_peter[]; extern const VerbQ g01_peter[];
extern const VerbQ g01_jana[]; extern const VerbQ g01_jana[];
extern const char *g01_pool[]; extern const char *g01_pool[];