PDA

Visualizza la versione completa : [bash] sostituire variabili


Neon87
13-11-2006, 20:55
ciao!

Ho un piccolo problema spero facilmente risolvibile con uno scriptino...

Ho un file sorgente in python con un programma che dovrei tradurre in francese e inglese...
Pensavo di sostituire semplicemente le frasi con una variabile (esemio trad1 trad2 ecc ecc) in modo poi da scrivere 3 file a parte con il valore assunto dalle variabili...

quindi nel file sorgente con scritto:

echo "ciao"

mettero'

echo $trad1;

e scrivero' altri 3 file con il valore nella lingua giusta...
es

francese => trad1="salut"
inglese => trad1="hi"

ora come faccio a sostuire con uno script la frase alla variabile giusta in modo da avere alla fine 3 file per 3 lingue?

Spero si sia capito ma questa sera sono veramente stanco... :berto: :berto:

grazie!

PinguinoGoloso
13-11-2006, 22:11
Basta valorizzare le variabili all'inizio dello script, facendogli leggere il file delle traduzioni con

source ./path/file_traduzione.dat
Ovviamente puoi variare il file usando a sua volta una variabile con la lingua desiderata.

Neon87
13-11-2006, 22:50
grazie!

pero' in questo modo avrei 3 file ...
uno di base e 3 con le lingue... io vorrei sostituire direttamente nel file base con il codice e fare in modo di distribuire un solo file...

fattibile in questo modo?

grazie mille della risposta!

PinguinoGoloso
13-11-2006, 22:56
Cio, tutte le lingue e lo script nel file dello script stesso ?
Potresti usare un case - switch ...

Neon87
13-11-2006, 23:10
una specie di #DEFINE in c...

praticamente fare una sostituzione di massa delle variabili contenenti la stringa della lingua desiderate direttamente nel file sorgente...

tipo sostituire la stringa "Attendere prego..." con $trad1

e poi fare 1 file di testo contenente

$trad1 => "wait please"

e un'altro $trad1 => "attender"

e poi con questo script sostituire al file sorgente automaticamente tutte le variabili $trad* con quelle contenute dentro al file lingua... in modo da avere 3 file sorgente in 3 lingue diverse e non un file binario e 3 file lingua...

un po' un casotto da spiegare ma spero si capisca...

grazie!

Mutato
13-11-2006, 23:27
In questo mondo decade l'uso delle variabili, tanto vale che al loro posto ci metti dei marker, tipo al posto di $trad1 ##trad1## cosi` eviti di avere dei conflitti.

Quindi il tuo file sorgente assumera` l'aspetto:



if pippo
print ##trad1##
else
print ##trad2##
if


poi crei i tuoi file lingua



##trad1##::ciao
##trad2##::casa




##trad1##::hello
##trad2##::home



e quindi lo script bash per le traduzioni



#!/bin/bash

SRC=$(cat $1)
LAN=$2

IFS="\n"
for i in $(cat $LAN); do
LAB=$(echo $i | awk -F:: '{print $1}')
TRA=$(echo $i | awk -F:: '{print $2}')
echo $SRC | sed s/$LAB/$TRA/g
done


Quindi ammettento che il tuoi script si chiami sor.py e i file di lingua IT.txt EN.txt etc., mentre lo script bash traduttore.sh


traduttore.sh sor.py EN.txt > script-EN.py

Una cosa cosi` che puoi raffinare a piacere. Ciao.

Neon87
14-11-2006, 17:51
ti ringrazio tantissimo era proprio questo che cercavo! :zizi: :zizi:

mi ci metto subito dietro!

grazie ancora!

Neon87
14-11-2006, 18:29
mi da un errore...

neon@debian:~/ktraduttore$ ./traduttore.sh sor.py IT.txt > sor.it.py
sed: espressione -e #1, carattere 11: comando `s' non terminato

levando IFS="\n" non mi da piu' l'errore ma l'output sbagliato...

avete qualche idea su come risolvere?

Neon87
15-11-2006, 20:06
nada ho provato di nuovo ma non riesco proprio a capire dove sia l'errore... avete idee?

Mutato
16-11-2006, 20:58
Prova e definire IFS cosi`:


IFS="
"

Lo script modificato:



#!/bin/bash

SRC=$(cat $1)
LAN=$2

IFS="
"
for i in $(cat $LAN); do
LAB=$(echo $i | awk -F:: '{print $1}')
TRA=$(echo $i | awk -F:: '{print $2}')
SRC=$(echo $SRC | sed -e "s/${LAB}/${TRA}/g")
done
echo $SRC

Loading