-- Teil 2 des "mehrsprachig variabel"-Umbaus: Speiseplan-Inhalte -- (Gerichte, Essenszeiten, Allergene, Zusatzstoffe) bekommen eine -- Übersetzungstabelle je Ressource statt fester name_en/name_pl- -- Spalten (Teil 1, v1.10.0, hat dasselbe schon für die -- Bedienoberfläche gemacht). Deutsch bleibt die Basis-Spalte -- (name/label) auf der jeweiligen Haupttabelle. -- -- WICHTIG bei Deployments mit echten Daten: vor dem Einspielen ein -- Backup ziehen (siehe DEPLOYMENT.md, Abschnitt "Backup") – Schritt 3 -- entfernt die alten name_en/name_pl-Spalten unwiderruflich, nachdem -- Schritt 2 ihren Inhalt in die neuen Tabellen übernommen hat. -- ---------- Schritt 1: neue Tabellen ---------- create table dish_translations ( dish_id uuid not null references dishes(id) on delete cascade, language_code text not null references languages(code) on delete cascade, name text not null, primary key (dish_id, language_code) ); create table section_translations ( section_key text not null references sections(key) on delete cascade, language_code text not null references languages(code) on delete cascade, name text not null, primary key (section_key, language_code) ); -- allergens.code/additives.code sind vom Admin umbenennbar (Primary -- Key), anders als dishes.id/sections.key – "on update cascade" nötig, -- damit eine Umbenennung des Kürzels nicht die Übersetzungszeilen -- verwaist. create table allergen_translations ( allergen_code text not null references allergens(code) on delete cascade on update cascade, language_code text not null references languages(code) on delete cascade, name text not null, primary key (allergen_code, language_code) ); create table additive_translations ( additive_code text not null references additives(code) on delete cascade on update cascade, language_code text not null references languages(code) on delete cascade, name text not null, primary key (additive_code, language_code) ); -- ---------- Schritt 2: bestehende Übersetzungen übernehmen ---------- insert into dish_translations (dish_id, language_code, name) select id, 'en', name_en from dishes where name_en is not null and trim(name_en) != ''; insert into dish_translations (dish_id, language_code, name) select id, 'pl', name_pl from dishes where name_pl is not null and trim(name_pl) != ''; insert into section_translations (section_key, language_code, name) select key, 'en', label_en from sections where label_en is not null and trim(label_en) != ''; insert into section_translations (section_key, language_code, name) select key, 'pl', label_pl from sections where label_pl is not null and trim(label_pl) != ''; insert into allergen_translations (allergen_code, language_code, name) select code, 'en', name_en from allergens where name_en is not null and trim(name_en) != ''; insert into allergen_translations (allergen_code, language_code, name) select code, 'pl', name_pl from allergens where name_pl is not null and trim(name_pl) != ''; insert into additive_translations (additive_code, language_code, name) select code, 'en', name_en from additives where name_en is not null and trim(name_en) != ''; insert into additive_translations (additive_code, language_code, name) select code, 'pl', name_pl from additives where name_pl is not null and trim(name_pl) != ''; -- ---------- Schritt 3: alte Spalten entfernen ---------- alter table dishes drop column name_en, drop column name_pl; alter table sections drop column label_en, drop column label_pl; alter table allergens drop column name_en, drop column name_pl; alter table additives drop column name_en, drop column name_pl;