- E N C O N S T R U C T I O N
Au moment où je suis passé j'ai pris une photo des vignettes courantes que j'ai recopiées en local dans -> https://github.com/ChristianWia/vignettes/tree/main/vignettes
j'ai référencé le début de mes investigations dans -> Rdatatable/data.table#6221 (comment)
les fichiers résulats se trouvent dans -> https://github.com/ChristianWia/vignettes
Je suis parti du fichier -> datatable-intro.Rmd (il fallait bien commencer)
Recopier datatable-intro.Rmd en datatable-intro-fr.Rmd pour commencer le traitement
Les outils sont issus de -> https://github.com/mondeja/mdpo
md2po pour générer les .pot & .po à partir du .Rmd de travail
Command:
md2po datatable-intro-fr.Rmd --quiet --save --po-filepath e:/datatable-intro-fr.po
L'utilisation de md2po extrait ce qu'il y a entre les parties de code. La découpe faite par l'outil est assez fine. Elle suit la structure du paragraphe original. Les parties à traduire sont relativement petites (1 à 3 phrases en général) ce qui est plus agréable que d'avoir à traduire des gros blocs de texte.
Ajouter le header Poedit au début du .po pour préparer le fichier à Poedit :
msgid "" msgstr "" "Project-Id-Version: cluster 2.1.6\n" "POT-Creation-Date: 2021-08-19 20:27\n" "PO-Revision-Date: 2024-07-27 14:59+0200\n" "Last-Translator: Christian Wiat [email protected]\n" "Language-Team: none\n" "Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" "X-Generator: Poedit 2.4.2\n"
Passer le fichier sous Poedit.
enlever la troncature des lignes (à la colonne 79 chez moi) dans Poedit Préférences > Avancés , pour avoir des lignes continues.
Le fichier .po est utilisable dans Poedit après quelques adaptations de l'entête
une fois satisfait on recolle les morceaux avec l'outil po2md à partir du fichier initial .Rmd et de ce qu'il y a dans le .po
Command:
po2md e:/datatable-intro-fr.Rmd --wrapwidth 0 --pofiles e:/datatable-intro-fr.po --save e:/datatable-intro-fr2.Rmd
ce qui donne le fichier datatable-intro-fr2.Rmd
je vérifie mon travail en ouvrant datatable-intro-fr2.Rmd dans R studio et en passant knitr pour avoir un joli datatable-intro-fr2.html dans le navigateur.
Zut des fautes : ==> rmarkdown::render('E:/datatable-intro-fr2.Rmd', encoding = 'UTF-8');
processing file: datatable-intro-fr2.Rmd
|.. | 3% [unnamed-chunk-1]
Quitting from lines at lines 73-81 [unnamed-chunk-1] (datatable-intro-fr2.Rmd)
Error in fread()
:
! impossible de trouver la fonction "fread"
Exécution arrêtée
Ca correspond à des sections r pas fermées:
options(width = 100L)
Elles correspondent soit au format ```r soit au {r avec paramètres. Il n'y en a que quelques unes et elles peuvent être rattrappées manuellement. Pour cela ouvrir en parallele dans Rstudio le fichier source d'origine datatable-intro-fr.Rmd (le directeur) et suivre les sections de datatable-intro-fr2.Rmd en se repérant aux inclusions de code.
Vérifiez bien l'entête du fichier datatable-intro-fr2.Rmd, les indentations... Elle doit être similaire à ceci:
---
title: "Introduction to data.table"
date: "`r Sys.Date()`"
output:
markdown::html_format
vignette: >
%\VignetteIndexEntry{Introduction to data.table}
%\VignetteEngine{knitr::knitr}
\usepackage[utf8]{inputenc}
---
```{r, echo=FALSE, message=FALSE, warning=FALSE}
require(data.table)
knitr::opts_chunk$set(
comment = "#",
error = FALSE,
tidy = FALSE,
cache = FALSE,
collapse = TRUE
)
.old.th = setDTthreads(1)
S'il n'y a pas de fautes de génération on peut déjà avoir un aperçu dans la fenetre Viewer de Rstudio
Parcourir le texte. Il peut y avoir des problèmes d'indentation du texte (présence d'un char TAB avant le texte):
flights["XYZ"]
# Returns:
# origin year month day dep_time sched_dep_time dep_delay arr_time sched_arr_time arr_delay carrier flight tailnum ...
# 1: XYZ NA NA NA NA NA NA NA NA NA NA NA NA ...
c'est a dire décalé de 3 char dans le source, mais a généré ceci (les # ont perdu leur indentation) :
flights["XYZ"]
# Returns:
# origin year month day dep_time sched_dep_time dep_delay arr_time sched_arr_time arr_delay carrier flight tailnum ...
# 1: XYZ NA NA NA NA NA NA NA NA NA NA NA NA ...
qu'il faut reprendre manuellement en :
flights["XYZ"]
# Returns:
# origin year month day dep_time sched_dep_time dep_delay arr_time sched_arr_time arr_delay carrier flight tailnum ...
# 1: XYZ NA NA NA NA NA NA NA NA NA NA NA NA ...
Chercher tous les ```{r et repérer ceux qui ne sont pas fermés par } et avancer avec le bouton Next :
On voit par exemple plusieurs fois que :
options(width = 100L)
n'est pas fermé et doit être corrigé (suivre le directeur) en
options(width = 100L)
ou autre chose:
ans <- flights[, c("arr_delay", "dep_delay")]
head(ans)
ou autre chose :
select_cols = c("arr_delay", "dep_delay")
flights[ , ..select_cols]
Suivre le fichier directeur pour cela.
Vous pouvez utiliser la méthode décrite dans -> Rdatatable/data.table#installation ou bien passer par devtools
library(devtools)
install_github("Rdatatable/data.table")
Un peu comme le code R appelle les messages traduits des fichiers .po , il faudrait une vignette "skeleton" qui appelle les messages traduits pour chacune des vignettes ...-fr.Rmd ...-es.Rmd etc...
Ou on ignore complètement la mécanique des fichiers .po et on traduit manuellement et directement les blocs de texte qui se trouvent entre les inclusions de code R dans le fichier .Rmd - c'est plus simple mais on ne bénéficie plus des fonctions de Poedit.
Le produit -fr.RMD est ici un produit secondaire du -fr.po . C'est à dire qu'il n'existe que si ce dernier est défini. L'inconvénient avec le temps, et surtout parce que ça va plus vite, est que l'on risque de corriger directement le produit -fr.Rmd en oubliant de mettre à jour le -fr.po
Dans le cas ci-dessous le texte doit être repris dans le -fr.Rmd manuellement (n'apparait pas dans le fichier .po) pour être traduit en FR sinon le graphe reste avec le texte anglais. Chunk initial :
{r group_lm, results = 'hide', fig.cap="A histogram depicting the distribution of fitted coefficients. It is vaguely bell-shaped and concentrated around -.2"}
# Overall coefficient for comparison
overall_coef = Pitching[ , coef(lm(ERA ~ W))['W']]
# use the .N > 20 filter to exclude teams with few observations
Pitching[ , if (.N > 20L) .(w_coef = coef(lm(ERA ~ W))['W']), by = teamID
][ , hist(w_coef, 20L, las = 1L,
xlab = 'Fitted Coefficient on W',
ylab = 'Number of Teams', col = 'darkgreen',
main = 'Team-Level Distribution\nWin Coefficients on ERA')]
abline(v = overall_coef, lty = 2L, col = 'red')
deviendra :
{r group_lm, results = 'hide', fig.cap="Histogramme décrivant la distribution des coefficients ajustés. La courbe représente à peut près une cloche centrée sur -0,2"}
# Overall coefficient for comparison
overall_coef = Pitching[ , coef(lm(ERA ~ W))['W']]
# use the .N > 20 filter to exclude teams with few observations
Pitching[ , if (.N > 20L) .(w_coef = coef(lm(ERA ~ W))['W']), by = teamID
][ , hist(w_coef, 20L, las = 1L,
xlab = 'Coefficient ajusté sur W',
ylab = 'Nombre d\'équipes', col = 'darkgreen',
main = 'Distribution du niveau des équipes\nCoefficients Win sur ERA')]
abline(v = overall_coef, lty = 2L, col = 'red')
N'oubliez pas de protéger les apostrophes avec un catactère backslash \ .
Ou bien également:
{r sd_for_lm, cache = FALSE, fig.cap="Fit OLS coefficient on W, various specifications, depicted as bars with distinct colors."}
# this generates a list of the 2^k possible extra variables
# for models of the form ERA ~ G + (...)
extra_var = c('yearID', 'teamID', 'G', 'L')
models = unlist(
lapply(0L:length(extra_var), combn, x = extra_var, simplify = FALSE),
recursive = FALSE
)
# here are 16 visually distinct colors, taken from the list of 20 here:
# https://sashat.me/2017/01/11/list-of-20-simple-distinct-colors/
col16 = c('#e6194b', '#3cb44b', '#ffe119', '#0082c8',
'#f58231', '#911eb4', '#46f0f0', '#f032e6',
'#d2f53c', '#fabebe', '#008080', '#e6beff',
'#aa6e28', '#fffac8', '#800000', '#aaffc3')
par(oma = c(2, 0, 0, 0))
lm_coef = sapply(models, function(rhs) {
# using ERA ~ . and data = .SD, then varying which
# columns are included in .SD allows us to perform this
# iteration over 16 models succinctly.
# coef(.)['W'] extracts the W coefficient from each model fit
Pitching[ , coef(lm(ERA ~ ., data = .SD))['W'], .SDcols = c('W', rhs)]
})
barplot(lm_coef, names.arg = sapply(models, paste, collapse = '/'),
main = 'Wins Coefficient\nWith Various Covariates',
col = col16, las = 2L, cex.names = 0.8)
qui donnera :
{r sd_for_lm, cache = FALSE, fig.cap="Ajustement du coefficient OLS sur W, diverses spécifications, décrites par les barres de couleur différente."}
# this generates a list of the 2^k possible extra variables
# for models of the form ERA ~ G + (...)
extra_var = c('yearID', 'teamID', 'G', 'L')
models = unlist(
lapply(0L:length(extra_var), combn, x = extra_var, simplify = FALSE),
recursive = FALSE
)
# here are 16 visually distinct colors, taken from the list of 20 here:
# https://sashat.me/2017/01/11/list-of-20-simple-distinct-colors/
col16 = c('#e6194b', '#3cb44b', '#ffe119', '#0082c8',
'#f58231', '#911eb4', '#46f0f0', '#f032e6',
'#d2f53c', '#fabebe', '#008080', '#e6beff',
'#aa6e28', '#fffac8', '#800000', '#aaffc3')
par(oma = c(2, 0, 0, 0))
lm_coef = sapply(models, function(rhs) {
# using ERA ~ . and data = .SD, then varying which
# columns are included in .SD allows us to perform this
# iteration over 16 models succinctly.
# coef(.)['W'] extracts the W coefficient from each model fit
Pitching[ , coef(lm(ERA ~ ., data = .SD))['W'], .SDcols = c('W', rhs)]
})
barplot(lm_coef, names.arg = sapply(models, paste, collapse = '/'),
main = 'Coefficient Wins \navec diverses covariables',
col = col16, las = 2L, cex.names = 0.8)
Si on part du principe que la vignette traduite est clonée sur la vignette EN (même YAML, même squelette), certains elements sont néanmoins à prendre en compte.
1 vignettes qui n'accèdent pas à des ressources communes : no pb, seule la vignette .Rmd est à traduire l'emplacement de la vignette est libre (une fois que l'on aura statué l'arborescence des vignettes traduites)
2 vignette qui accede à des ressources communes : Ex: datatable-sd-usage.Rmd qui accède au contenu des répertoires ./css et ./plots Dans ce cas la vignette traduite doit se situer parmis les autres vignettes pour bénéficier de la même arborescence.
2.1 accès au CSS : Le CSS est partagé entre les vignettes pour le menu (actuellement). Il est independant de la locale mais peut etre pas toujours, si on doit différencier les scripts LTR et RTL
2.2 accès aux images ou autres medias :
2.2.1 médias indépendants de la locale : Par exemple des image où il n'y a pas de texte anglais. no pb - on laisse les transclusions anglaises existantes
2.2.2 medias dépendants de la locale : C'est le cas des schémas, des architectures, des interfaces, des flux, des tableurs... où figure du texte EN. De plus si le .Rmd décrit ce qu'il y a sur l'image il faut assurer la cohérence.
2.2.2.1 le .Rmd ne décrit pas ce qu'il y a sur l'image no pb on garde l'image EN
2.2.2.2 le .Rmd décrit ce qu'il y a sur l'image
2.2.2.2.1 soit on garde l'image anglaise : Dans ce cas, si le .Rmd décrit ce qu'il y a sur l'image, le texte traduit doit reprendre les termes anglais pour la cohérence.
2.2.2.2.2 soit on crée un image locale (*) : Dans ce cas l'image, si le .Rmd décrit ce qu'il y a sur l'image le .Rmd doivent avoir un texte traduit pour la cohérence.
(*) Je crois qu'il est possible d'agir sur le texte contenu pour modifier les images .svg
Jai actuellement un pb Windows lors du recollage (.. peut etre pas vous, selon les plateformes). L'issue -> mondeja/md-ulb-pwrap#7 est acceptée par l'auteur donc ... wait and see. J'ai pris sa bibliothèque à la version juste n-1 ce qui m'oblige a corriger à la main quelques cas exotiques (fameuse question du ```r et du {r ) pour pouvoir passer.
Il faut savoir que rien n'est encore défini (juillet 2024), ni au niveau de la méthode adoptée, des fichiers à fournir, de l'arborescence, du nom des fichiers, de la version de laquelle partir, ...