#!/usr/bin/perl # ************************************************************************ # for Linux and UNIX-Like | made by alain Adelmar * # remd: petit logiciel de traduction de mot simple anglais->français * # et vice verca ainsi qu'une option edit pour etoffer le dico. * # Cette version peut aussi traduit un mot (anglais) en tant qu'argument * # et repond sur une ligne. expl: taf append => continuer * # son fichier resource : dico_uk-fr (dico perso de quelques kilos) * # Ce script tourne trop bien. Pour updater les dico_uk-fr => updico.pl * # Ce script tourne sur tout environement (Linux - Windows - etc) à la * # condition que dico_uk-fr soit installé dans (le répértoire courant) ou * # les paths suivants: /home/common/bin ou ./bin pour Linux * # ou définissez votre propre path ligne 38 * # Requis le module Datefr.pm sinon mettre lignes 20 et 21 en commentaires* # alain adelmar 06/Juillet/2002~09/Mai/2006. version: 2.04 * #************************************************************************* #system("clear"); #use Datefr; #our $opt = 3; #our $mod_affichage = 5; #our $fd = maintenant($mod_affichage); use Cwd; my $dir = getcwd; if ($ENV{"MACHTYPE"}=~ /[msys|cygwin|gnu]$/) { $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; $pref = '/home/common/bin/dico_uk-fr'; if(-e $pref) { $dico = $pref; } else { $pref = "$dir" . "$gnul[gnus]" . "dico_uk-fr"; if (-e $pref) { $dico = $pref; } else { die "erreur de path, il est impossible a taf de trouver dico_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 = "\.\/dico_uk-fr";) # sinon placer le ou vous voulez en definissant 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: 1.05\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 LABELMENU; } } } $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;