Valutazione discussione:
  • 0 voto(i) - 0 media
  • 1
  • 2
  • 3
  • 4
  • 5
Script traduttore
#1
Ciao Mattia!
Se ad esempio volessi realizzare un traduttore che traduce delle parole in altro parole... si potrebbe fare con uno script php?? Se si, come funzionerebbe in linea di base??

Grazie

Saluti
Cita messaggio
#2
Una versione basilare potrebbe essere quella di avere un elenco di parole con il corrispettivo tradotto e sostituire le parole che hanno una traduzione.
Lo script potrebbe essere così:
Codice PHP:
<?php
$text 
'Questo è il testo da tradurre.'//Assegno a una variabile il testo da tradurre
$trans = array( //Creo l'array con le varie coppie con il testo e la relativa traduzione
    
'il'=>'the',
    
'testo'=>'text'
);
$text strtr($text,$trans); //Sostituisco nel testo le parole traducibili (cioè presenti nell'array delle traduzioni)
unset($trans); //Visto che non mi servono più le traduzioni, le elimino dalla memoria
echo $text//Stampo il nuovo testo tradotto
unset($text); //Elimino dalla memoria il testo
?>
Mattia!
Cita messaggio
#3
(05/07/2011 07:14)Mattia Ha scritto: Una versione basilare potrebbe essere quella di avere un elenco di parole con il corrispettivo tradotto e sostituire le parole che hanno una traduzione.
Lo script potrebbe essere così:
Codice PHP:
<?php
$text 
'Questo è il testo da tradurre.'//Assegno a una variabile il testo da tradurre
$trans = array( //Creo l'array con le varie coppie con il testo e la relativa traduzione
    
'il'=>'the',
    
'testo'=>'text'
);
$text strtr($text,$trans); //Sostituisco nel testo le parole traducibili (cioè presenti nell'array delle traduzioni)
unset($trans); //Visto che non mi servono più le traduzioni, le elimino dalla memoria
echo $text//Stampo il nuovo testo tradotto
unset($text); //Elimino dalla memoria il testo
?>

Ok, ma se per comodità creassi uno script dal quale inserire la parola in una lingua e la corrispondente nell'altra??
Cita messaggio
#4
Non ho capito cosa intendi.
Mattia!
Cita messaggio
#5
Per comodità collegare lo script di traduzione (con alcune parole già inserite) ad un'altra pagina con un form che ti consente di inserire nel traduttore le parole di una lingua e le corrispondenti tradotte nell'altra lingua...mi spiego??
Un pò come se fosse un content management del traduttore...così ogni volta posso aggiungere nuove parole e arricchire il traduttore...
Cita messaggio
#6
Per fare una cosa del genere dovresti salvare le parole in un database o in un file di testo.
Il codice sarà più o meno così:
Codice PHP:
<?php
if(isset($_POST['word']) && is_string($_POST['word']) && trim($_POST['word'])!='' && isset($_POST['translation']) && is_string($_POST['translation']) && trim($_POST['translation'])!=''){ //Controllo che vengano mandate dal form le parole e le relative traduzioni
    /*Qui si deve inserire la parola e la relativa traduzione nel database o nel file di testo*/
}
//Qui sotto stampo il form ("file.php" deve essere il percorso del file
?>
<form action="file.php" method="post">
    <fieldset>
        <p>Parola: <input type="text" name="word" /></p>
        <p>Traduzione: <input type="text" name="translation" /></p>
        <p><input type="submit" value="Invia" /></p>
    </fieldset>
</form> 
Mattia!
Cita messaggio
#7
Ma scusate, perchè dovete creare uno script di traduzione se ne esistono a centinaia sulla rete di professionali e c'è anche Google Translator?
Cita messaggio
#8
Ciao Naroku, la tua domanda è giustissima... ma quello che voglio fare io è un tipo di traduttore diverso dai "classici" che si trovano su web... volevo fare una prova sulla realizzazione di traduzione da un dialetto ad un altro dialetto... è una cosa simpatica e per far si che funzioni...dovrei realizzarlo ad hoc per come stavo cercando di spiegare...
Metti che funziona solo con 2 lingue (i dialetti), lingua 1 e lingua 2. Tramite uno script (es. content management) voglio poter inserire la parola/frase della lingua1 e la corrispondente della lingua2...e arricchire, a mano a mano, il traduttore con frasi e detti...mi spiego?
Cita messaggio
#9
Hai provato la soluzione che ti ho proposto io o hai avuto dei problemi?
Mattia!
Cita messaggio
#10
Ciao Mattia,
scusa la grossa parentesi ma mi ci sono potuto mettere solo adesso...
Allora...cominciamo dall'inizio:
-ho creato la pagina "traduttore.html" con il seguente codice
Codice:
<html>
<head>
<title>Il Traduttore Dal Siciliano al Veneziano</title>
</head>
<form action="translate.php" method="post"></form>
<textarea class="input" name="testo" rows="16" cols="50">Scrivi il testo</textarea>
<input class="input" type="submit" value="Traduci">
<textarea class="input" name="testo" rows="16" cols="50">Scrivi il testo</textarea><br>
</html>
Detta pagina deve interrogare il file "translate.php" che contiene già un archivio di parole tradotte
Codice PHP:
<?php
$text 
'Questo è il testo da tradurre.'//Assegno a una variabile il testo da tradurre
$trans = array( //Creo l'array con le varie coppie con il testo e la relativa traduzione
    
'chi du cugghiuna'=>'ghe sboro',
    
'allicchittarsi'=>'andàr in grìngola',
    
'scarparu'=>'caeghèr',
    
'risu chi piseddi'=>'risi e bisi',
);
$text strtr($text,$trans); //Sostituisco nel testo le parole traducibili (cioè presenti nell'array delle traduzioni)
unset($trans); //Visto che non mi servono più le traduzioni, le elimino dalla memoria
echo $text//Stampo il nuovo testo tradotto
unset($text); //Elimino dalla memoria il testo
?>
e le parole vengono tradotte nell'altra textarea dopo aver cliccato su "Traduci".
Inoltre, come mi hai suggerito tu, ho fatto anche la pagina "edit_trad.html" che serve per "aggiugnere da un pannello a parte le parole e le corrispondenti (con il codice che hai postato su) ma non sono riuscito a collegarlo ad un file txt per memorizzare le parole (ma non si potrebbe collegare direttamente a translate.php oppure si devono collegare entrambi al file di testo??).
Lo scopo sarebbe di collegare i tre file e farli funzionare smilie

Saluti
Cita messaggio
#11
La cosa migliore sarebbe quella di salvare i testi in un database. Quindi, premettendo che il salvataggio avverrà in un database MySQL, al posto del commento "Qui si deve inserire la parola e la relativa traduzione nel database o nel file di testo", puoi inserire questo codice:
Codice PHP:
mysql_connect(/*Dati di connessione al database*/); //Ti conviene fare un file esterno dove effettui la connessione al database e includerlo all'inizio di ogni pagina dove ti serve
if (@mysql_query('REPLACE tabella_traduzioni SET word = "'.mysql_real_escape_string($_POST['word']).'", translation = "'.mysql_real_escape_string($_POST['translation']).'"')) {
    echo 
'<p>Traduzione salvata correttamente.</p>';


La tabella "tabella_traduzioni" avrà i due campi TEXT "word" e "translation". La chiave primaria sarà "word", così, facendo il REPLACE, esegue automaticamente l'aggiornamento se la parola è già presente nel database o l'inserimento non è ancora presente.

Nel file "translate.php" devi sostituire il codice dove crei l'array $trans con questo:
Codice PHP:
$trans = array();
$res = @mysql_query('SELECT * FROM tabella_traduzioni');
if (
$res) {
    while (
$r mysql_fetch_assoc($res)) {
        
$trans[$r['word']] = $r['translation'];
        unset(
$r);
    }
}
unset(
$res); 
Mattia!
Cita messaggio
#12
Ciao Mattia,
credi che l'uso del database mysql sia indispensabile?? Ci sono altre soluzioni??
(10/09/2012 06:25)Mattia Ha scritto: La cosa migliore sarebbe quella di salvare i testi in un database. Quindi, premettendo che il salvataggio avverrà in un database MySQL, al posto del commento "Qui si deve inserire la parola e la relativa traduzione nel database o nel file di testo", puoi inserire questo codice:
Codice PHP:
mysql_connect(/*Dati di connessione al database*/); //Ti conviene fare un file esterno dove effettui la connessione al database e includerlo all'inizio di ogni pagina dove ti serve
if (@mysql_query('REPLACE tabella_traduzioni SET word = "'.mysql_real_escape_string($_POST['word']).'", translation = "'.mysql_real_escape_string($_POST['translation']).'"')) {
    echo 
'<p>Traduzione salvata correttamente.</p>';


La tabella "tabella_traduzioni" avrà i due campi TEXT "word" e "translation". La chiave primaria sarà "word", così, facendo il REPLACE, esegue automaticamente l'aggiornamento se la parola è già presente nel database o l'inserimento non è ancora presente.

Nel file "translate.php" devi sostituire il codice dove crei l'array $trans con questo:
Codice PHP:
$trans = array();
$res = @mysql_query('SELECT * FROM tabella_traduzioni');
if (
$res) {
    while (
$r mysql_fetch_assoc($res)) {
        
$trans[$r['word']] = $r['translation'];
        unset(
$r);
    }
}
unset(
$res); 
Cita messaggio
#13
Se non vuoi creare l'array a mano, devi salvare le traduzioni da qualche parte.
Se non puoi utilizzare un database MySQL, puoi utilizzare un file di testo, ma è molto più difficile da gestire, oppure un database SQLite che puoi interrogare come un normale database, ma è composto da un unico file che sarà presente sul tuo server.
Se vuoi utilizzare SQLite, non devi cambiare molto il codice che ti ho proposto prima. Ecco le funzioni che devi sostituire:
Mattia!
Cita messaggio
#14
prima di fare ciò, però, come creo il database sqlite?? Come lod evo chiamare?? lo devo attivare da qualche parte??
(di sqlite nn ci capisco davvero una cippa)
Cita messaggio
#15
Su AlterVista, dove stai facendo le prove, SQLite dovrebbe essere già attivo senza dover fare nulla.
Per gestire il database SQLite puoi utilizzare Adminer che è un software simile a PhpMyAdmin con le differenze che è formato da un solo file e puoi gestire oltre ai database MySQL anche PostgreSQL, SQLite, MS SQL e Oracle.
Dopo che hai scaricato Adminer, caricalo sul tuo server ed eseguilo via browser. Seleziona la lingua italiana in alto a sinistra, se non è già selezionata, e nell'autenticazione seleziona "SQLite 3" (mi sembra che sia questa la versione presente su AlterVista, ma, se ti dà problemi, prova con la versione 2).
A questo punto puoi creare il database cliccando su "Crea nuovo database", inserisci il nome del database che vuoi creare (possibilmente tutto in minuscolo e senza spazi e altri caratteri strani; per esempio, "traduzioni.db") e premi il pulsante "Salva".
Se tutto va a buon fine, dovresti essere all'interno del database vuoto. Clicca su "Crea tabella" per creare una nuova tabella e inserisci il nome della tabella (se non vuoi modificare lo script che ti ho scritto sopra, puoi inserire "tabella_traduzioni") e più sotto i due campi. Il primo campo sarà "word" di tipo text e il secondo sarà "translation" sempre di tipo text.
Dopo aver creato la tabella bisogna modificarne gli indici per far funzionare correttamente il REPLACE. Quindi devi creare l'indice sulla colonna "word" di tipo UNIQUE.
Con questo hai creato correttamente il database e ti ritroverai il file "traduzioni.db" (o con un altro nome che hai scelto) nella cartella.
Mattia!
Cita messaggio
#16
All'autenticazione, sia se seleziono SQLite 2 che 3, mi da "Estensioni non presenti"... è possibile che sqlite non sia attivo?
Cita messaggio
#17
Su un sito che ho su AlterVista ho utilizzato SQLite e continua a funzionare correttamente. Ho provato anche ad accedere al database di quel sito e crearne uno nuovo tramite Adminer e non ho avuto problemi.
Forse il problema è dovuto al fatto che AlterVista utilizza ancora come default PHP 4 e non PHP 5. Prova a creare un file .htaccess nella root del tuo sito con all'interno il seguente codice:
Codice:
AddHandler av-php5 .php
Mattia!
Cita messaggio
#18
(13/09/2012 06:30)Mattia Ha scritto: Su un sito che ho su AlterVista ho utilizzato SQLite e continua a funzionare correttamente. Ho provato anche ad accedere al database di quel sito e crearne uno nuovo tramite Adminer e non ho avuto problemi.
Forse il problema è dovuto al fatto che AlterVista utilizza ancora come default PHP 4 e non PHP 5. Prova a creare un file .htaccess nella root del tuo sito con all'interno il seguente codice:
Codice:
AddHandler av-php5 .php

Ho fatto il file ed effettivamente adesso entra ma non mi permette comunque di creare il database...in allegat gli stamp:
   
   
Cita messaggio
#19
Prova ad entrare senza inserire il nome del database. Crea il database come ti ho spiegato nel messaggio precedente.
Mattia!
Cita messaggio
#20
Ok, ci sono riuscito!! smilie
Ho sistemato il codice come mi hai detto tu...ma sicuramente c'è qualcosa che non va...riesci a dar eun'occhiata ai files??

Thanks
Cita messaggio
#21
Nel file "traduttore.html" devi chiudere il tag form dopo tutti i campi del form e non prima. Inoltre mancano anche i tag body.
Codice:
<html>
<head>
<title>Il Traduttore Dal Siciliano al Veneziano</title>
</head>
<body>
<form action="translate.php" method="post">
<textarea class="input" name="testo" rows="16" cols="50">Scrivi il testo</textarea>
<input class="input" type="submit" value="Traduci">
<textarea class="input" name="testo" rows="16" cols="50">Scrivi il testo</textarea><br>
</form>
</body>
</html>
Mattia!
Cita messaggio
#22
Grazie, ma se clicco su traduci mi stampa "questo è il testo da tradurre" Sad
Cita messaggio
#23
Dove c'è:
Codice PHP:
$text 'Questo è il testo da tradurre.'//Assegno a una variabile il testo da tradurre 

Devi sostituirlo con:
Codice PHP:
$text = isset($_POST['testo']) && is_string($_POST['testo']) ? $_POST['testo'] : ''//Assegno a una variabile il testo da tradurre 
Mattia!
Cita messaggio
#24
Ma dovrebbe tradurre la parola nell'altro box input della pagina traduttore.html...

p.s. se guardi il file edit_trad.html c'è qualche errore...
Cita messaggio
#25
Per compilare l'altra textarea con la traduzione si può fare in due modi:
  1. trasformi la pagina del form da HTML a PHP, così gestisci sia il form che la traduzione dallo stesso file e riempi la seconda textarea con il testo tradotto;
  2. invece di inviare il form, si effettua una richiesta AJAX che restituisce il testo tradotto che verrà inserito poi in JavaScript nella seconda textarea.

Nel file "edit_trad.html" ci sono problemi, perché contiene codice PHP, ma l'estensione è ".html".
Mattia!
Cita messaggio
#26
Io opterei per la prima opzione...tu che dici??
Ho rinominato edit_trad.php e adesso mi da errore con la parte html... ma essendo fuori dal <? php ?> non dovrebbe dare problemi:
Citazione:Parse error: syntax error, unexpected $end in /membri/aiele/Translator/edit_trad.php on line 17
Cita messaggio
#27
La prima soluzione è quella più semplice. Basta che:
  • inserisci il codice PHP che fa la traduzione all'inizio della pagina con il form;
  • l'action del form deve puntare alla pagina stessa;
  • modifichi l'estensione da ".html" a ".php";
  • elimini la riga di codice dove stampi la variabile $text;
  • la textarea dove deve uscire il risultato diventerà:
    Codice PHP:
    <textarea class="input" rows="16" cols="50"><?php echo htmlentities($text);?></textarea> 

L'errore che ti esce è di sintassi e dovresti pubblicare il codice di quel file per fare in modo che possa aiutarti a risolverlo.
Mattia!
Cita messaggio
#28
Questo è il codice di edit_trd.php:
Codice:
<?php
if(isset($_POST['word']) && is_string($_POST['word']) && trim($_POST['word'])!='' && isset($_POST['translation']) && is_string($_POST['translation']) && trim($_POST['translation'])!=''){ //Controllo che vengano mandate dal form le parole e le relative traduzioni
sqlite_open(/*Dati di connessione al database*/); //Ti conviene fare un file esterno dove effettui la connessione al database e includerlo all'inizio di ogni pagina dove ti serve
if (@sqlite_query('REPLACE tabella_traduzioni SET word = "'.sqlite_escape_string($_POST['word']).'", translation = "'.sqlite_escape_string($_POST['translation']).'"')) {
    echo '<p>Traduzione salvata correttamente.</p>';
//Qui sotto stampo il form ("file.php" deve essere il percorso del file)
}

?>
<html>
<form action="translate.php" method="post">
    <fieldset>
        <p>Parola: <input type="text" name="word" /></p>
        <p>Traduzione: <input type="text" name="translation" /></p>
        <p><input type="submit" value="Invia" /></p>
    </fieldset>
</form></html>
Adesso veniamo ai punti:
1) Il codice php che fa la traduzione, e che metterò in alto nella pagina del form, è quello che c'è già in translate.php??
2) adesso l'action del pulsante e della traduzione punta sulla pagina stessa
3) attendo di capire lo script php per cambiare l'estensione
4 e 5) saranno successivi al punto 3
In ogni caso ho modificato traduttore.html così:
Codice:
<html>
<head>
<title>Il Traduttore Dal Siciliano al Veneziano</title>
</head>
<body>
<form action="translate.php" method="post">
<textarea class="input" name="testo" rows="16" cols="50">Scrivi il testo</textarea></form>
<form action="traduttore.php" method="post">
<input class="input" type="submit" value="Traduci">
<textarea class="input" name="testo" rows="16" cols="50">Scrivi il testo</textarea></form><br>
</body>
</html>
Dimmi se è giusto...

Saluti
Cita messaggio
#29
L'errore del file "edit_trd.php" è che hai dimenticato di chiudere la parentesi del primo if.
Il codice diventa:
Codice PHP:
<?php
if(isset($_POST['word']) && is_string($_POST['word']) && trim($_POST['word'])!='' && isset($_POST['translation']) && is_string($_POST['translation']) && trim($_POST['translation'])!=''){ //Controllo che vengano mandate dal form le parole e le relative traduzioni
    
sqlite_open(/*Dati di connessione al database*/); //Ti conviene fare un file esterno dove effettui la connessione al database e includerlo all'inizio di ogni pagina dove ti serve
    
if (@sqlite_query('REPLACE tabella_traduzioni SET word = "'.sqlite_escape_string($_POST['word']).'", translation = "'.sqlite_escape_string($_POST['translation']).'"')) {
        echo 
'<p>Traduzione salvata correttamente.</p>';
    }
}
?>

Sì, il codice da inserire è quello di "translate.php".
Il form è sbagliato e diventa così (sempre che "traduttore.php" sia il nome del file stesso):
Codice:
<form action="traduttore.php" method="post">
    <textarea class="input" name="testo" rows="16" cols="50">Scrivi il testo</textarea>
    <input class="input" type="submit" value="Traduci">
</form>
<textarea class="input" name="testo" rows="16" cols="50"><?php echo htmlentities($text);?></textarea><br>
Mattia!
Cita messaggio
#30
Quindi, se non ho capito male, traduttore.php viene così:
Codice:
<?php
$text = isset($_POST['testo']) && is_string($_POST['testo']) ? $_POST['testo'] : ''; //Assegno a una variabile il testo da tradurre
$trans = array();
$res = @sqlite_query('SELECT * FROM tabella_traduzioni');
if ($res) {
    while ($r = sqlite_fetch_all($res)) {
        $trans[$r['word']] = $r['translation'];
        unset($r);
    }
}
unset($res);
$text = strtr($text,$trans); //Sostituisco nel testo le parole traducibili (cioè presenti nell'array delle traduzioni)
unset($trans); //Visto che non mi servono più le traduzioni, le elimino dalla memoria
unset($text); //Elimino dalla memoria il testo
?>
<html>
<head>
<title>Il Traduttore Dal Siciliano al Veneziano</title>
</head>
<body>
<form action="traduttore.php" method="post">
    <textarea class="input" name="testo" rows="16" cols="50">Scrivi il testo</textarea>
    <input class="input" type="submit" value="Traduci">
</form>
<textarea class="input" name="testo" rows="16" cols="50"><?php echo htmlentities($text);?></textarea><br>
</body>
</html>
Cita messaggio


Discussioni simili
Discussione Autore Risposte Letto Ultimo messaggio
  Script PHP per testare sicurezza Wifi Chandler 112 223.991 23/04/2018 18:18
Ultimo messaggio: Mattia
  shortlink con script di riconoscimento device Chandler 7 10.011 01/02/2017 16:09
Ultimo messaggio: Chandler
  script per generazione immagine da template Chandler 135 278.139 18/07/2015 08:19
Ultimo messaggio: Mattia
  estrarre script Chandler 4 11.688 22/01/2015 20:06
Ultimo messaggio: Chandler
  Erroe di parsing nell'esecuzione di uno script filippo9639 1 8.157 25/01/2009 22:09
Ultimo messaggio: Mattia
  Problemo con script per importare dati di una tabella su un altro hosting filippo9639 7 20.451 27/12/2008 17:43
Ultimo messaggio: Mattia
  Script Upload Chandler 43 102.225 10/12/2008 16:22
Ultimo messaggio: Mattia
  Errore parziale su script PHP filippo9639 12 47.336 30/11/2008 16:17
Ultimo messaggio: filippo9639
  Problema con script PHP per trasferimento tabelle dati filippo9639 10 32.012 23/11/2008 18:08
Ultimo messaggio: filippo9639
  porzione di Codice PH che invalida script filippo9639 2 6.984 25/10/2008 18:49
Ultimo messaggio: filippo9639

Vai al forum:


Utenti che stanno guardando questa discussione: 1 Ospite(i)