<!DOCTYPE html>

Translation

Translation

Colin Fay

2022-04-21

knitr::opts_chunk$set(eval = FALSE)
pkgload::load_all(attach_testthat = FALSE)
session <- new.env()
connect(session)
library(dplyr)

Comment est organisée la traduction

Note importante : Pensez à être bien vigilant sur l’harmonisation des code-langues. En d’autres termes, si l’on ajoute une langue avec le code es, ce code doit être strictement respécté partout, sinon la traduction ne pourra pas être effectuée correctement dans l’application.

Pour le front-end

Pour l’interface utilisateur, l’application met ensemble des fichiers CSV, contenus dans le dossier inst/ et des tables contenues dans la base de données PostGre. Certains de ces fichiers sont automatiquement générés, certains se modifient à la main.

Tous ces fichiers contiennent au moins 5 colonnes:

  • entry : la clé d’entrée dans le front (pour i18n)
  • en : la traduction en anglais
  • fr : la traduction en français
  • es : la traduction en espagnol
  • pt : la traduction en portugais
Lus dans la base
  • abundance_level
translation_abundance_level(session)

=> Cette fonction est à mettre à jour dans R/utils_helpers.R

  • species : contient les traductions pour les éléments de niveau d’abondance.
translation_species(session)

=> Cette fonction est à mettre à jour dans R/utils_helpers.R

  • v_ecosystemic_services
translation_v_ecosystemic_services(session)

=> Cette fonction est à mettre à jour dans R/utils_helpers.R

Pour les “help bubble”

Les help bubbles sont les éléments d’aide lors du passage de la souris sur un élément (?). ents.

Ces contenus sont dans le second onglet du Google Sheet de traduction, et sont ensuite compilés dans inst/translation_help.csv, via le code ci-dessous, à relancer en cas de changement.

unlink("inst/translation_help.csv")

library(googlesheets4)
sheet_url <- readline("Enter the sheet url: ")
translation <- read_sheet(sheet_url, sheet = "help_bubbles")

translation <- translation %>%
  mutate(
    en = coalesce(en, contenu_markdown),
    fr = coalesce(fr, contenu_markdown),
    pt = coalesce(pt, contenu_markdown),
    es = coalesce(es, contenu_markdown)
  ) %>%
  mutate_at(
    vars(en, fr, pt, es), function(x) {
      purrr::map_chr(x, commonmark::markdown_html)
    }
  ) %>%
  select(-contenu_markdown)

translation %>%
  readr::write_csv("inst/translation_help.csv")

translation
Fichiers générés automatiquement
  • translation_iucn.csv : contient les traductions pour status IUCN. Se génère via le code suivant mais devra être mis dans la base.
# TODO : get the translation inside the DB
# On utilise ici la description trouvée sur
# https://uicn.fr/liste-rouge-mondiale/
desc <- strsplit(
  "Éteinte (EX), Éteinte à l’état sauvage (EW), En danger critique (CR), En danger (EN), Vulnérable (VU), Quasi menacée (NT), Préoccupation mineure (LC), Données insuffisantes (DD), Non évaluée (NE)",
  split = ", "
)[[1]]

french_iucn <- data.frame(
  fr_vals = gsub(
    "([^\\(]+) \\(([^\\(]+)\\)",
    "\\1,\\2",
    desc
  )
) %>%
  tidyr::separate(
    fr_vals,
    into = c("fr", "entry"), sep = ","
  )

en_iucn <- DBI::dbGetQuery(
  get_con(session),
  "SELECT distinct iucn_level_code AS entry,iucn_level_name AS en FROM v_iucn"
)

en_iucn %>%
  dplyr::full_join(french_iucn) %>%
  mutate(
    es = en,
    pt = en
  ) %>%
  readr::write_csv("inst/translation_iucn.csv")
Fichier à compléter à la main

IMPORTANT Merci de centraliser dans le Google Sheet.

  • On va lire le fichier Google Sheet de traduction.
library(googlesheets4)
sheet_url <- readline("Enter the sheet url: ")
translation <- read_sheet(sheet_url)

translation$DESCRIPTION <- NULL
translation <- translation %>%
  mutate(
    en = coalesce(en, entry),
    fr = coalesce(fr, en),
    pt = coalesce(pt, en),
    es = coalesce(es, en)
  )
translation

Vérifier le dataframe au besoin. Ce dernier doit posséder à minima :

  • Une première colonne nommée ‘entry’
  • Une seconde colonne nommée ‘en’
  • Une troisisème colonne nommée ‘fr’
  • Une quatrième colonne nommée ‘es’
  • Une cinquième colonne nommée ‘pt’
  • PAS DE COLONNES VIDES SUR LA DROITE, pensez à l’anti-sélectionner au besoin
readr::write_csv(
  translation,
  "inst/translation.csv"
)

Vous pouvez vérifier l’intégrité du csv :

output <- check_translation_csv("inst/translation.csv")
head(output)

Ajouter une nouvelle langue

Ajouter une nouvelle langue doit se faire aux emplacements suivants:

Help bubbles

  • À ajouter dans le Google Sheet, puis regénérer translation_help.csv avec le code suivant :
unlink("inst/translation_help.csv")

library(googlesheets4)
sheet_url <- readline("Enter the sheet url: ")
translation <- read_sheet(sheet_url, sheet = "help_bubbles")

translation %>%
  mutate(
    en = coalesce(en, contenu_markdown),
    fr = coalesce(fr, contenu_markdown),
    pt = coalesce(pt, contenu_markdown),
    es = coalesce(es, contenu_markdown),
    # Nouvelle langue
    xyz = coalesce(xyz, contenu_markdown)
  ) %>%
  mutate_at(
    vars(en, fr, pt, es, xyz), function(x) {
      purrr::map_chr(x, commonmark::markdown_html)
    }
  ) %>%
  select(-contenu_markdown) %>%
  readr::write_csv("inst/translation_help.csv")

Data

  • Fichier Google Sheet, ajouter une nouvelle colonne à droite (exemple es)

  • translation_iucn.csv : dans le code de génération du dessus, il faudra créer un nouveau data.frame, avec les traductions.

Note : ces traductions devront à termes être intégrées à la base

es_iucn <- data.frame(
  entry = c("EX", "EW", "CR", "EN", "VU", "NT", "LC", "DD", "NE"),
  es = c("", "", "", "", "", "", "", "", "")
)

puis mettre à jour le code du début de ce Rmd.

en_iucn %>%
  dplyr::full_join(french_iucn) %>%
  dplyr::full_join(es_iucn) %>%
  readr::write_csv("inst/translation_iucn.csv")

Fonction bdd

Ces fonctions sont dans R/utils_helpers.R

Les fonctions qui utilisent la traduction dans la bdd sont les suivantes :

  • translation_abundance_level() : il faudra ajouter une partie au SQL type diadesatlas.translate(abundance_level_interpretation_short, ‘es’) AS es

  • translation_species() : il faudra ajouter une partie au SQL type diadesatlas.translate(english_name, ‘es’) AS es

  • translation_v_ecosystemic_services() pour chaque sous requête SQL, il faudra ajouter une partie au SQL type diadesatlas.translate(subcategory_name, ‘es’) as es

Côté code de l’application

  • Si disponible, ajouter le langage dans get_dt_lg() , à vérifier sur https://cdn.datatables.net/plug-ins/1.10.11/i18n/

  • Dans R/app_ui.R, ajouter une entrée pour le sélecteur de langue. Si votre entrée de laangue est es, ajouter <option value=“en”>