feat: Speiseplan-Inhalte variabel mehrsprachig (Teil 2)
Gerichtnamen, Essenszeiten und Allergen-/Zusatzstoff-Bezeichnungen sind jetzt genauso dynamisch mehrsprachig wie die Bedienoberfläche aus v1.10.0, statt fest auf Englisch/Polnisch begrenzt zu sein. Neue Übersetzungstabellen ersetzen die alten name_en/name_pl-Spalten, DeepL-Auto-Übersetzung und CSV-Import/-Export unterstützen jetzt beliebig viele aktive Sprachen.
This commit is contained in:
@@ -0,0 +1,71 @@
|
||||
-- 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;
|
||||
Reference in New Issue
Block a user