tajmone / alan3-italian Goto Github PK
View Code? Open in Web Editor NEWTranslation of Alan IF v3 to Italian
License: Artistic License 2.0
Translation of Alan IF v3 to Italian
License: Artistic License 2.0
Ci sono vari problemi con il verbo vai_a
per implementare sintassi alternative per le direzioni; le sintassi "VAI A <DIREZIONE>" e "A <DIREZIONE>" non funzionano.
Vedi il test vari/direzioni.a3log
:
> ; **ERR!** Per qualche ragione la sintassi "VAI A" non funziona:
> vai a nord
Non ho capito la frase.
> vai a sud
Non ho capito la frase.
e
> ; **ERR!** Per qualche ragione la sintassi "A" non funziona:
> a nord
Non ho capito la frase.
> a sud
Non ho capito la frase.
Premesso che "VAI" è sempre ignorato dal parser in quanto sinonimo della NOISE_WORD
"GO", rimane da capire perché la sintassi "A <DIREZIONE>" non funziona...
Rimuovi dai verbi le clausole IF di verifica che un prendi-implicito sia andato a buon termine, poiché supeflue.
IF
e lascia solo il codice.Nei vari verbi che impiegano un "prendi implicito" è presente una clausola IF
per verificare che esso sia andato in porto. Esempio (tratto da lib_classi.i
, verbo dai_a
su luquido
):
DOES ONLY
-- >>> prendi implicito: >>>
IF THIS NOT IN hero
THEN
IF THIS:recipiente = recipiente_fittizio
OR THIS:recipiente IS NOT prendibile
THEN SAY mia_AT:impossibile_maneggiare_liq1.
ELSE LOCATE recipiente OF THIS IN hero.
"(prima prendi" SAY THE THIS:recipiente. SAY THIS:prep_DI. "$1)$n"
END IF.
END IF.
-- <<< prendi implicito <<<
IF THIS IN hero -- (se il prendi implicito è andato a buon fine)
THEN
"Consegni" SAY THE THIS:recipiente. SAY THIS:prep_DI. "$1"
SAY png:prep_A. "$2."
LOCATE recipiente OF THIS IN png.
END IF.
Questa clausola è inutile dato che se il LOCATE
del prendi-implicito dovesse fallire per qualsiasi ragione (e.s. l'oggetto è posseduto da un attore) allora l'esecuzione del verbo si interromperebbe.
Ho eseguito dei test che confermano quanto sopra, quindi è un'operazione sicura.
Questi sono i titoli originali delle sezioni in cui è organizzato The Inform Recipe Book — da tradurre in italiano:
Quasi sicuramente il ricettario di Alan seguirà lo stesso criterio organizzativo dato che lo Inform Recipe Book è il risultato di anni di contributi da parte di sviluppatori esperti, revisioni ed esperienza pratica. Ma l'organizzazione delle sezioni e gli esempi varieranno nel Ricettario di Alan, anche in virtù delle differenze tra i due sistemi di sviluppo (p.es., la §12.5 riguardante Glulx, che Alan non usa, ecc.).
Il thread di questo issue è destinato ad eventuali discussioni sulla traduzione dei titoli delle sezioni e se nel Ricettario di Alan suddividerli ulteriormente, introdurre altre sezioni, ecc.
Sarebbe inoltre utile stabilire una priorità su quali sezioni ed esempi debbano avere la priorità, dato che sono parecchi e richiederanno molto tempo per essere realizzati in Alan, commentati e documentati.
Nei messaggi riguardanti i recipienti dei liquidi, non mi piace che il recipiente venga menzionato come <recipiente> di <liquido>
. In alcuni casi questo va bene (es. "bottiglia del vino", "recipiente del latte"), ma nel caso di recipienti generici suona un po' forzato (e.s. "tanica del latte", "acquasantiera del vino", "pozzanghera del latte", ecc.).
Il punto è che un recipiente potrebbe essere svuotato e usato per contenere altri liquidi, in quel caso un cartone del latte resta pur sempre un cartone del latte anche se usato per stipare della benzina. In questi casi, il nome del recipiente potrebbe essere definitio per esteso (e.s. "il cartone del latte") e si avrebbero risposte come:
> esamina cartone
Il cartone del latte contiene del latte.
e in caso vi fosse della benzina:
> esamina cartone
Il cartone del latte contiene della benzina.
... che ha molto più senso e consente un'implementazione più versatile.
Alcuni messaggi per i contenitori si sovrappongono a quelli dei supporti. Mi chiedo se non valga la pena ridefinire la prep_IN
di supporto
tramite INTIALIZE
di modo che sia uguale a prep_SU
, anziché gestire manualmente i messaggi alternativi per i supporti.
In teoria potrebbe funzionare, dato che un supporto
è sempre un contenitore i cui verbi dedicati usano la preposizione su
anziché 'in'
, e quindi non dovrebbero mai esservi messaggi che usano "in". Ma devo verificare.
Ad ogni modo, mancano i check in vari verbi che dovrebbero interessare solo in contenitori e non i supporti. Devo capire come correggerli (tramite WHERE
, CHECK
, etc.) e se sfruttare anche questa soluzione.
C'è un problema con alcuni verbi che non eseguono un CHECK
per controllare se il parametro è un supporto:
riempi
lancia
riempi
Vedi il test casa/classi_contenitori.a3log
dove digitando "ascolta il cielo" in CUCINA si ottiene:
> ; ------------------------------------------------------------------------------
> ; TESTA parametro 1 inadatto (supporto)
> ; ------------------------------------------------------------------------------
> ; **ERR!** Manca un check per controllare che non sia un supporto:
> riempi il tavolo con la mela
Il tavolo is already full of la mela.
Siccome il verbo riempi
non è ridefinito sulla classe supporto
, la soluzione sarà o:
CHECK
al verbo riempi
in lib_verbi.i
riempi
sulla classe supporto
in lib_classi.i
, al solo fine di aggiungere un ulteriore CHECK
.Devo ragionare su quale soluzione sia migliore.
NOTA — Bisgona verificare se un problema simile sussiste anche con i verbi affini "versa" e "svuota" (
versa_in
, etc.).
lancia
Un problema simile si verifica anche con il verbo lancia
. Dal medesimo test:
> ; **ERR!** Manca un check per controllare che non sia un supporto:
> lancia la mela nel tavolo
La mela doesn't belong in il tavolo.
I verbi del gruppo guarda_*
(sotto, attraverso, ecc.) condividono scampoli di testo che potrebbe essere spostato in un attributo mia_AT
C'è un problema con il verbo ascolta
che restituisce una stringa vuota se usata con un oggetto di luogo presente in un luogo esterno adiacente (ma non in quello attuale).
Vedi il test casa/azioni_esplorazione.a3log
dove digitando "ascolta il cielo" in CUCINA si ottiene:
> ; **ERR!** Il cielo non è NEARBY dato che è situato in un luogo che avvolge
> ; il giardino (ma non la casa).
> ascolta il cielo
> ascolta il giardiniere
Non riesci a sentire il giardiniere da questa distanza.
La CUCINA è a NORD del GIARDINO, la prima è una stanza
e l'altro un luogo_esterno
(contenente il CIELO).
Il problema sembra essere legato al fatto che nel DOES
del verbo ascolta
vi sono vari IF
che coprono un parametro nello stesso luogo del giocatore, in quello adiacente, ma non contempla un luogo lontanto.
ascolta
In lib_verbi.i
:
ADD TO EVERY THING
VERB ascolta
[...]
DOES
-- @NOTA: Ho invertito 'hero' e 'ogg' se no il verbo non copriva i casi
-- in cui l'erore è in una locazione annidata, oppure l'ogg è in
-- un contenitore esterno (es. il cielo o il soffitto)...
-- IF ogg AT hero
IF hero AT ogg
THEN
IF ogg IsA ACTOR
THEN SAY THE ogg. "non sta"
IF ogg IS plurale
THEN "$$nno"
END IF.
"parlando in questo momento."
ELSE "Non odi niente di particolare."
END IF.
-- TODO: Se l'oggetto è lontano non produce nessuna risposta, ma forse dovrebbe CHECK!
-- produrre un qualche testo. Il problema qui è che comunque il tentativo
-- svela l'esistenza dell'oggetto, laddove un oggetto inesistente avrebbe
-- prodotto "Non conosco la parola 'xxx'.", questo messaggio (o la sua
-- assenza) è indicatorio del fatto che l'oggetto esiste ma non si trova
-- in un luogo contiguo.
ELSIF ogg NEAR hero
THEN "Non riesci a sentire" SAY THE ogg. "da questa distanza."
-- THEN "You can't hear" SAY THE ogg. "very well from here."
END IF.
After an Alan code block starting with an indentation is processed by Highlight, the indentation on the first line is lost.
{wj}
workaround.For more info on this problem, see: tajmone/hugo-book#15
For an example, see:
Right now, the only workaround solution is to add a word joiner character (⁠
) at the beginning of the first indented line using its predefined attribute for character replacement ({wj}
):
[source,alan, subs="+attributes"]
---------------------------------
{wj} Add To Every object
This works fine, although it's far from being an ideal solution (but, at least, it shouldn't create any problems for other Asciidoctor backends and output formats).
Vanno risolti parecchi bachi e problemi con il vestiario, alcuni dei quali causano un crash dell'avventura. Per maggiori info, vedi:
Devo approcciare i vari problemi in maniera strategica:
Update Wiki page i18n-Problems and mention that these problems have been fixed in upcoming Alan version.
Crea ed organizza la sottocartella ricettario/
:
docs_src/
).Fondi in un unico script i due batch script che eseguono i test in ciascuna sottocartella.
Questo semplificherà la manutenzione dello script e migliorerà il rapporto finale (che ora viene mostrato alla fine di ciascun ciclo di test).
Modifica la libreria per consentire di definire un protagonista femminile, e fai in modo che la messaggistica che menziona il protagonista si adatti al suo genere.
Ci sono dei problemi con alcuni verbi ridefiniti su pavimento
e suolo
(es. metti_in
) che vanno testati, isolati e risolti. Vedi:
E i seguenti test:
Aggiungi uno script in ciascuna cartella dei test per consentire di eseguire test isolati:
test/casa/TESTA.bat
— parametro: un file .a3sol
, che verrà testato su casa.alan
.test/vari/TESTA.bat
— parametro: un file .alan
, esegue tutti gli script .a3sol
associatigli.Entrambi gli script devono compilare il sorgente cui si riferiscono.
Questo velocizzerà i testi isolati, senza dover eseguire tutti i test. Ora che il numero di test inizia ad essere considerevole, i tempi per eseguirli tutti iniziano a rallentare il lavoro sui singoli test.
Alcuni messaggi della libreria in lib_messaggi_libreria.i
contengono un testo identico:
attr. 1 | attr. 2 | testo |
---|---|---|
ogg1_non_posseduto |
non_possiedi_ogg1 |
"Non possiedi $+1." |
ogg2_non_posseduto |
non_possiedi_ogg2 |
"Non possiedi $+2." |
Devo decidere quale eliminare dei due e poi sostituire tutte le occorrenze.
Nota che gli attributi della prima colonna hanno anche altri attributi simili, con cui formano un gruppo: ogg2_non_ottenibile
("Non puoi avere $+2."
).
Quindi conviene:
non_possiedi_ogg1
ogg1_non_posseduto
rinominando ogg2_non_ottenibile
in non_puoi_avere_ogg2
.La seconda scelta è più vicina al messaggio realmente stampato, la prima ha una forma più comunemente usata nella nomenclatura dei messaggi attuale.
Switch to the upcoming official extensions .a3s
and .a3t
for ALAN3 solution files and transcripts, respectively (see alan-if/alan#2):
.a3sol
→ .a3s
.a3log
→ .a3t
.md
)..sh
.bat
Prendi il file .editorconfig
dal progetto ALAN Repository Template e mettilo nella root del repository.
Questo offrirà un miglior supporto per i file di Alan (*.alan
, *.i
, *.a3sol
, *.a3log
) tramite EditorConfig, assicurando uno stile consistente nei diversi editor e IDE, oltre che migliorare la visualizzazione dei sorgenti Alan su GitHub.
Il verbo prendi_da
va rivisto perché contiene clausole impossibili e contradittorie.
La sintassi:
SYNTAX prendi_da = prendi (ogg) da (detentore)
WHERE ogg IsA THING
...
AND detentore IsA CONTAINER
...
... consente di prendere un attore da un contenitore (incluse un altro attore), ma questo non può accadare dato che Alan non consente di mettere attori in contenitori.
Credo che l'idea originale fosse quella di implementare un qualche sistema per emulare attori in contenitori tramite classi specializzate che ridefinissero il verbo prendi_da
— in fatti nel corpo del verbo leggiamo:
DOES
IF ogg IsA ACTOR
THEN SAY THE ogg. "would probably object to that."
-- actors are not prohibited from being taken in the checks; this is to
-- allow for example a dog to be picked up, or a bird to be taken out of
-- a cage, etc.
... ma questo è impedito dai seguenti CHECK
:
ADD TO EVERY THING
VERB prendi_da
WHEN ogg
CHECK [...]
...
AND ogg IS spostabile
...
AND ogg IS prendibile
...
AND ogg IN detentore <-- NON ACCADRÀ MAI!
Una possibile soluzione sarebbe quella di implmentare il verbo prendi_da
anche sulla classe object
e spostare lì i CHECK che non riguardano gli attori.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.