Add bilingual native_range and wildlife_value fields (DE/EN) to species

Migration 011 adds native_range_de, native_range_en, wildlife_value_de,
wildlife_value_en columns. Backend INSERT/UPDATE queries updated ($64→$68).
Frontend species and cultivar detail pages use pick_desc() for language selection.
This commit is contained in:
2026-03-15 21:57:23 +01:00
parent b24038cb57
commit e3b1d5ff6d
6 changed files with 49 additions and 24 deletions
+2 -2
View File
@@ -848,8 +848,8 @@ pub fn CultivarDetail(slug: String) -> Element {
let sp_food = pick_desc(&current_lang, &sp.food_uses_de, &sp.food_uses_en, &sp.food_uses);
let sp_med = pick_desc(&current_lang, &sp.medicinal_uses_de, &sp.medicinal_uses_en, &sp.medicinal_uses);
let sp_other = pick_desc(&current_lang, &sp.other_uses_de, &sp.other_uses_en, &sp.other_uses);
let sp_wildlife = opt_str(&sp.wildlife_value);
let sp_native = opt_str(&sp.native_range);
let sp_wildlife = pick_desc(&current_lang, &sp.wildlife_value_de, &sp.wildlife_value_en, &sp.wildlife_value);
let sp_native = pick_desc(&current_lang, &sp.native_range_de, &sp.native_range_en, &sp.native_range);
rsx! {
table { class: "attr-table",
tbody {
+2 -2
View File
@@ -510,8 +510,8 @@ pub fn SpeciesDetail(slug: String) -> Element {
// Ecology
let layer = s.plant_layer.as_deref().map(|v| t_val(l, v).to_string()).unwrap_or_else(|| em.to_string());
let succession = s.succession_stage.as_deref().map(|v| t_val(l, v).to_string()).unwrap_or_else(|| em.to_string());
let wildlife = os(&s.wildlife_value);
let native = os(&s.native_range);
let wildlife = pick_desc(&current_lang, &s.wildlife_value_de, &s.wildlife_value_en, &s.wildlife_value);
let native = pick_desc(&current_lang, &s.native_range_de, &s.native_range_en, &s.native_range);
let pollination = s.pollination_type.as_deref().map(|v| t_val(l, v).to_string()).unwrap_or_else(|| em.to_string());
// Growing requirements
+4
View File
@@ -52,12 +52,16 @@ pub struct Species {
pub other_uses_de: Option<String>,
pub other_uses_en: Option<String>,
pub native_range: Option<String>,
pub native_range_de: Option<String>,
pub native_range_en: Option<String>,
pub plant_layer: Option<String>,
pub nitrogen_fixer: Option<bool>,
pub dynamic_accumulator: Option<bool>,
pub attracts_pollinators: Option<bool>,
pub attracts_beneficial_insects: Option<bool>,
pub wildlife_value: Option<String>,
pub wildlife_value_de: Option<String>,
pub wildlife_value_en: Option<String>,
pub mulch_plant: Option<bool>,
pub ground_cover_quality: Option<String>,
pub allelopathic: Option<bool>,