Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1

    [BASH] creare un file di lingua

    Sto cercando di creare un file di lingua che contenga in variabili tutte le varie frasi che rappresentano l'output di uno script bash.
    Subito avevo pensato di usare il comando source, in questo modo
    script_italian
    codice:
    #Language: italian
    MSG_ONE="nome programma: $0"
    MSG_TWO="seconda riga: $variabile"
    script.sh
    codice:
    #!/bin/bash
    source script_italian
    echo $MSG_ONE
    variabile="ciao"
    echo $MSG_TWO
    Il problema è che visto che $variabile viene assegnata DOPO alla chiamata source, $MSG_TWO risulta essere "seconda riga: " e non "seconda riga: ciao" come vorrei.
    Non esiste un modo per far si che $variabile in $MSG_TWO non venga sostituito subito durante source ma che rimanga come testo ma che venga sostituito solo dall'echo nello script dopo la sua assegnazione?
    GreyFox (Linux registered user #435102)
    greyfox.imente.org - GreyFox's shots (photo gallery)
    $ cd /pub
    $ more beer

  2. #2
    Ho pensato di fare così ma non mi sembra una gran bella soluzione...
    script_italian
    codice:
    #Language: italian
    MSG_ONE="nome programma: $0"
    MSG_TWO="seconda riga: \$variabile"
    In questo modo $variabile non viene sostituita con il suo valore essendo che \$ scrive "$" nella stringa... poi per ogni volta che appare $MSG_TWO oppure qualunque altra stringa costruita in modo similare farei
    script.sh
    codice:
    #!/bin/bash
    source script_italian
    echo $MSG_ONE
    variabile="ciao"
    echo ${MSG_TWO//'$variabile'/$variabile}
    in modo da sostituire ogni occorrenza di '$variabile' con il suo valore. Però risulta scomodo, anche perchè in alcune stringhe di lingua dovrei operare anche più di una sola sostituzione...
    GreyFox (Linux registered user #435102)
    greyfox.imente.org - GreyFox's shots (photo gallery)
    $ cd /pub
    $ more beer

  3. #3
    Utente di HTML.it
    Registrato dal
    Jul 2005
    Messaggi
    746
    scusa, ma non fai prima con:

    -script_italian:

    codice:
    #Language: italian
    MSG_ONE="nome programma: "
    MSG_TWO="seconda riga: "
    -script.sh:

    codice:
    #!/bin/bash
    source script_italian
    echo $MSG_ONE $0
    variabile="ciao"
    echo $MSG_TWO $variabile
    etc...? Oltre ad essere più leggibile (e a facilitare il lavoro di eventuali
    traduttori), risulta più semplice e veloce.
    Considera che se la variabile è inserita dall'utente, il suo valore dovrà essere quello indicato (è dovrà essere dichiarata nello script), mentre se è costante, ti conviene definirla nel file di traduzione.


  4. #4
    Si ci avevo pensato ma in alcune frasi fra una parola e l'altra ci sono diverse variabili.
    Un esempio stupido:
    codice:
    MSG_EXAMPLE="non puoi $thing_one ma puoi $thing_two anche se non sei root"
    Per rendere questa frase come intendi tu dovrei dividere in 3 parti il messaggio:
    codice:
    echo $PART1 $thing_one $PART2 $thing_two $PART3
    mentre io speravo di cavarmela in una stringa sola
    GreyFox (Linux registered user #435102)
    greyfox.imente.org - GreyFox's shots (photo gallery)
    $ cd /pub
    $ more beer

  5. #5
    Usa printf:
    codice:
    [fredp@kurtz ~] $ printf "Non sei %s ma sei %s\n" Gianni Pino
    Non sei Gianni ma sei Pino

  6. #6
    Giusto! Grande, non ci avevo pensato... metto dei %s nelle stringhe al posto di inserire direttametne le variabili e poi uso delle printf al posto degli echo.
    Grazie mille vortex
    GreyFox (Linux registered user #435102)
    greyfox.imente.org - GreyFox's shots (photo gallery)
    $ cd /pub
    $ more beer

  7. #7

  8. #8
    Domandina sulla printf...
    nel mio programma tutte queste stringhe di lingua verranno precedute da un breve messaggio del tipo "$0 error: " o simili.
    Per questo, in modo da evitare di inserire questa ulteriore stampa ogni volta che devo stampare una stringa, pensavo di adattare una funzione che già avevo print_err().
    Il problema è che, una delle stringhe da inserire al posto di una %s potrebbe contenere degli spazi.
    A questo punto pensavo di inserire questo codice per far si che i parametri siano caricati correttamente racchiusi da "", ma purtroppo non funziona.

    codice:
    function print_msg() {	
    	printf "%s: " "$MSG_MESSAGE" #MSG_MESSAGE sarebbe "error" o "errore" a differenza della lingua
    	local pattern=$1
    	shift
    	printf  "$pattern\n" `for arg in "$@"; do echo \"$arg\"; done`
    }
    GreyFox (Linux registered user #435102)
    greyfox.imente.org - GreyFox's shots (photo gallery)
    $ cd /pub
    $ more beer

  9. #9
    up
    GreyFox (Linux registered user #435102)
    greyfox.imente.org - GreyFox's shots (photo gallery)
    $ cd /pub
    $ more beer

  10. #10
    Utente di HTML.it
    Registrato dal
    Jul 2005
    Messaggi
    746
    così dovrebbe andare:

    codice:
    function print_err() { 
    	printf "%s: %s\n" "${MESG}" "${*}"; 
    }


    invisibile : )

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.