#!/usr/bin/perl # ************************************************************************ # pour Linux - Windows :encodage (UTF8) | écrit par alain Adelmar * # remd: traducteur de mot, en mode texte (console), anglais->français * # et vice versa, ainsi qu'une option "édit" pour étoffer le dictionnaire.* # Cette version peut aussi traduire un mot (anglais) en tant qu'argument * # et répond sur la même ligne. expl: * # taf append => annexer , ajouter, joindre * # son fichier ressource : dicop_uk-fr (dico de traduction angl:fran) * # Ce script tourne trop bien. Pour updater les dicop_uk-fr => updico.pl * # Ce script tourne sur tout environnement (Linux - Windows - etc) à la * # condition que dicop_uk-fr soit installé dans (le rép courant) ou * # les paths suivants: /home/commun/bin ou dans ~/bin pour Linux * # ou définissez votre propre path ligne 38 * # Requis le module Datefr.pm ou sinon mettre lignes 20,21 en commentaires* # alain adelmar 06/Juillet/2002~14/Dec/2009. version: 2.07 * #************************************************************************* #system("clear"); # facultatif: si vous désirez la date et l'heure en français, # décommenter les lignes suivantes: (avec DateFrench) #use DateFrench; #our $format_affichage = 1; #our $french_date_now = maintenant($format_affichage); use Cwd; my $dir = getcwd; if ($^O =~ /[msys|cygwin|gnu|linux]$/) { $gnus++; print "this is a real gnu OS, congratulation\n"; } elsif ($ENV{"PATH"}=~ /^\//) { $gnus++; print "this is a real gnu OS, congratulation\n"; } @gnul = ("\\", "\/"); # @ds = split(/$gnul[$gnus]/, $d); # $ds = pop @ds; # pour une installation personnelle, mettre le PATH de dicop_uk-fr, mettez le reste dessous en commentaire $pref = '/home/commun/bin/dicop_uk-fr'; # pour une installation locale mettre dans ~/bin #$pref = '/home/alain/bin/dicop_uk-fr'; # pour une installation generale, passer en root puis cree un repertoire /usr/local/taf 0777 # if(-e $pref) { $dico = $pref; } else { $pref = "$dir" . "$gnul[gnus]" . "dicop_uk-fr"; if (-e $pref) { $dico = $pref; } else { die "erreur de path, il est impossible a taf de trouver dicop_uk-fr\nsolution: modifier la ligne 53 de taf ou\ntrouver le et copier le au bon endroit $!"; } } # donc entrer ici la valeur de $dico (expl: $dico = "\.\/dicop_uk-fr";) # sinon placer le ou vous voulez en définissant un path correct dans la ligne suivante # $dico = "remplacer_cette_phrase_par_un_path"; $x = "x*" x 28; $donc = "\n\tdonc\n"; # 1er partie avec argument qui ne traite qu'un seul mot sur une ligne. if($ARGV[0] ne "") { if ($ARGV[0] eq "-v") { print "\ntaf vers: 2.07\n"; exec 'quoi taf'; die "$x\n"; } elsif ($ARGV[0] =~ /^\"|\"$/) { s/^\"()\"$/$1/; $mota = $1; } else { $mota = $ARGV[0]; } $argv = 1; &lire_dico; &anglais_francais; } else { print "\n$x\nVersion longue de taf (sans argument = accés au menu) *\nA noter: Vous auriez pu entrer un mot a traduire en *\nguise d'argument, pensez y la prochaine fois. *\n _ alain Adelmar _ *\n$x\n"; $argv = 0; } # 2eme partie la commande sans argument qui ouvre le menu. print "Bienvenu sur le petit traducteur taf *\n aadelmar\@free.fr *\n$x\n"; MENU: print " _ Anglais-francais(1)\n _ Francais-anlais(2)\n _ Ajouter quelques lignes au dico(3) \.\.\. reponse: "; $trad = ; chomp $trad; &lire_dico; #menu possible de l'application************************** if ($trad <= 1) { print "$donc---- Anglais-francais ----\n\n"; $trad = "af"; &le_mot($mota); &anglais_francais; } elsif ($trad == 2) { print "$donc---- Francais-anglais ----\n"; $trad = "fa"; &le_mot($mota); &francais_anglais($trad); } elsif ($trad >= 3) { print "$donc---- Ajout au Dico perso ----\n"; print "Les lignes que vous ajoutez à votre dico personnel\ndoivent être écritent:\nmot_anglais,mot_français1,mot_francais2,mot_français3|exemple_angl = en_francais\n"; print "(ne laisser pas d'espace entre les mots, juste une virgule)\n"; print "on y va? (o/n)\t"; $trad = "ed"; chomp ($repon = ); &oui_non($repon); &edition; } print "\n$x\n"; print "tchao !!!\n$x\n"; sub anglais_francais { while ($mota ne "quitte"){ foreach $ligne(@traduction) { chomp($ligne); # laisser comme ca car plus complet if ($ligne =~ /^$mota/) { ($line, $exemple)= split(/\|/, $ligne); ($angl, $fr, $fr1, $fr2, $fr3) =split(/,/, $line); print "$angl = $fr\t$fr1\n"; if ($fr2 ne "") { print "$angl = $fr2\t$fr3\n"; } if ($exemple ne "") { print "exemple: $exemple\n"; } } } if ($argv == 0) { &choix; } else { die "$x\n(Pas d'autre mot pour $mota) $!"} } # print "tchao !!!\n"; } sub francais_anglais($trad) { while ($mota ne "quitte"){ foreach $ligne(@traduction) { ($line, $exemple)= split(/\|/, $ligne); ($angl, $fr, $fr1, $fr2, $fr3) =split(/,/, $line); if ($fr =~ /^$mota/) { print "$fr = $angl\n"; } if ($fr1 =~ /^$mota/) { print "$fr1 = $angl\n"; } if ($fr2 =~ /^$mota/) { print "$fr2 = $angl\n"; } if ($fr3 =~ /^$mota/) { print "$fr3 = $angl\n"; } } &choix; } # print "tchao !!!\n$x\n"; } sub edition { while(! oui_non($repon)) { LABEL:print "\nEntrez votre ligne\n"; chomp ($ligne_in = ); ($linei, $exemplei)= split(/\|/, $ligne_in); ($angli, $fri, $fr1i, $fr2i, $fr3i) =split(/,/, $linei); foreach $ligne(@traduction) { ($line, $exemple)= split(/\|/, $ligne); ($angl, $fr, $fr1, $fr2, $fr3) =split(/,/, $line); if ($angl eq $angli|| $fr eq $fri ) { print "cette ligne présente des similitudes avec la ligne:\n"; print "$angl = $fr\t$fr1\t$fr2\t$fr3\t$exemple\n"; print "voulez vous quand même entrer votre ligne dans le dico?\n"; $resp = ; chomp $resp; if ($resp =~ /^n/i) { print "elle ne sera donc pas intégré à votre dico\n"; goto LABEL; } } } $ligne_in = "$ligne_in" . "\n"; push @traduction, $ligne_in; print "on continu? (o/n):\t"; chomp($repon = ); } open(D, ">$dico") or die "Ouverture de dico impossible $!"; print D @traduction; close D or die "fermeture impossible $!"; print "Vos lignes ont été rajouté au dictionnaire de traduction $dico\n"; &choix; } sub choix { print "---------- (quitte) quitte, (menu) menu ou un autre mot:\n"; $mota= ; chomp $mota; if ($mota eq "menu") { goto MENU; } } sub le_mot($mota) { print "entrer votre mot pour le traduire ou (menu) menu ou (quitte) quitter)\n"; chomp ($mota = ); } sub oui_non($repon) { my ($repon) = @_; $repon =~ tr/A-Z/a-z/; if ($repon =~ /^o|y/) { return 0; } elsif ($repon =~ /^n/) { return 1; } else { print "\a"; print "Veuillez repondre par Oui ou par non\n"; chomp ($repon = ); &oui_non($repon); } } sub lire_dico { #lecture du dico****************************************** open DATA, "$dico" or die "Ouverture de dico impossible $!"; @traduction = ; close DATA || die "fermeture impossible $!"; } END; =pod =encoding utf8 =head1 NOM taf - Traducteur de mot Anglais-Francais Francais-Anglais en mode console =head1 SYNOPSIS taf [mot anglais] # Pour une traduction directe sur la meme ligne taf # Pour une ouverture du menu Fra=>Ang, Ang=>Fra, Editeur =head1 DESCRIPTION taf est un systeme de traduction de mot, il gere, cree si il le faut un dictionnaire dans votre systeme. Puis cherchera dedans la corespondance du mot ou les mots qui commence par la chaine que vous avez entrer et affiche leurs traductions. Il a aussi un editeur de dictionnaire de traduction ce qui vous permetra de l'étoffer Il fonctionne sur la base d'un mot et ses traductions sur une même ligne separes par une virgule et accepte aussi un exemple de phrase, separee elle par une barre |. exemple: convert,converti,immobiliser,piller,violer,convertir|convert €=convertir des Euros =head2 APPEL DIRECT en tapant directement taf [mot_a_traduire] il affichera directement les traductions trouvees sur votre dictionnaire de traduction. Si vous n'entrer que quelques lettres apres taf il affichera tout les mots anglais et leurs traductions, tres pratique quand on ne ce souvient plus exactement de l' orthographe. =head2 OUVERTURE COMPLETTE Si vous entrez seulement la commande taf alors un petit menu viendra a la console vous demanant d'entrer un chiffre: 1 pour Anglais-Francais afin de traduire des mots Anglais en Francais 2 pour Francais-Anglais afin de traduire des mot Francais en Anglais 3 pour Editer votre dictionnaire de traduction nous allons voir ci-dessous le cote edition =head3 EDITION Un rapide topo vous explique commant entrer vos traductions. Vous devez entrer le mot Anglais ou l'expression Anglaise suivie d'une virgule sans espace et de vos traductions, toutes séparer par une virgule sans espace. Puis chaque fois que vous avez entre une ligne le programme verifi que le mot n'a pas deja ete traduit ou que les traductions sont inedite. Il vous previent le cas contraire en vous montrant la ligne existante incriminee et vous demande si vous preferer passer cette traduction ou la garder quand meme. A chaque ligne il vous demandera si vous souhaitez continuer, retourner au menu, ou bien quitter. Auquel cas vos ligne seront sauver dans votre dico de traduction qui porte le nom par defaut dicop_uk-fr. =head1 REMARQUE Rien ne vous empeche de creer un dico_verlan-klingon ou dico_argot-cantonais. Ce script m'est tres utile tous les jours et il y a plusieurs facon de s'en servir, decouvrer les par vous meme, seul votre imagination vous freinera. =head1 AUTEUR Adelmar Alain 6 rue de Tunis 33600 Pessac aadelmar@numericable.fr http://perso.numericable.fr/aadelmar =cut