<!DOCTYPE html>

Translation

Translation

Colin Fay

2023-03-21

knitr::opts_chunk$set(eval = FALSE)

Si c’est nécessaire, se connecter à la base de données en suivant les instructions du Readme.Rmd

# Chargement des packages
pkgload::load_all(attach_testthat = FALSE)
library(dplyr)
library(here)

# Connexion à la base si nécessaire
session <- new.env()
connect(session)

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 respecté partout, sinon la traduction ne pourra pas être effectuée correctement dans l’application.

Pour le front-end

Pour l’interface utilisateur, l’application combine les fichiers csv contenus dans le dossier inst/ et des tables contenues dans la base de données PostGres.

Tous ces fichiers/tables 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 de données directement

Si la requête SQL pour récupérer les tables suivantes doit changer, alors ces fonctions sont à mettre à jour dans R/utils_helpers.R. Sinon, il n’y a rien à faire côté R lors d’ajout de traductions 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

Fichiers à compléter à la main
  • inst/translation_help.csv : contient la traduction pour les bulles d’aide. Les bulles d’aide sont les bulles qui s’affichent lors du passage de la souris sur un élément (?).
    • Lire le csv avec un séparateur virgule , et avec l’option “Formater les champs entre guillemets comme texte”
    • Le texte dans les cases de langues peut s’écire avec une syntaxe markdown pour mettre en forme le texte
    • Enregistrer le csv avec un séparateur virgule ,
  • inst/translation_iucn.csv : contient les traductions des status IUCN.
    • Lire le csv avec un séparateur virgule , et avec l’option “Formater les champs entre guillemets comme texte”
    • Enregistrer le csv avec un séparateur virgule ,
  • inst/translation.csv : contient tous les autres éléments traduisibles de l’interface utilisateur.
    • Lire le csv avec un séparateur virgule , et avec l’option “Formater les champs entre guillemets comme texte”
    • Enregistrer le csv avec un séparateur virgule ,

Ces fichiers partagent la même structure. Ces derniers doivent posséder a 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.

NB: Dans le cas de inst/translation.csv, la première colonne est ‘DESCRIPTION’. Elle comporte une description plus détaillée de la ligne en question.

Vous pouvez vérifier l’intégrité du csv à l’aide de la fonction check_translation_csv():

translation_help <- check_translation_csv(here::here("inst/translation_help.csv"))
head(translation_help)
translation_iucn <- check_translation_csv(here::here("inst/translation_iucn.csv"))
head(translation_iucn)
translation <- check_translation_csv(here::here("inst/translation.csv"))
head(translation)

Ajouter une nouvelle langue

Ajouter une nouvelle langue doit se faire aux emplacements suivants:

Fichiers à modifier

Dans les fichiers manuellement mis à jour:

  • inst/translation_help.csv

  • inst/translation_iucn.csv

  • inst/translation.csv

Ajouter une nouvelle colonne à droite dont le titre correspond à l’abbréviation de la nouvelle langue par exemple es pour l’espagnol et compléter chaque entrée avec la traduction.

Fonctions 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 langue est es, ajouter <option value="en">001f1ea001f1f8 Espanol</option>. Le code unicode s’obtient en utilisant l’émoji et stringi::stri_escape_unicode("🇪🇸").

Notes pour les dévelopeurs

Comment créer un nouvel élément “traductible” dans l’UI

  • La traduction est assurée par le module JS i18n et la fonction with_i18() dans l’app
with_i18(
  "Text de base",
  "text_de_base"
)

Va créer <span data-i18n="text_de_base">Text de base</span>.

  • L’élément Text de base est affiché si i18n plante
  • L’élément data-i18n="text_de_base" correspond à la clé d’entrée dans le data.frame de traduction, i.e. la valeur dans la colonne entry.

Schématiquement, lorsque le JavaScript va traduire la page, il va aller chercher pour chaque tag l’entrée data-i18n, en tirer la valeur, et aller chercher la traduction correspondante.

Par exemple, si nous traduisons en “fr”, la localisation fait (en JavaScript) l’action suivante

df_traduction %>%
  filter(entry == "text_de_base") %>%
  pull(fr)

Ajouter une bulle d’aide traduisible

Sur un bouton

tags$span(
  w3_hover_button(...), # bulle pour un bouton
  w3_help_button(
    "Select a species",
    "species_modal_help" # repertorié dans "entry" 
  )
)

Sur un titre

h4(
  with_i18("Catch and bycatch at sea", "[html]map-bycatch"),
  w3_help_button(
    "Select a species",
    "catch_bycatch_help"
  )
)

Comment créer un nouvel élément “traductible” dans le server

Soit la traduction existe dans la base de données

Si vous êtes dans une chaine d’opérations qui s’effectue dans la base de données (avant un collect()), vous pouvez utiliser la fonction diadesatlas.translate() qui est incluse dans la base. C’est bien une fonction SQL incluse dans la base PostGIS et non pas une fonction R.
Dans R, cela se traduit par un mutate() de la colonne à traduire comme ceci:

# lg <- 'fr'
db %>%
  mutate(basin_name = diadesatlas.translate(basin_name, !!lg)) %>% 
  collect()
Soit la traduction n’est pas dans la base

La traduction doit donc exister dans le csv de traduction.
Dans ce cas, nous utilisons la fonction R de notre package get_translation_entry()

get_translation_entry(entry = 'hsi_ggplot', lg = 'fr')
  • L’élément entry = 'hsi_ggplot' correspond à la clé d’entrée dans le data.frame de traduction, i.e. la valeur dans la colonne entry.