Flash MX 2004: creare un dizionario

Di: DJ_Jedi | 26/09/2020 18:45:14
buongiorno, quest'estate io e un griuppo di fan vogliamo tradurre Harry Potter 7. molte parole però sono diverse dall'inglese all'italiano e quindi volevo creare un dizionario con tutte le modifiche conosciute. io ho le parole in un xml compilato da me in questo modo:
<diz>
<parola>
<vocabolo></vocabolo>
<traduzione></traduzione>
</parola>
</diz>
qualcuno mi sa aiutare??

Risposte



In pratica vorreste creare un dizionario in flash.
Scrivo:
Action e mi da come risultato Azione?
Ma solo inerente a Harry Potter7?

Di: LuxStudio | 26/09/2020 18:45:14


Forse ho capito io...
Vuoi fare un traduttore di tutti i termini che sono propri di Harry Potter e quindi non si trovano su un comune vocabolario, come ad esempio:
Hufflepuff => Tassorosso
Se ti serve una cosa così è semplice da realizzare (forse sarà un po’ lenta se i vocaboli sono molti ma non credo).
Se invece vuoi realizzare un traduttore automatico ti sconsiglio di utilizzare Flash.

Di: Professore | 26/09/2020 18:45:14


Ho preparato questo...
Prima di usarlo devi creare due caselle di testo e un pulsante.
La prima casella di testo è di tipo "Testo di Input" e ha come nome istanza "inputTxt".
La seconda casella di testo è un "Testo Dinamico" e ha come nome "outputBtn".
Il pulsante si chiama "TranslateBtn".
Lo script che segue va inserito in un fotogramma, se il tuo file XML non si chiama "Dizionario.xm" puoi cambiare il nome che trovi al primo rigo.
// ----------------------------
var nomeFile:String = "Dizionario.xm";
var inglese:Array = new Array();
var italiano:Array = new Array();
var caricaDati:XML = new XML();
caricaDati.ignoreWhite = true;
caricaDati.onLoad = function() {
var total:Number = this.firstChild.childNodes.length;
for (i=0; i<total; i++) {
inglese[i] = this.firstChild.childNodes[i].firstChild.firstChild;
italiano[i] = this.firstChild.childNodes[i].firstChild.nextSibling.firstChild;
}
TranslateBtn.onPress = function() {
trovato = false;
for (i=0; i<inglese.length; i++) {
if (inputTxt.text.toLowerCase() == String(inglese[i]).toLowerCase()) {
outputTxt.text = italiano[i];
trovato = true;
break;
}
}
if (!trovato) {
outputTxt.text = "--- Non disponibile ---";
}
};
};
caricaDati.load(nomeFile);
// --------------------------

Di: Professore | 26/09/2020 18:45:14


Tanto anche se si fa in Flash bisogna sempre dirgli che se quella parola è quella allora la traduzione sarà... lavoro lunghino
Se il file è un xml tantovale tradurlo parola per parola si risparmia tempo

Di: LuxStudio | 26/09/2020 18:45:14


vi ringrazio per le risposte.
il problema è che io non so usare flash e quindi non so creare caselle di testo dinamico.
su una video guida avevo visto che selezionva una zona cliccava col destro e cliccava su azioni e selezionava testo dinamico. il problema e che se io creo un rettangolo e ci clicco sopra con il destro non mi da azioni. potreste aiutarmi? e scusate se vi chiedo cose idiote.
se volessi aggiungere anche le parole normali posso utilizzando sempre quello script?

Di: DJ_Jedi | 26/09/2020 18:45:14


ho creato tutti i campi, era facile bastava guardare un attimo flash. quando però faccio una prova scrivo ad esempio bats nel campo di input, non appare niente nella casella di traduzione.
ho copiato lo script che mi ha fornito Professore, e ho seguito le sue istruzioni per creare le varie parti ma non va.
io non conosco l'action script non è che voi potete controllare se è adatto allo schema xml che ho dato nel primo post?
grazie

Di: DJ_Jedi | 26/09/2020 18:45:14


Allora per tradurre una parola ovviamente hai bisogno del file da tradurre e il file tradotto, che poi flash farà da tramite. Flash non traduce in automatico se non ha parole tradotte. Bisognerebbe fare un database con tutti i corrispondenti delle parole e allora flash abbinera ogni parola alla traduzione.

Di: LuxStudio | 26/09/2020 18:46:14


se leggi il mio messaggio nell'xml è presente sia la parola inglese sia la traduzione.
il problema è che non scrive la traduzione a video.
come già detto non conosco l'action script non posso correggere lo script datomi da professore. quindi se qualcuno di voi mi aiuta gliene sarei molto grato.
grazie

Di: DJ_Jedi | 26/09/2020 18:46:14


Scusa Professore ma c'è un errore
"La seconda casella di testo è un "Testo Dinamico" e ha come nome "outputBtn"
L'istanza si chiama outputTxt.
>>DJ_Jedi
Poi nel file xml cambia "vocabolo" con "inglese" e "traduzione" con "italiano"
Altrimenti Trova Inglese e Italiano nello script e fai viceversa

Di: LuxStudio | 26/09/2020 18:46:14


Si, errore mio...
Le due caselle di testo devono chiamarsi inputTxt e outputTxt, forse per questo non funziona...
L’ho provato e va bene così, il file XML che ho scritto per fare le prove conteneva questo:
[HR]
<diz>
<parola>
<vocabolo>Hufflepuff</vocabolo>
<traduzione>Tassorosso</traduzione>
</parola>
<parola>
<vocabolo>Gryffindor</vocabolo>
<traduzione>Griffondoro</traduzione>
</parola>
<parola>
<vocabolo>Ravenclaw</vocabolo>
<traduzione>Corvonero</traduzione>
</parola>
<parola>
<vocabolo>Slytherin</vocabolo>
<traduzione>Serpeverde</traduzione>
</parola>
</diz>
[HR]
Si chiamava “Dizionario.xml” ed era nella stessa cartella del filmato SWF.

Di: Professore | 26/09/2020 18:46:14


ma lo script funziona anche al contrario? cioè se io scrivo grifondoro mi restituisce griffyndor?
o ce necessità di cambiare lo script?
altra domanda: se voglio fare cambiare il pulsante traduci con un altra iimagine quando lo clicco come faccio????
grazie vi citerò tutti nel readme!!!

Di: DJ_Jedi | 26/09/2020 18:46:14


si adesso funziona, ma c'è un problema se io cerco solo una parte della parola non la trova. Professore riesci a modificarlo per trovare anche con una parte sola di parola?
grazie

Di: DJ_Jedi | 26/09/2020 18:46:14


Per l'incontrario ti basta scrivere cosi:
var nomeFile:String = "Dizionario.xm";
var inglese:Array = new Array();
var italiano:Array = new Array();
var caricaDati:XML = new XML();
caricaDati.ignoreWhite = true;
caricaDati.onLoad = function() {
var total:Number = this.firstChild.childNodes.length;
for (i=0; i<total; i++) {
inglese[i] = this.firstChild.childNodes[i].firstChild.firstChild;
italiano[i] = this.firstChild.childNodes[i].firstChild.nextSibling.firstChild;
}
TranslateBtn.onPress = function() {
trovato = false;
for (i=0; i<inglese.length; i++) {
if (inputTxt.text.toLowerCase() == String(inglese[i]).toLowerCase()) {
outputTxt.text = italiano[i];
trovato = true;
break;
}
if (inputTxt.text.toLowerCase() == String(italiano[i]).toLowerCase()) {
outputTxt.text = inglese[i];
trovato = true;
break;
}
}
if (!trovato) {
outputTxt.text = "--- Non disponibile ---";
}
};
};
caricaDati.load(nomeFile);
Dovrebbe funzionare ;)

Di: LuxStudio | 26/09/2020 18:46:14


si funziona ma al momento devo sistemare entrambi gli scipt perchè se ad esempio cerco dumbledore e do traduci mi da non disponibile, quando avrebbe dovuto darmi albus silente.
nessuno sa come correggere gli script?

Di: DJ_Jedi | 26/09/2020 18:46:14


No aspetta non devi inserirli tutti e 2, cancelli il precedente e inserisci questo che ti ho postato io.

Di: LuxStudio | 26/09/2020 18:47:14


Ecco il definitivo...
Lasciando gli oggetti sullo Stage come erano prima, sostituisci lo script:
[HR]var nomeFile:String = "Dizionario.xm";
var inglese:Array = new Array();
var italiano:Array = new Array();
var caricaDati:XML = new XML();
caricaDati.ignoreWhite = true;
caricaDati.onLoad = function() {
var total:Number = this.firstChild.childNodes.length;
for (i=0; i<total; i++) {
inglese[i] = this.firstChild.childNodes[i].firstChild.firstChild;
italiano[i] = this.firstChild.childNodes[i].firstChild.nextSibling.firstChild;
}
TranslateBtn.onPress = function() {
traduci(inputTxt.text);
};
};
function traduci(parola) {
trovato = false;
for (i=0; i<inglese.length; i++) {
if (parola.toLowerCase() == String(inglese[i]).toLowerCase()) {
outputTxt.text = italiano[i];
trovato = true;
break;
} else if (parola.toLowerCase() == String(italiano[i]).toLowerCase()) {
outputTxt.text = inglese[i];
trovato = true;
break;
}
}
if (!trovato) {
outputTxt.htmlText = "<p align='left'>Non trovo il termine <b>"+parola+"</b>, ecco delle alternative:</p>";
alternative = false;
for (i=0; i<inglese.length; i++) {
if (String(inglese[i]).toLowerCase().indexOf(parola.toLowerCase())>-1) {
outputTxt.htmlText += "<a href=\\"asfunction:traduci,"+inglese[i]+"\">--- "+inglese[i]+" ---</a><br>";
alternative = true;
}
if (String(italiano[i]).toLowerCase().indexOf(parola.toLowerCase())>-1) {
outputTxt.htmlText += "<a href=\\"asfunction:traduci,"+italiano[i]+"\">--- "+italiano[i]+" ---</a><br>";
alternative = true;
}
}
if (!alternative) {
outputTxt.text = "--- Nessuna parola simile trovata ---";
}
}
}
caricaDati.load(nomeFile);
[HR]
Questo traduce in tutti e due i sensi e se scrivi solo alcune lettere ti presenta un elenco di alternative (se non scrivi niente ti mostra tutte le parole del dizionario). Su questo elenco basta cliccare una parola per tradurla.
Un esempio funzionante lo trovi qua:
http://www.danielealessandra.com/Tutorials/Flash/Traduttore.zip

Di: Professore | 26/09/2020 18:47:14


si funziona, il problema è che se cerco ad esempio dumbledore mi da:
Non trovo il termine dumbledore, ecco delle alternative:asfunction:traduci, Albus Dumbledore">--- Albus Dumbledore ---

Di: DJ_Jedi | 26/09/2020 18:47:14


Si, per poter utilizzare i link nel testo devi attivare l’opzione HTML per la casella di testo, questa opzione si trova nella Palette Proprietà ed è un pulsante con le parentesi angolate, così: [<>]

Di: Professore | 26/09/2020 18:47:14


si grande funziona!!!!!!!!!
adesso le uniche modifiche sono: cambiare l'immagine del pulsante quando la clicco e mettere il risultato delle alternative centrato, perchè se metto allign center non si vedono più i risultati. mi sai aiutare Prof????

Di: DJ_Jedi | 26/09/2020 18:47:14


ciao questo è il mio primo post.
se volessi inserire una nuova variabile es spiegazione (spiegazione del testo) come si dovrebbe modificare lo script?
Es italiano: macchina, inglese: car, spiegazione: mezzo di locomozione.
Lo so che è passato molto tempo però non si sa mai che qualcuno ci sia...

Di: delgius | 26/09/2020 18:47:14