wiki:Stacomi gettext

Utilisation de gettext

notes internes pour les développeurs


retour à la page de démarrage ..


Procédure

# prépare le répertoire du package
 tools::update_pkg_po("C:/workspace/stacomir/pkg/stacomir")
déplacer le fichier po qui est sur la racine dans R
# ce message va renvoyer une erreur dans la mise à jour de l'index des mo
  • double clic sur le fichier po>catalogue> mettre à jour depuis fichier pot".
  • rentrer les nouvelles traductions
  • Fichier> compiler le mo
  • Enregister le fichier mo R-stacomiR_fr_FR.mo qui est dans le répertoire
  • Copier ce fichier vers stacomir/pkg/stacomir/inst/po/fr/LC_MESSAGES/R-stacomiR.mo EN LE RENOMMANT.

Recherches pour archive


téléchargement du logiciel https://www.gnu.org/software/gettext/ ... en fait les routines d'uilisation de po sont dans poedit ci après
Aide : https://cran.r-project.org/doc/manuals/r-release/R-exts.html#Internationalization
https://poedit.net/ ???

Dans R

Utilisation de gettext

Traduction des messages stop, warning et message + tout message encapsulé dans gettext et gettextf.

Outils pour préparer :

tools::xgettext2pot 
res<-tools::xgettext("F:/workspace/stacomir/pkg/stacomir")# extracts the actual calls 
# prépare le répertoire du package
 tools::update_pkg_po("F:/workspace/stacomir/pkg/stacomir")
# en fait crée un répertoire po avec un fichier R-stacomiR.pot
Sys.setenv(LANG = "fr")

Pour aller chercher toutes les instances d'appel à msg j'utilise l'expression régulière qui suit (en cochant la case expression régulière en éclipse)

(get\(\"msg\"\,envir\_stacomi\)\$(.)+(,))
(get\(\"msg\"\,envir\=envir\_stacomi\)\$(.)+(,))

pour exclure la virgule de la fin

(get\(\"msg\"\,envir\=envir\_stacomi\)\$(.)+(?:(?!(,)).))

et pour remplacer l'expression régulière is faut utiliser

gettext($1)

ce qui va ajouter gettext au 1er match de l'expression régulière précédente

Autre expression régulière

(?<=gettext\()(.)+?(?=\))

Positive Lookbehind (?<=gettext\() Assert that the Regex below matches gettext matches the characters gettext literally (case sensitive) \( matches the character ( literally (case sensitive) 1st Capturing Group (.)+? +? Quantifier — Matches between one and unlimited times, as few times as possible, expanding as needed (lazy) A repeated capturing group will only capture the last iteration. Put a capturing group around the repeated group to capture all iterations or use a non-capturing group instead if you're not interested in the data . matches any character (except for line terminators) Positive Lookahead (?=\)) Assert that the Regex below matches \) matches the character ) literally (case sensitive)

L'appel à tools::update_pkg_po("F:/workspace/stacomir/pkg/stacomir") ne prend que les trucs entre quote, pour extraire tout il faut res<-tools::xgettext("F:/workspace/stacomir/pkg/stacomir")

res<-tools::xgettext("F:/workspace/stacomir/pkg/stacomir")
str(res)
#List of 29
# $ F:/workspace/stacomir/pkg/stacomin positive lookbehind. la r/R/Bilan_carlot.r                 :Class 'xgettext'  chr [1:13] "get(\"msg\", envir_stacomi)$Bilan_carlot.1" "get(\"msg\", envir_stacomi)$ref.1" "TRUE" "get(\"msg\", envir_stacomi)$ref.2" ...
# $ F:/workspace/stacomir/pkg/stacomir/R/Bilan_poids_moyen.r            :Class 'xgettext'  chr [1:19] "get(\"msg\", envir_stacomi)$Bilan_poids_moyen.1" "get(\"msg\", envir_stacomi)$Bilan_poids_moyen.2" "get(\"msg\", envir_stacomi)$ref.9" "TRUE" ...
# $ F:/workspace/stacomir/pkg/stacomir/R/Bilan_stades_pigm.r            :Class 'xgettext'  chr [1:6] "get(\"msg\", envir_stacomi)$Bilan_stades_pigm.1" "get(\"msg\", envir_stacomi)$ref.1" "TRUE" "get(\"msg\", envir_stacomi)$ref.5" ...
# $ F:/workspace/stacomir/pkg/stacomir/R/BilanAgedemer.r                :Class 'xgettext'  chr [1:14] "get(\"msg\", envir_stacomi)$BilanAgedemer.1" "get(\"msg\", envir_stacomi)$ref.1" "TRUE" "get(\"msg\", envir_stacomi)$ref.2" ...
# $ F:/workspace/stacomir/pkg/stacomir/R/BilanAnnuels.r                 :Class 'xgettext'  chr [1:11] "get(\"msg\", envir_stacomi)$ref.1" "TRUE" "get(\"msg\", envir_stacomi)$ref.2" "get(\"msg\", envir_stacomi)$ref.3" ...
# $ F:/workspace/stacomir/pkg/stacomir/R/BilanArgentee.r                :Class 'xgettext'  chr [1:12] "get(\"msg\", envir_stacomi)$BilanArgentee.1" "get(\"msg\", envir_stacomi)$ref.1" "TRUE" "get(\"msg\", envir_stacomi)$ref.2" ...
# $ F:/workspace/stacomir/pkg/stacomir/R/BilanEspeces.r                 :Class 'xgettext'  chr [1:8] "get(\"msg\", envir_stacomi)$BilanEspeces.7" "get(\"msg\", envir_stacomi)$ref.1" "TRUE" "get(\"msg\", envir_stacomi)$ref.9" ...
# $ F:/workspace/stacomir/pkg/stacomir/R/BilanFonctionnementDC.r        :Class 'xgettext'  chr [1:23] "get(\"msg\", envir_stacomi)$BilanFonctionnementDC.1" "get(\"msg\", envir_stacomi)$ref.1" "TRUE" "get(\"msg\", envir_stacomi)$ref.5" ...
# $ F:/workspace/stacomir/pkg/stacomir/R/BilanFonctionnementDF.r        :Class 'xgettext'  chr [1:7] "plot.type must be 1,2,3 or 4" "get(\"msg\", envir_stacomi)$BilanFonctionnementDF.7" "bilanFonctionnementDF@df@df_selectionne" "get(\"msg\", envir_stacomi)$BilanFonctionnementDF.6[1]" ...
# $ F:/workspace/stacomir/pkg/stacomir/R/BilanMigration.r               :Class 'xgettext'  chr [1:25] "get(\"msg\", envir_stacomi)$ref.1" "TRUE" "get(\"msg\", envir_stacomi)$ref.2" "get(\"msg\", envir_stacomi)$ref.3" ...
# $ F:/workspace/stacomir/pkg/stacomir/R/BilanMigrationInterAnnuelle.r  :Class 'xgettext'  chr [1:21] "get(\"msg\", envir_stacomi)$ref.1" "TRUE" "get(\"msg\", envir_stacomi)$ref.2" "get(\"msg\", envir_stacomi)$ref.3" ...
# $ F:/workspace/stacomir/pkg/stacomir/R/BilanMigrationMult.r           :Class 'xgettext'  chr [1:22] "get(\"msg\", envir_stacomi)$ref.1" "TRUE" "get(\"msg\", envir_stacomi)$ref.2" "get(\"msg\", envir_stacomi)$ref.3" ...

Comment remplacer toutes les entrées de la base

Hors de leur contexte d'appel, certains messages, notamment la concatenation de plusieurs chaines ne sera pas aisée Il faut trouver tous les funout() et les get("msg",envir_stacomi)$ et les remplacer par gettext("this is the message in get...") Ci dessous des méthodes sont programmées pour récupérer les messages

# message en anglais
assign("lang","English",envir=envir_stacomi)
object=new("RefMsg")
msgfr<-charge_avec_filtre(object,lang='French')
str(msgfr)
#Formal class 'RefMsg' [package "stacomiR"] with 2 slots
#  ..@ messager    :'data.frame':       0 obs. of  0 variables
#Formal class 'data.frame' [package "methods"] with 4 slots
#  .. .. ..@ .Data    : list()
#  .. .. ..@ names    : chr(0) 
#  .. .. ..@ row.names: int(0) 
#  .. .. ..@ .S3Class : chr "data.frame"
#  ..@ messagerlang:'data.frame':       364 obs. of  3 variables:
#  .. ..$ mrl_id    : int [1:364] 1 2 3 4 5 6 7 8 9 10 ...
# .. ..$ mrl_msr_id: int [1:364] 1 2 3 4 5 6 7 8 9 10 ...
#  .. ..$ mrl_text  : chr [1:364] "\"Il faut choisir un dispositif de comptage,cliquez sur valider \"" "\"Il faut choisir un taxon,cliquez sur valider \"" "\"Il faut choisir un stade,cliquez sur valider \"" "\"Il faut choisir un parametre,cliquez sur valider \"" ...
createmessage(object,TRUE)
msg<-get("msg",envir=envir_stacomi)
#$Bilan_stades_pigm.2
#[1] "Bilan des stades pigmentaires\n"
#
#$Bilan_stades_pigm.3
#[1] "BILAN STADES PIGMENTAIRES "

Dans eclipse rechercher toutes les instances de gettext Le script est dans /inst/config/generate_message.r En gros on transforme les messages en anglais puis on va remplacer le code ligne à ligne en l'évaluant. C'est bourrin !!!!!!!!!!

Ensuite il faudra utiliser les lignes de code pour traduire en prenant pour base le fichier Comme on ne peut rien classer il faudra le faire ligne à ligne, peut être à partir de tableurs excel

Il faut modifier les appels à paste() en utilisant la verion de gettextf qui est l'équivalent de stprintf (a utiliser au lieu de gettext) J'apprends enfin comment programmer correctement !

exemples

funout(gettextf("%1.0f lines found for the conversion coefficients\n",nrow(object@coe)))        
#"2 lines found for the conversion coefficients\n"
gettextf("Seasonal trend of %s, from %s to %s",
type_poids,
bilPM@anneedebut@annee_selectionnee,
bilPM@anneefin@annee_selectionnee)
#  "Seasonal trend of dry weigths, from 2009 to 2016"

Fait :

Bilan_carlot.r .... test ... Non
Bilan_poids_moyen ... test ... Non

A faire stacomirtools aussi ! Puis destruction des tables ...

Last modified 8 years ago Last modified on Jun 9, 2017 9:26:57 AM