diff --git a/r_app/90_CI_report_with_kpis_agronomic_support.Rmd b/r_app/90_CI_report_with_kpis_agronomic_support.Rmd index 9513e0c..57f240d 100644 --- a/r_app/90_CI_report_with_kpis_agronomic_support.Rmd +++ b/r_app/90_CI_report_with_kpis_agronomic_support.Rmd @@ -8,7 +8,7 @@ params: borders: FALSE ci_plot_type: "both" colorblind_friendly: TRUE - lang: "es" + lang: "en" facet_by_season: FALSE x_axis_unit: "days" output: @@ -503,12 +503,13 @@ t <- function(key) { if (key %in% names(tr)) { txt <- glue(tr[key], .envir = parent.frame()) txt <- gsub("\n", " \n", txt) - return(enc2utf8(as.character(txt))) - } else if (key == "" | is.na(key)) { + } else if (is.na(key)) { + return(t("NA")) + } else if (key == "") { return("") } else { - return(paste0("[", key, "]")) + return(paste0(key)) } } ``` @@ -538,7 +539,7 @@ if (exists("summary_tables") && !is.null(summary_tables) && length(summary_table # 1. Uniformity insights - group by interpretation if (!is.null(summary_tables$uniformity) && nrow(summary_tables$uniformity) > 0) { - cat(t("field_unif"), "\n\n") + cat("\n", t("field_unif")) uniformity_counts <- summary_tables$uniformity %>% dplyr::select(interpretation, count = field_count) @@ -546,14 +547,14 @@ if (exists("summary_tables") && !is.null(summary_tables) && length(summary_table status <- uniformity_counts$interpretation[i] count <- uniformity_counts$count[i] if (!is.na(status) && !is.na(count) && count > 0) { - cat("-", t("unif_status"), "\n\n") + cat(" -", t("unif_status")) } } } # 2. Area change insights - group by interpretation if (!is.null(summary_tables$area_change) && nrow(summary_tables$area_change) > 0) { - cat(t("field_area"), "\n\n") + cat("\n\n", t("field_area")) area_counts <- summary_tables$area_change %>% dplyr::select(interpretation, count = field_count) @@ -561,14 +562,14 @@ if (exists("summary_tables") && !is.null(summary_tables) && length(summary_table status <- area_counts$interpretation[i] count <- area_counts$count[i] if (!is.na(status) && !is.na(count) && count > 0) { - cat("-", t("area_status"), "\n\n") + cat(" -", t("area_status")) } } } # 3. Growth trend insights - group by trend_interpretation if (!is.null(summary_tables$growth_decline) && nrow(summary_tables$growth_decline) > 0) { - cat(t("growth_trend"), "\n\n") + cat("\n\n", t("growth_trend")) growth_counts <- summary_tables$growth_decline %>% dplyr::select(trend_interpretation, count = field_count) @@ -576,14 +577,14 @@ if (exists("summary_tables") && !is.null(summary_tables) && length(summary_table trend <- growth_counts$trend_interpretation[i] count <- growth_counts$count[i] if (!is.na(trend) && !is.na(count) && count > 0) { - cat("-", t("trend_status"), "\n\n") + cat(" -", t("trend_status")) } } } # 4. Patchiness insights - group by patchiness_risk if (!is.null(summary_tables$patchiness) && nrow(summary_tables$patchiness) > 0) { - cat(t("patch_risk"), "\n\n") + cat("\n\n", t("patch_risk")) patchiness_counts <- summary_tables$patchiness %>% dplyr::select(patchiness_risk, count = field_count) @@ -591,14 +592,14 @@ if (exists("summary_tables") && !is.null(summary_tables) && length(summary_table risk <- patchiness_counts$patchiness_risk[i] count <- patchiness_counts$count[i] if (!is.na(risk) && !is.na(count) && count > 0) { - cat("-", t("patch_status"), "\n\n") + cat(" -", t("patch_status")) } } } # 5. Total fields analyzed total_fields <- sum(summary_tables$uniformity$field_count, na.rm = TRUE) - cat(t("tot_fields_analyzed")) + cat("\n\n", t("tot_fields_analyzed")) } else { cat(t("kpi_na")) @@ -1455,14 +1456,14 @@ tryCatch({ if (nrow(field_kpi) > 0) { # Format KPIs as compact single line (no interpretations, just values) kpi_parts <- c( - sprintf("**CV:** %.2f", field_kpi$CV), - sprintf("**Mean CI:** %.2f", field_kpi$Mean_CI) + sprintf("**%s:** %.2f", t("cv_value"), field_kpi$CV), + sprintf("**%s:** %.2f", t("mean_ci"), field_kpi$Mean_CI) ) # Add Weekly_CI_Change if available (note: capital C and I) if (!is.null(field_kpi$Weekly_CI_Change) && !is.na(field_kpi$Weekly_CI_Change)) { change_sign <- ifelse(field_kpi$Weekly_CI_Change >= 0, "+", "") - kpi_parts <- c(kpi_parts, sprintf("**Δ CI:** %s%.2f", change_sign, field_kpi$Weekly_CI_Change)) + kpi_parts <- c(kpi_parts, sprintf("**Δ%s:** %s%.2f", t("CI"), change_sign, field_kpi$Weekly_CI_Change)) } # Compact trend display with symbols @@ -1474,17 +1475,17 @@ tryCatch({ grepl("Strong decline|Severe", field_kpi$Trend_Interpretation, ignore.case = TRUE) ~ "↓↓", TRUE ~ field_kpi$Trend_Interpretation ) - kpi_parts <- c(kpi_parts, sprintf("**Trend:** %s", trend_compact)) + kpi_parts <- c(kpi_parts, sprintf("**%s:** %s", t("Trend"), trend_compact)) if (!is.na(field_kpi$TCH_Forecasted) && field_kpi$TCH_Forecasted > 0) { - kpi_parts <- c(kpi_parts, sprintf("**Yield:** %.1f t/ha", field_kpi$TCH_Forecasted)) + kpi_parts <- c(kpi_parts, sprintf("**%s:** %.1f t/ha", t("Yield"), field_kpi$TCH_Forecasted)) } kpi_parts <- c( kpi_parts, - sprintf("**Gap:** %.0f", field_kpi$Gap_Score), - sprintf("**Patchiness:** %s", field_kpi$Patchiness_Risk), - sprintf("**Decline:** %s", field_kpi$Decline_Severity) + sprintf("**%s:** %.0f%%", t("Gaps"), field_kpi$Gap_Score), + sprintf("**%s:** %s", t("Patchiness"), t(field_kpi$Patchiness_Risk)), + sprintf("**%s:** %s", t("Decline"), t(field_kpi$Decline_Severity)) ) cat(paste(kpi_parts, collapse = " | "), "\n\n") # Double newline for markdown paragraph break @@ -1667,86 +1668,74 @@ img_path <- ifelse(file.exists(target_img), target_img, "CI_graph_example.png") ```
-![`r t("ci_caption")`](`r img_path`) +![`r t("ci_caption")`](`r img_path`){width=4in}
`r t("sec_iii_1")` - - `r t("kpi_i")` - - `r t("kpi_i_metric")` - - `r t("kpi_i_calc")` - - `r t("kpi_categories")` - - `r t("kpi_i_excellent")` - - `r t("kpi_i_good")` - - `r t("kpi_i_accept")` - - `r t("kpi_i_poor")` - - `r t("kpi_i_verypoor")` - - `r t("kpi_i_why")` - - - `r t("kpi_ii")` - - `r t("kpi_ii_calc")` - - `r t("kpi_categories")` - - `r t("kpi_ii_rapid")` - - `r t("kpi_ii_positive")` - - `r t("kpi_ii_stable")` - - `r t("kpi_ii_declining")` - - `r t("kpi_ii_rapid_decline")` - - `r t("kpi_ii_why")` - - - `r t("kpi_iii")` - - `r t("kpi_iii_applies")` - - `r t("kpi_iii_method")` - - `r t("kpi_iii_input")` - - `r t("kpi_iii_output")` - - `r t("kpi_iii_why")` - - - `r t("kpi_iv")` - - `r t("kpi_iv_calc")` - - `r t("kpi_categories")` - - `r t("kpi_iv_strong")` - - `r t("kpi_iv_weak")` - - `r t("kpi_iv_sli_decline")` - - `r t("kpi_iv_mod_decline")` - - `r t("kpi_iv_str_decline")` - - `r t("kpi_iv_why")` - - - `r t("kpi_v")` - - `r t("kpi_v_met1")` - - `r t("kpi_v_form")` - - `r t("kpi_v_range")` - - `r t("kpi_v_interpretation")` - - `r t("kpi_v_met2")` - - `r t("kpi_v_met2_range")` - - `r t("kpi_v_thresh")` - - `r t("kpi_v_risk")` - - `r t("kpi_v_minimal")` - - `r t("kpi_v_low")` - - `r t("kpi_v_medium")` - - `r t("kpi_v_high")` - - `r t("kpi_v_why")` + - `r t("kpi_i")` + - `r t("kpi_i_metric")` + - `r t("kpi_i_calc")` + - `r t("kpi_categories")` + - `r t("kpi_i_excellent")` + - `r t("kpi_i_good")` + - `r t("kpi_i_accept")` + - `r t("kpi_i_poor")` + - `r t("kpi_i_verypoor")` + - `r t("kpi_i_why")` - - `r t("unif_v_patch")` - - `r t("unif")` - - `r t("patch")` + - `r t("kpi_ii")` + - `r t("kpi_ii_calc")` + - `r t("kpi_categories")` + - `r t("kpi_ii_rapid")` + - `r t("kpi_ii_positive")` + - `r t("kpi_ii_stable")` + - `r t("kpi_ii_declining")` + - `r t("kpi_ii_rapid_decline")` + - `r t("kpi_ii_why")` + + - `r t("kpi_iii")` + - `r t("kpi_iii_applies")` + - `r t("kpi_iii_method")` + - `r t("kpi_iii_input")` + - `r t("kpi_iii_output")` + - `r t("kpi_iii_why")` + + - `r t("kpi_iv")` + - `r t("kpi_iv_calc")` + - `r t("kpi_categories")` + - `r t("kpi_iv_strong")` + - `r t("kpi_iv_weak")` + - `r t("kpi_iv_sli_decline")` + - `r t("kpi_iv_mod_decline")` + - `r t("kpi_iv_str_decline")` + - `r t("kpi_iv_why")` + + - `r t("kpi_v")` + - `r t("kpi_v_met1")` + - `r t("kpi_v_form")` + - `r t("kpi_v_range")` + - `r t("kpi_v_interpretation")` + - `r t("kpi_v_met2")` + - `r t("kpi_v_met2_range")` + - `r t("kpi_v_thresh")` + - `r t("kpi_v_risk")` + - `r t("kpi_v_minimal")` + - `r t("kpi_v_low")` + - `r t("kpi_v_medium")` + - `r t("kpi_v_high")` + - `r t("kpi_v_why")` - - `r t("practical_example")` - - - `r t("field_a")` - - `r t("field_b")` - - `r t("scouting")` - - - `r t("kpi_vi")` - - `r t("kpi_vi_calc")` - - `r t("kpi_vi_identify")` - - `r t("kpi_vi_calculates")` - - `r t("kpi_vi_example")` - - `r t("kpi_vi_scores")` - - `r t("kpi_vi_0")` - - `r t("kpi_vi_10")` - - `r t("kpi_vi_25")` - - `r t("kpi_vi_why")` + - `r t("kpi_vi")` + - `r t("kpi_vi_calc")` + - `r t("kpi_vi_identify")` + - `r t("kpi_vi_calculates")` + - `r t("kpi_vi_example")` + - `r t("kpi_vi_scores")` + - `r t("kpi_vi_0")` + - `r t("kpi_vi_10")` + - `r t("kpi_vi_25")` + - `r t("kpi_vi_why")` `r t("sec_iii_2_to_6")` @@ -1754,6 +1743,18 @@ img_path <- ifelse(file.exists(target_img), target_img, "CI_graph_example.png") `r t("hist_benchmark")` +`r t("unif_v_patch")` + +- `r t("unif")` +- `r t("patch")` + +`r t("practical_example")` + +- `r t("field_a")` +- `r t("field_b")` + +`r t("scouting")` + \newpage `r t("metadata")` diff --git a/r_app/translations/translations.xlsx b/r_app/translations/translations.xlsx index 46e0f88..4050caf 100644 Binary files a/r_app/translations/translations.xlsx and b/r_app/translations/translations.xlsx differ