Re: adaptation moulinette windows pour linux avec python

Top Page

Reply to this message
Author: Frederic Bressy
Date:  
To: ML Guilde
Subject: Re: adaptation moulinette windows pour linux avec python
Bonjour

j'avais envoyé ce mail il y a qq temps

finalement un collègue m'a aidé pour le bash et j'ai arrangé avec
traduction etc. Voila le script en fichier joint

ça peut servir

ah il faut utiliser zenity

et des fichiers de traduction pour les langues
un exemple du fichier de message français est joint  fr.po
et jointe aussi la lib i18n-lib.sh (trouvé sur internet mais je n'arrive
plus à remettre la main sur le site)
et voila la commande pour faire les fichiers de traduction (ici l'espagnol)

msgfmt -o rand.sh.mo es.po
puis
cp -p rand.sh.mo "...VOTRECHEMIN.."/locale/es/LC_MESSAGES/Equipe.sh.mo


--

Atschaw Fred

------------------------------------------
!           Frederic Bressy              !
!                                        !
!        www.crazygrimpeur.com           !
------------------------------------------


Le souvenir des bienfaits reçus est fragile, comparé à l'ingratitude (Léonard de Vinci)


Le 23/02/2018 à 00:38, Frederic Bressy a écrit :
> Bonsoir
>
> J'ai un soucis avec une application web (html et javascript) qui doit
> fonctionner sous Windows ou Linux voir Mac
>
> La partie web ne pose pas de problème mais en amont une petite
> moulinette fonctionne sous Windows mais pas sous Linux.
>
>
> Les précédents développeurs du projet n'avaient pas eu le soucis car
> ils avaient sûrement un Linux particulier
>
>
> Sous Windows un .bat lance un script php qui va lire l'arborescence du
> dossier que l'utilisateur a donné,  puis écrit un json contenant
> l'arborescence lue, en remplaçant certains caractères des fichiers et
> dossiers.
>
> C'est ce fichier json qui va servir à l'application final.
>
>
> Seulement sous Linux, le .command lance ce même script php (il a un
> nom différent) et ça plante car il ne trouve pas php, contrairement au
> cas sous Windows ou php.exe est fourni dans un sous dossier de
> l'application avec les lib qui vont bien.
>
>
> Et comme un admin client nous a précisé que les utilisateurs sous
> Linux n'avaient pas php en place et que l'on pouvait pas refaire
> l'installation pour tout les postes (soucis de temps, logistique car
> certains utilisateurs sont au fin fond de la jungle ou dans le désert,
> etc), bref je vais me rabattre sur Python puisque cela semble faire
> partie de l'installation défaut de leur Linux (Ubuntu 16.x).
>
>
> Seulement je ne connais pas trop Python.
>
>
> Donc si une bonne âme pouvait m'aider soit en me faisant une ébauche
> de programme python ou soit me donner des liens.
>
>
> Je joins le .bat et le script php de la version windows dans le zip
> "pour_envoi_version_windows", le zip du json et le zip de la version
> linux.
>
> le dernier zip contient le .command old, le .command récent que l'on a
> commencé à modifier (rajout zenity, translation de langue).
>
>
> par avance merci
>
>
> Cordialement
>
> ------------------------------------------
> !           Frederic Bressy              !
> !                                        !
> !        www.crazygrimpeur.com           !
> ------------------------------------------
>
> Le souvenir des bienfaits reçus est fragile, comparé à l'ingratitude
> (Léonard de Vinci)
>



#!/bin/bash

#--------------------------------------
# Declaration des variables, etc
#--------------------------------------

#chemin actuel
path="${0%/*}"
export TEXTDOMAIN=Equipe.sh
export TEXTDOMAINDIR=$path"/locale"
#chemin du fichier sortie json
tmpout=$path"/../jstmp/json.json"
FIRST="true"
#librairie de translation pour les langues
I18NLIB=$path"/lib/i18n-lib.sh"

#--------------------------------------
# Test si librairie accessible
#--------------------------------------
if [[ -f $I18NLIB ]]
then
        . $I18NLIB
else
        echo "ERROR - $I18NLIB NOT FOUND"
        exit 1
fi
#--------------------------------------
# Test si fichier de sortie existe
#--------------------------------------


if [[ -f $tmpout ]]
then
        echo ""
else
        echo "ERROR - $tmpout NOT FOUND"
        exit 1
fi
#--------------------------------------
# Suite de fonctions
#--------------------------------------


#--------------------------------------
# fonction elimine point des dossiers
#--------------------------------------
TransformeDirPoint() {
    Temp="$1"
    Temp1=$(echo "$Temp" | sed -r "s/\.//g" )
    echo -ne "$Temp1"
}


#--------------------------------------
# fonction transforme accent
#--------------------------------------
TransformeAccent() {
    Temp="$1"
    Temp1=$(echo "$Temp" | iconv -f utf8 -t ascii//TRANSLIT)
    echo -ne "$Temp1"
}


#--------------------------------------
# fonction transforme speciaux
#--------------------------------------
TransformeSpeciaux() {
    Temp="$1"
    Temp1=$(echo $Temp | sed -r "s/#|[|&|\/|\\|\#|,|+|(|)|@|^|$|~|%| |\'|;|*|?|<|>|{|}|]|#//g" )
    echo -ne "$Temp1"
}


#--------------------------------------
# fonction transforme en totalité pour un dossier
#--------------------------------------
TransformeToutDir() {
    Temp="$1"
    Temp1=$(TransformeAccent "$Temp")
    Temp2=$(TransformeSpeciaux "$Temp1")
    Temp3=$(TransformeDirPoint "$Temp2")
    echo -ne "$Temp3"
}


#--------------------------------------
# fonction transforme en totalité pour un fichier
#--------------------------------------
TransformeToutFic() {
    Temp="$1"
    Temp1=$(TransformeAccent "$Temp")
    Temp2=$(TransformeSpeciaux "$Temp1")
    echo -ne "$Temp2"
}


#--------------------------------------
# fonction lecture arborescence
#--------------------------------------
ListDir() {
    cd "$1"
    DIR=`basename "$PWD"`
    DIR_TO_WRITE="\"$DIR\":"
    [[ "$FIRST" = "true" ]] && DIR_TO_WRITE="var arbo_dg="  # Entête initiale
    FIRST="false"
    FINAL="true"
    for F in *
    do
        [[ -d $F ]] && FINAL="false"
    done
    if [[ $FINAL = "true" ]]
    then
        [[ "$DIR_TO_WRITE" != "var arbo_dg=" ]] && DIR_TO_WRITE=$(TransformeToutDir "$DIR_TO_WRITE")
        echo -ne "$DIR_TO_WRITE["
        SEP1=""
        for FIC in *
        do
            FIC_TO_WRITE=$(TransformeToutFic "$FIC")
            echo -ne "$SEP1\"$FIC_TO_WRITE\""
            SEP1=","
        done
        echo -ne "],"
    else
         [[ "$DIR_TO_WRITE" != "var arbo_dg=" ]] && DIR_TO_WRITE=$(TransformeToutDir "$DIR_TO_WRITE")
        echo -ne "$DIR_TO_WRITE{"
        SEP1=""
        for FIC in *
        do
            [[ -d $FIC ]] && ListDir "$FIC"
            [[ -f $FIC ]] && FIC_TO_WRITE=$(TransformeToutFic "$FIC") && echo -ne "$SEP1\"$FIC_TO_WRITE\""; SEP1=","
        done
        echo -ne "},"
    fi
    cd ..
}


#--------------------------------------
## ALLOW USER TO SET LANG PREFERENCE
## assume lang and country code follows
#--------------------------------------
#if [[ "$1" = "-lang" ]]
#then
        #export LC_ALL="$2_$3.UTF-8"
#    export LANG="$2_$3.UTF-8"
#    export LC_MESSAGES="$2_$3.UTF-8"
#fi
#echo $LANG
#(4) 


#export TEXTDOMAINDIR="${0%/*}"/locale

#--------------------------------------
# Debut du script
#--------------------------------------
echo ""
echo echo "$(i18n_display "msg0001")"
echo ""
#echo $TEXTDOMAINDIR
echo "Parametre LANG - $LANG !"
echo "Parametre LANGUAGE - $LANGUAGE !"
echo ""

#--------------------------------------
# Ouvre un navigateur et demande choix de dossier
#--------------------------------------
if dossierSortie=$(zenity --file-selection --title="$(i18n_display "msg0002")" --text="$(i18n_display "msg0003")" --directory 2>/dev/null)
then
    cool="CONTINU";
    tTest=$?


else
    cool="STOP";
    tTest=$?
fi


#--------------------------------------
# Lance la lecture de l'arborescence et création du fichier
#--------------------------------------
cool2="STOP"
case $cool in
    "CONTINU")
        echo "\"${dossierSortie}\" est selectionné ";
        # todo traduire ligne dessus
        (
        ( ListDir "$dossierSortie" ) | sed -e 's/,}/}/g' -e '$s/,$//' > $tmpout ; RetourArbo=$?
        echo "$(i18n_display "msg0006")" ; sleep 1
        echo "80" ; sleep 1
        ) |
        zenity --progress \
          --title="$(i18n_display "msg0004")" \
          --text="$(i18n_display "msg0005")" \
          --percentage=0 \
          --pulsate \
          --no-cancel 2>/dev/null


        #echo "retour:$?";
        if [ "$?" = -1 ] 
        then
          zenity --error \
            --text="$(i18n_display "msg0007")" 2>/dev/null; cool2="STOP";sleep 1;
        else
          zenity --info \
            --text="$(i18n_display "msg0008")" 2>/dev/null; cool2="CONTINU";sleep 1;
        fi;;


    "STOP")
        zenity --error \
                --text="$(i18n_display "msg0009")" 2>/dev/null; cool2="STOP"; sleep 1;;


    -1)
        zenity --error \
                --text="$(i18n_display "msg0007")" 2>/dev/null; cool2="STOP"; sleep 1;;


esac

#echo $cool2
sleep 1

if [ "$cool2" = "CONTINU" ]
then
    echo ""
    echo echo "$(i18n_display "msg0010")"
    echo ""
    #--------------------------------------
    # Lance le navigateur sur l'index
    #--------------------------------------
    firefox "$path/../index.html" &
else
    echo ""
    echo echo "$(i18n_display "msg0011")"
    echo ""
fi


echo ""
echo echo "$(i18n_display "msg0012")"
echo ""

sleep 1

msgid "msg0001"
msgstr "Démarrage du programme de création du json"
msgid "msg0002"
msgstr "Veuillez selectionner un dossier"
msgid "msg0003"
msgstr "Choissisez un dossier quelconque"
msgid "msg0004"
msgstr "Fabrication du fichier json"
msgid "msg0005"
msgstr "Lecture de l'arborescence..."
msgid "msg0006"
msgstr "# Ecriture du fichier"
msgid "msg0007"
msgstr "Fabrication du fichier json annulée, une erreur est survenue !!!!!"
msgid "msg0008"
msgstr "Fabrication du fichier json fini."
msgid "msg0009"
msgstr "Fabrication du fichier json annulée, aucun dossier selectionné !!!!!"
msgid "msg0010"
msgstr "La page web va s'ouvrir, patientez"
msgid "msg0011"
msgstr "Suite à l'erreur survenue, la page web ne va pas s'ouvrir !!!!!"
msgid "msg0012"
msgstr "Fin du programme de création du json"