Forum di Matriz
Script traduttore - Versione stampabile

+- Forum di Matriz (https://www.matriz.it/forum)
+-- Forum: Programmazione Web (https://www.matriz.it/forum/forum-26.html)
+--- Forum: PHP e altri linguaggi lato server (https://www.matriz.it/forum/forum-27.html)
+--- Discussione: Script traduttore (/thread-330.html)

Pagine: 1 2 3


Script traduttore - Chandler - 05/07/2011

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


RE: Script traduttore - Mattia - 05/07/2011

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
?>



RE: Script traduttore - Chandler - 07/07/2011

(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??


RE: Script traduttore - Mattia - 08/07/2011

Non ho capito cosa intendi.


RE: Script traduttore - Chandler - 08/07/2011

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...


RE: Script traduttore - Mattia - 11/07/2011

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> 



RE: Script traduttore - Naroku95 - 31/10/2011

Ma scusate, perchè dovete creare uno script di traduzione se ne esistono a centinaia sulla rete di professionali e c'è anche Google Translator?



RE: Script traduttore - Chandler - 11/03/2012

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?


RE: Script traduttore - Mattia - 11/03/2012

Hai provato la soluzione che ti ho proposto io o hai avuto dei problemi?


RE: Script traduttore - Chandler - 09/09/2012

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


RE: Script traduttore - Mattia - 10/09/2012

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); 



RE: Script traduttore - Chandler - 10/09/2012

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); 



RE: Script traduttore - Mattia - 11/09/2012

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:


RE: Script traduttore - Chandler - 11/09/2012

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)


RE: Script traduttore - Mattia - 12/09/2012

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.


RE: Script traduttore - Chandler - 12/09/2012

All'autenticazione, sia se seleziono SQLite 2 che 3, mi da "Estensioni non presenti"... è possibile che sqlite non sia attivo?


RE: Script traduttore - Mattia - 13/09/2012

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



RE: Script traduttore - Chandler - 14/09/2012

(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:
   
   


RE: Script traduttore - Mattia - 14/09/2012

Prova ad entrare senza inserire il nome del database. Crea il database come ti ho spiegato nel messaggio precedente.


RE: Script traduttore - Chandler - 16/09/2012

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


RE: Script traduttore - Mattia - 17/09/2012

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>



RE: Script traduttore - Chandler - 18/09/2012

Grazie, ma se clicco su traduci mi stampa "questo è il testo da tradurre" Sad


RE: Script traduttore - Mattia - 18/09/2012

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 



RE: Script traduttore - Chandler - 18/09/2012

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...


RE: Script traduttore - Mattia - 18/09/2012

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".


RE: Script traduttore - Chandler - 19/09/2012

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



RE: Script traduttore - Mattia - 19/09/2012

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.


RE: Script traduttore - Chandler - 20/09/2012

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


RE: Script traduttore - Mattia - 20/09/2012

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>



RE: Script traduttore - Chandler - 20/09/2012

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>