Alessio Caiazza

Il sapere umano appartiene al mondo.

IU5BON/IA5 - Isola d'Elba

In questo 2022 ho avuto la fortuna di passare due settimane all'isola d'Elba. Vacanze in relax con la famiglia ma ho avuto modo di fare un po’ di attività radio.

L'Elba è un luogo fantastico, e anche radiantisticamente ha i suoi vantaggi: si tratta di una referenza IOTA EU-028, ha due enormi parchi POTA I-1115 e I-1049 ed entrambi sono referenze 2-fer in quanto fanno parte del parco I-0667.

Il giorno di maggiore attività da parte mia è stato il primo Agosto, dove l'intera giornata è stata dedicata alle attività radio.

Fortezza del Volterraio - DRES-TO035

Partenza la mattina da Rio Marina, c'è una strada provinciale che passa sul Volterraio. Il percorso da fare a piedi parte da un parcheggio lungo la strada ed il sentiero sale ripido, sono tutti gradoni, per circa 20 minuti (la segnaletica CAI indica 40 minuti).

Raggiunta la cima del Volterraio, su uno sperone di roccia si erige la fortezza del Volterraio, edificata su fortificazioni etrusche preesistenti dalla famiglia Appiani per proteggere la città di Portoferraio dalle invasioni dei mori.

Fortezza

Si tratta di una attivazione rapida e senza pretese. Opero esclusivamente con lo yaesu ft-5d con uno stilo di circa 40cm e successivamente anche con una slimjim autocostruita.

Purtroppo non è stato possibile confrontare le due antenne in modo approfondito perché l'assenza di alberi ha reso impossibile issare la slimjim che è stata appesa ad una ringhiera del castello e tesa in orizzontale a circa un metro da terra.

Faccio una manciata di QSO, prevalentemente locali. Ad esclusione di Roberto IK0BDO/5 le altre stazioni sono tutte Elbane o in traghetto verso l'isola.

Log e mappa dei QSO su MQC

Volterraio - WxM-TO793

Io davanti alla fortezza

Sono già in cima al volterraio quindi decido di dedicate la parte finale della mia permanenza in vetta al Watt per Miglio. A sorpresa collego una stazione di Genova che aveva a disposizione anche il C4FM e facciamo tutte le prove del caso in 2m e 70cm sia FM che C4FM.

La dove in FM ogni tanto si perdeva il segnale, in C4FM nessun problema di sorta, sia in modalità Narrow che Wide. Segnale perfetto, audio impeccabile.

I miei amici IZ5PHM e IK5JRZ sono ormai attraccati a Portoferraio, è il momento di scendere e andare sul monte Capanne.

Log e mappa dei QSO su MQC

Monte Capanne e Promontorio dell'Enfola - I-1049

Il parco dell'Arcipelago Toscano (I-0667) ha una superficie enorme ed è a sua volta suddiviso in sottoparchi. Per esempio il Volterraio si trova nel parco dell'Elba Orientale (I-1115) che fa parte del parco I-0667. Allo stesso modo il monte Capanne fa anche parte del suo sottoparco di nome Monte Capanne e Promontorio dell'Enfola (I-1049).

Elba

Dopo essere sceso dal Volterraio mi dirigo verso la gabinovia di Marciana per salire sul monte Capanne. La vista è mozzafiato già dopo i primi minuti, giunti in vetta lo spettacolo è incredibile. Faccio un paio di chiamate in FM mentre monto la EFHW e comincio le attività in HF. Mi posiziono all'ombra di uno sperone di roccia laterale rispetto alla sommità del monte, circa 50m in linea d'aria dal punto più alto. La posizione ombreggiata agevola l'attivazione e riesco ad andare avanti per quasi 3h, pausa pranzo inclusa.

Ora è il momento di attivare la sommità per il SOTA.

Log e mappa dei QSO su MQC

Monte Capanne - SOTA I/TO-080

sota

IZ5PHM mi ha portato una 4 elementi per i 2m gemella della mia rimasta a casa a Firenze, mentre aspetto alcuni pezzi dell'antenna comincio a chiamare in FM e collego immediatamente quattro stazioni, due delle quali anche in C4FM. Quando arriva la yagi l'attivazione è già assicurata dal numero di QSO ma monto ugualmente nella speranza di un DX in 2 m SSB. Purtroppo l'antenna non si comporta come dovrebbe e mostra a tratti un ROS alle stelle. Il sole si fa sentire e dopo poco meno di un'ora comincio a smontare la stazione.

Log e mappa dei QSO su MQC

team

73 de IU5BON

(l0g.in 5L5LMg)

microstazione digitale

Durante la mia ultima attivazione POTA ho provato la mia nuova stazione digitale composta dal minuscolo raspberrypi zero 2W, il grosso dubbio per me erano i soli 512MB di RAM, ma l'apparato si è comportato bene in FT8 e JS8CALL.

Purtroppo non ho ancora avuto modo di provare ftldigi per verificare la fattibilità di un QSO in RTTY, però durante la mia attivazione mi sono accorto che il collegamento USB con la radio innalzava il noise floor di diversi punti S, una cosa assolutamente inaccettabile.

In questo giorni di quarantena familiare allora ho provato a costruire un choke RF per il cavo USB.

Qui a S. Marcello Pistoiese mi sono arrangiato per l'antenna, avevo 20m di cavo elettrico ma non lo spazio per distenderlo quindi la EFHW è montata in po’ a zig-zag, però qualche QSO sono riuscito a farlo.

Antenna

Costruisco il primo prototipo su una ferrite un po’ grande, funziona alla perfezione ma il choke adesso è più ingombrante e pesante del mini computer.

Prototipo su ferrite grande

Fortunatamente avevo anche una ferrite FT140-43, decisamente più piccola del mio primo esemplare, che si è dimostrata idonea per l'utilizzo.

progetto su ferrite piccola

Ora la mia stazione digitale è pronta per la prossima attivazione.

Cosa posso fare con questo setup?

  • CAT control tramite flrig
  • Sincronizzazione orario tramite il GPS della radio
  • Hotspot IU5BON-field in caso di assenza segnale dati dal mio hotspot del cellulare
  • server VNC per utilizzare le applicazioni per i modi digitali dal telefono o tablet

73 de IU5BON

(l0g.in 5Kb9AK)

IQ5FI a Vallombrosa I-0104

Prima attivazione POTA per la sezione ARI di Firenze

Giovedì 23 Giugno IU5BON Alessio e IK5VYZ Claudio decidono di provare un’attivazione club per il programma POTA attivando il parco I-0104 con il nominativo di sezione IQ5FI.

Essendo un’attivazione infrasettimanale il nostro scopo principale era quello di stare un po’ al fresco e di provare alcune antenne ed attrezzatura in tranquillità.

Il parco è facilmente raggiungibile in auto quindi abbiamo portato un po’ più attrezzatura rispetto a quando andiamo a fare altre attività tipo SOTA.

attrezzatura

Iniziamo montando la JPC PAC-12 in configurazione 40m e la yagi 4 elementi per le VHF. Dopo un rapido check delle antenne spostiamo la PAC-12 in 20m e montiamo una EFHW per i 40m. Operiamo con due radio HF, un ICOM IC-705 e un elecraft KX2. A queste si aggiungono alcuni palmari D-Star e DMR.

JPC PAC-12

radiali JPC PAC-12

EFHW

Questa è la prima volta che usiamo HAMRS per il logging, il file ADIF per le attivazioni club richiede alcuni campi specifici per essere sicuri che il punteggio sia correttamente attribuito sia alla stazione di sezione che a all’operatore che esegue il collegamento e decidiamo di non rischiare. Programma molto comodo e in presenza di connettività internet permette di verificare nominativi e referenze in modo automatico.

HAMRS

La mattinata procede a rilento, nessuno risponde alle nostre chiamate quindi ci dedichiamo un po’ alla caccia di altre stazioni con risultati non eccellenti.

Verso l’ora di pranzo riprendiamo a chiamare e arrivano i primi tre collegamenti HF in chiamata, fra cui Roberto IK0BDO/5 che ci collega sia in 20 che in 40.

I collegamenti si interrompono e vista l’ora decidiamo di tentare la modalità panino&FT8. IU5BON aveva portato una micro stazione digitale composta da un raspberrypi zero 2W. Purtroppo il setup induce tantissimo rumore in radiofrequenza ma decidiamo comunque di vedere che si può fare.

Pranzo

Facciamo 8 QSO in FT8 20m in rapida successione mentre mangiamo. Poi proviamo js8call ma in 20m troviamo solo stazioni automatiche. Tentiamo con fldigi in RTTY ma il mini computer sembra soffrire molto l’avvio dell’applicazione oltre ad essere completamente da configurare. La poca batteria rimasta nel 705 e il rumore indotto dal computer ci spingono a tornare alla fonia per il tempo rimanente. Mettiamo a log altre tre stazioni poi tentiamo timidamente una chiamata CW QRS ma riceviamo solo una risposta ad altissima velocità che non riusciamo a mettere a log, dopodiché la batteria ci saluta.

Nel frattempo il KX2 di Claudio continua ad andare, ma visto lo scarso successo in chiamata ci mettiamo a cacciare attivatori SOTA.

Finita la batteria del 705 cominciamo l’attività in 2m FM e DMR. Avevamo pubblicizzato molto la nostra attivazione in sezione, eravamo abbastanza vicini a Firenze da poter avere dei QSO in 2m FM anche con i classici gommini dei palmari. Colleghiamo alcuni colleghi, e con IZ5HQB facciamo anche la comparativa FM/DMR. Incredibile la differenza, in FM dovevamo tenere lo squelch aperto per sentire Gabriele appena sopra il rumore mentre in DMR la sua voce arriva forte e squillante.

Il premio QSO all’ultimo istante va a Roberto IW5BNY, avevamo appena acceso l’auto per andare via quando dal palmare sentiamo che Roberto ci chiama per sapere se eravamo ancora attività. Facciamo QSO con lui e poi via verso casa.

Cosa abbiamo imparato?

  • La stazione in 20m induce sempre un po’ di disturbo in 40m, indipendentemente dalle radio e le antenne utilizzate, il viceversa non è vero.
  • La PAC-12 è velocissima da montare e ha un buon ROS. È un po’ troppo stretta di banda in 40m ma in 20m è perfetta. Purtroppo non abbiamo avuto tempo di provarla in altre bande.
  • La stazione digitale con il raspberrypi zero 2W funziona, ma dobbiamo migliorare il cavo di collegamento, magari avvolgendolo attorno ad un toroide in ferrite.
  • HAMRS si è rivelato comodo e piacevole da utilizzare.

73 de IQ5FI - Alessio IU5BON e Claudio IK5VYZ

(l0g.in 5KT9Mg)

tatitati tatatita

Quando si inizia a studiare la telegrafia, arriva poi il momento in cui ci si deve fare coraggio e chiamare CQ. Per me questo è successo Sabato 28 Maggio.

Siamo in preparazione per la partenza con la famiglia, destinazione campeggio in JN53FH. Al momento di fare i bagagli decido di lasciare a casa l'ICOM IC-705 e di portare solamente la mia nuova SW-3B.

Dopo pranzo approfitto della nanna pomeridiana di mia figlia per montare la EFHW e provare a fare qualche timida chiamata a 12 WPM.

antenna

È giorno di contest, c'è il CQ WPX CW, ma stranamente trovo un buchetto libero in 40m e comincio a chiamare.

RBN

Ovviamente mi risponde Mario IW1DUS, mio compagno di corso base CW QRS ITA, e facciamo il nostro QSO in chiaro, usando spaziature flessibili per aiutarci nella decodifica.

Continuo a chiamare ancora un po’ e mi risponde un'altra stazione, panico. Attacco con il mio fogliettino con il QSO standard, inciampo sul mio nome un paio di volte, ma completo il mio QTC. Il corrispondente riprende, avevo sbagliato il nominativo, si tratta di Ben I8QFK, il maestro del corso CW!

Mi passa il rapporto e dice qualcosa a proposito del contest in corso, ma proprio durante il suo passaggio comincio a sentire il pianto di mia figlia che si è svegliata.

QRT

QRT forzato per me.

La stazione radio

Un kit molto leggero e assolutamente compatto.

73 de IU5BON

(l0g.in 5K771d)

Prove di ruota MQC in js8call

Dopo gli esperimenti di Mercoledì con js8call, la voglia di provare qualcosa di nuovo era ancora forte. Il giorno dopo, Giovedì 26, è il turno di IU2OMT Paolo e IW1DUS Mario.

Callsign TX RX Nome Time off
IU2OMT -08 +13 Paolo 2042
IW1DUS -15 -02 Mario 2048

Segnali come sempre interessantissimi per i nostri 5W. Facciamo quattro chiacchiere poi propongo di testare una funzionalità di js8call chiamata group callsign. Aggiungiamo @MQC alle group callsign del nostro applicativo e tentiamo un QSO di gruppo.

Ruota MQC

La cosa funziona, ma comunque richiede un po’ di pratica. Approfondendo il manuale sembra che esistano delle group callsign ufficiali che sono ottimizzate per la trasmissione come @QRP, @SOTA, e @POTA.

La prossima volta sarebbe meglio usare @QRP al posto di @MQC per sfruttare le ottimizzazioni di js8call.

73 de IU5BON

(l0g.in 5K5HPU)

Non dico mai di no a js8call

Mercoledì 25 Maggio 2022 parte una discussione a proposito di js8call sulla chat telegram di MQC. Questa volta non sono io a lanciare l'argomento e pare che ci siano alcuni soci interessati a provare questo modo digitale.

Verso sera alcuni si ritrovano in 40m e colgo l'occasione per rispolverare la mia pratica con js8call.

QSO con I5EKX

Faccio un paio di QSO con Alex I5EKX e Simone IU3QEZ che stava usando js8call per la prima volta.

Callsign TX RX Nome Time off
I5EKX -14 -15 Alex 1739
IU3QEZ -08 -20 Simone 1745

Inizialmente ero partito con 20W ma dopo un primo scambio positivo sono sceso a 5W per verificare la fattibilità del collegamento in QRP. I rapporti in tabella sono con i 5W.

Una cosa di cui sento sempre la mancanza in fonia è un sistema come quello del reverse beacon network che è utilissimo in CW. Quando siamo in js8call, per fortuna, c'è pskreporter che ci da informazioni sul nostro segnale.

ODX report

Avevo già fatto alcune attività js8call con MQC, sempre come attività esplorative e sperimentali, perché specialmente in portatile, il setup della stazione non è semplice come per altri modi.

73 de IU5BON

(l0g.in 5K1GPK)

Tucnak come log per lo IAC

Sono recentemente venuto a conoscenza di tucnak, un software di log per contest. Si tratta di un progetto opensource di OK1ZIA e ha la caratteristica di essere molto avanzato ma sopratutto multipiattaforma, incluso Android. Tra le tipologie di attività che supporta c'è anche una modalità contest che è ottimizzata per le attivazioni SOTA che sarebbe perfetta per le mie attivazioni del Mountain QRP Club utilizzando un economico tablet Kindle 7".

Dopo un primo test durante il contest delle sezioni VHF eseguito da I/TO-302, decido di investire un po’ di tempo nel progetto e contribuire con la realizzazione dell'algoritmo per il calcolo del punteggio per l’Italian Activity Contest.

Finalmente martedì 5 Aprile giunge il momento per testare le mie modifiche durante lo IAC. Ho a disposizione solo la prima mezzora del contest e decido di montare rapidamente la mia Yagi 4 elementi portatile in giardino e collegarla al posto della mia EFHW. Ma…

nido

Dopo aver montato l'antenna, pronto a collegarla al posto della EFHW, mi accorgo che dei merli hanno nidificato sopra il box che alloggia il connettore dell'antenna. Ci sono dei piccoli nati da poco e non è il caso di disturbare il nido. Rapido cambio di programma e si passa ad una partecipazione QRP! Corro in casa a prendere il mio kit da attivazione e monto la stazione.

Ho solo trenta minuti per partecipare e la mia postazione è coperta da tutti i lati. Faccio giusto tre QSO e metto a punto un piccolo bug e qualche ottimizzazione per tucnak.

tucnak lista QSO tucnak mappa QSO

Mi ritengo soddisfatto della mia esperienza, spero che la nuova versione di tucnak sia rilasciata presto in modo da rendere disponibile il calcolo del punteggio IAC per tutti. Io sicuramente continuerò ad utilizzaro per un bel po’.

73 de IU5BON

(l0g.in 5J8Jif)

Contest delle sezioni VHF da I/TO-302

Finalmente un'occasione per tornare in montagna a fare un po’ di radio, il contest delle sezioni ARI VHF-UHF.

Decido di tornare su Poggio all'Aia, una meta che avevo attivato in passato, perché questa volta sarò da solo.

Partenza da la fonte dei seppi verso le 9 di mattina, decido di seguire la strada forestale fino all'inizio del sentiero numero 12, dove finalmente mi inoltro nel bosco fino a bivio con il sentiero 00 che mi porterà in vetta.

Sono poco dopo le 10 e subito vengo chiamato da Roberto IW5BNY che mi stava seguendo in APRS. Facciamo quattro chiacchiere e poi comincio a montare la stazione per il contest. C'è molto vento, quindi decido di allestire un rifugio con il tarp per proteggermi un po’.

Qualche minuto prima delle 11 sono finalmente pronto per il contest.

Purtroppo il vento rende difficile operare la mia yagi 4 elementi e mi trovo a fare molti QSO “in direzione di vento”, per le prossime attività dovrò trovare un sistema per tenere dritta e più stabile la canna da pesca.

Rimango operativo fino verso le 13, poi inizio le operazioni di smontaggio e comincio la discesa verso l'auto facendo il giro delle altre due punte di Monte Morello.

si riparte

Avevo portato il the caldo per ristorarmi dal freddo, ma alle 5 di pomeriggio, a casa, era ancora troppo caldo per poterlo bere, HI.

Best DX della giornata il carissimo Marco IU2HEE di MQC che mi collegava della referenza I/LO-719.

VHF QSO MAP

73 de IU5BON Alessio

(l0g.in 5HsA4R)

M17 on your Pi-Star

M17 is one of the most exciting things happening on ham radio, this article covers my patch to turn a Pi-Star into an M17 enabled system.

But first, if you are not familiar with M17, here is the definition from the project website:

M17 is a new digital radio protocol in development as an alternative to those currently available, with freedom in mind. Freedom in the code, protocol, voice codecs, and hardware. The goal is to provide a better option for digital radios in the future.

I’ve started working on the M17 Project; my involvement started with the OpenRTX project, but I contributed to other projects inside the M17 world, as it should be in a healthy open-source ecosystem.

Howto patch your Pi-Star

The Pi-Star upgrade system relies on Git, so I wrote a little script that points the upgrading system to my M17 branches.

The script will modify the dashboard, /usr/local/bin, and /usr/local/sbin. It may fail if you have modifications to these places, so please revert to a stock pi-star before proceeding.

To patch your pi-star, connect with ssh and run the following command.

curl https://raw.githubusercontent.com/nolith/Pi-Star_Binaries_sbin/M17/pistar-install-m17 | sudo bash -

This script will update the binaries and the dashboard to support M17. It will add a new m17gateway service and the necessary firewall rules.

To successfully run M17Gateway, your MMDVM modem or HotSpot hat needs a firmware update. For the hotspot, you need at least v1.6.0; for the modem, instead, compile it from the master branch.

Beware that the MMDVMHost included in this patch is backward compatible with the previous version, but the stock binary included with pi-star isn’t forward compatible; you need to downgrade your firmware before uninstalling the M17 patch.

Now that we have a supported firmware it is time to enable the M17 mode from the configuration dashboard.

enabling M17 mode

Enabling it will generate a configuration file in /etc/m17gateway; it is possible to edit it with the full editor available under the expert configuration page. If you only care about the startup reflector, it is possible to change it from the regular configuration page.

startup reflector

The first M17 QSO

Now you are all set; it’s time to test your M17 enabled pi-star.

This is how the dashboard looks like when you have M17 enabled.

dashboard

There are several options to test this setup. I’ll briefly cover some of them, starting with the option that requires no radio at all.

DroidStar over Internet

DroidStar implements M17 both TX and RX. You can install it on Android, join the iOS app beta, or compile it and run on your computer.

If you connect DroidStar and Pi-Star to the same reflector it will be possible to see the transmissions on the dashboard (and on the hotspot display).

If you have an rtl-srd device, it will be possible to decode the M17 traffic using SDR++.

DroidStar transceiver

With an MMDVM HotSpot board, an USB to TTL adapter, and on USB On The Go (OTG) cable it is possible to turn your Android device into an M17 transceiver using only RF, without internet access.

More details on this experiment are available on the M1HOG wiki.

M17Client

M17Client is yet another great piece of software from G4KLX. It’s a client designed for use with MMDVM modems and hotspots to allow for use as an M17 radio. This requires access to an M17 capable MMDVM modem or hotspot and of course a suitable radio if using the modem version.

Here is a short video where I’m testing my QSY pull request.

OpenRTX

OpenRTX is a Free and Open Source Firmware for Digital Ham Radios, at the time of writing it only supports M17 TX but no RX.

It requires hardware modifications and you can read how much fun Michael DL6MHC had with this in his blog post.

Mobilinkd TNC3

If you have a 9600-baud capable radio, a Mobilinkd TNC3, and an Android device, then you can follow the Mobilinkd M17 Setup Guide from WX9O.

Why I’ve done all of this?

I was building an M17 hotspot from scratch, and once I got all the binaries ready, I realized how many features come for free in pi-star.

After studying the pi-star upgrade system, I decided to patch it to support M17. So I shared my learning on the M17 Discord server, and other hams started using it, reporting bugs, writing articles.

It was no longer only my script, others were using it, so I decided to upstream my changes hoping to have them as part of the standard pi-star distribution.

So I opened a pull request for the dashboard and one for /usr/local/sbin in the hope that we can start a conversation about what is missing to bring M17 to all pi-star users.

73 de IU5BON

Links

(l0g.in 5GYHJ0)

My first multilanguage page

This article is also available in english.
Questo articolo è disponibile anche in italiano.

Avevo bisogno di una pagina multilingua, qualcosa di semplice che stesse bene con il mio sito generato staticamente

Ecco i miei requisiti:
  1. deve essere basato esclusivamente si CSS e JavaScript, senza framework,
  2. deve essere di default in inglese, ma supportando una seconda lingua (l'italiano),
  3. deve essere possiible linkare una pagina in una determinata lingua.

L'idea è quella di identificare il body HTML con una classe CSS che descriva il linguaggio visibile, show-en oppure show-it. Dopodichè identificare i contenuti nelle due lingue con le classi lang-en e lang-it.

Con tutto questo pronto, le seguenti 4 righe di CSS faranno in modo che siano visibili solo i contenuti nella lingua desiderata.

I needed a multilangage page, something simple that could fit on my static generated site.

Here are my requirements:

  1. it should only use CSS and plain JavaScript, without frameworks,
  2. it defaults to english, but supports only another languange (italian),
  3. it should be possible to generate a link that shows a specific languange.

The idea was to mark the HTML body with a CSS class describing the expected language, show-en or show-it. And then mark the language specific contents with lang-en or lang-it.

With this in place, the following 4 CSS lines will only show the expected language.

.show-en .lang-it { display: none; }
.show-en .lang-en { display: block; }

.show-it .lang-en { display: none; }
.show-it .lang-it { display: block; }
Bene, vediamo allora la parte HTML, quello che segue è un body di esempio.
Let’s now talk about the HTML. Here follows an example body.
<body class="show-en">
    <div class="lang-it" lang="en">
        This article is also available in <a href="#en" class="switch-lang">english</a>.
    </div>

    <div class="lang-en" lang="it">
        Questo articolo è disponibile anche in <a href="#it" class="switch-lang">italiano</a>.
    </div>

    <div class="lang-en" lang="en">
        In this article I'm going to explain how I made a multilanguage page,
        only using CSS and plain JavaScript, without frameworks.
    </div>
    <div class="lang-it" lang="it">
        In questo articolo spiegherò come ho realizzato una pagina multilingua.
        Utilizzando solo CSS e JavaScript, senza framework.
    </div>

    <pre>
       // example here
    </pre>
</body>
  • Si può notare che il body utilizza la classe show-en,
  • i contenuti localizzati sono identificabili dalle classi lang-en e lang-it,
  • si possono avere contenuto condivisi, privi di localizzazione (come il blocco pre),
  • ci sono due link speciali identificabili dalla classe switch-lang che si occuperanno del cambio di lingua.

Completiamo l'esempio con un po’ di JavaScript.

La prima funzione, setLangFromHash, estrae l'hash dalla URL e controlla se contiene l'indicativo di una lingua.

Siamo solo interessati a #it perché l'inglese è attivo di default.

In aggiunta, l'hash viene suddiviso in base alla presenza del carattere / per permettere l'utilizzo di link interni al documento mantenendo la localizzazione attiva, ed esempio #en/section-1.

  • It it important to note that the body element defaults to show-en class,
  • localized contents are marked with lang-en or lang-it,
  • it is possible to share unlocalized content (like the pre block),
  • there are two special links identified by the switch-lang class that will handle language switching.

Let’s complete the example with some JavaScript.

The first function, setLangFromHash, will extract the URL hash and check if it contains a language code.

We only care about #it because english is the default language and there is nothing to do in that case.

As a bonus, we split the hash on / to allow localized internal links like #en/section-1.

var setLangFromHash = function () {
    var hash = window.location.hash;

    var lang = hash.split("/", 2)[0] || "";
    if (lang == "#it") {
        document.body.classList.replace('show-en', 'show-it');
    }
};

La seconda funzione, switchLang, si occupa di alternare le classi show-en e show-it nell'elemento body.

The second function, switchLang, will toggle between show-en and show-it on the body element.

var switchLang = function () {
    if (!document.body.classList.replace('show-en', 'show-it')) {
        document.body.classList.replace('show-it', 'show-en');
    }

    return true;
}
Infine abbiamo bisogno di assemblare queste funzioni nella pagina. Quando tutti gli elemento del DOM sono pronti, possiamo cercare gli elementi identificati dalla classe switch-lang ad assegnargli la funzione switchLang, infine possiamo invocare la funzione setLangFromHash per identificare la lingua corrente nel caso in cui l'utente arrivi da un link esterno.
We finally reached the glue code that connects all the parts. When the DOM is loaded, we search for elements with the switch-lang tag and assign them to the switchLang function, then we invoke the setLangFromHash function to make sure the italian language is detected if a user is coming directly with #it in the URL.
document.addEventListener('DOMContentLoaded', () => {
    // language switching links
    document.querySelectorAll(".switch-lang").forEach(function(a) {
        a.onclick = switchLang;
    });

    // override language based on hash
    setLangFromHash();
});
E con questo abbiamo finito.
And that’s all.
(l0g.in 5GG8Zo)
0
0
0
Alessio

Hello. My name is Alessio Caiazza. I'm also known as nolith. I love writing code and technology. I'm passionate about production engineering.

This is where I write my thoughts trying to follow IndieWeb principles.

Staff Backend Engineer, Delivery @ GitLab

he/him/his

IU5BON HamRadio callsign

"Il sapere umano appartiene al mondo."

An IndieWeb Webring 🕸💍