3 strumenti open source per sviluppare siti multilingua

(2 voti)
Etichettato sotto :
3 strumenti open source per sviluppare siti multilingua

Come configurare Grav, Git e OmegaT per creare e tradurre siti web in più lingue

In questo articolo presentiamo un sistema per creare siti multilingua che combina tre strumenti gratuiti e open source. I tre programmi in questione sono un CMS, un sistema di controllo versione e un software di traduzione assistita, ovvero:

  • Grav
  • Git
  • OmegaT

Grav

Grav è un CMS flat-file open source. CMS significa Content Management System, sistema di gestione dei contenuti. Un CMS è un programma, solitamente installato su un server web, che facilita la creazione e la gestione di siti web. Normalmente presenta un’interfaccia grafica di amministrazione, detto back-end, da cui è possibile controllare tutti gli aspetti visibili del sito, il front-end, senza dover necessariamente scrivere codice. L’aspetto del sito viene invece controllato dai cosiddetti «temi» o «template», un insieme di file installabili separatamente che modificano il layout, i colori, la distribuzione del contenuto sulla pagina, ecc.

I CMS più noti sono WordPress, Joomla, Drupal, ma ne esistono centinaia. Si calcola che circa la metà dei siti esistenti sia basato su un CMS. La maggior parte di questi sistemi, come WordPress o Joomla, salva i contenuti generati dall’utente in un database (solitamente MySQL), mentre le pagine del sito vengono generate tramite file PHP. Ci si riferisce a questi sistemi come CMS basati su una banca dati.

Al contrario di WordPress, Grav non salva i contenuti in un database. Appartiene infatti alla categoria di CMS detti «flat-file», ovvero basati su file. I contenuti generati dall’utente sono salvati come file di testo in formato Markdown (*.md). Markdown è un linguaggio di marcatura che facilita la scrittura di file che andranno poi convertiti in HTML o in altri formati. I file Markdown sono file di testo semplice che seguono una speciale sintassi.

get grav

Questa caratteristica snellisce enormemente il lavoro di amministrazione e gestione. Valga un solo dato: per eseguire una copia di sicurezza di un sito sviluppato con Grav (o con altri CMS flat-file) è sufficiente scaricare la directory che contiene il sito. Non è necessario, come avviene in un CMS basato su database, scaricare i file da un lato ed eseguire un «dump» (esportazione) del database dall’altro.

Un altro vantaggio, importantissimo ai nostri fini, è che per localizzare il sito basta creare i file di testo nelle varie lingue e modificare poche impostazioni nel file di configurazione del sistema. In un CMS basato su database dovremmo invece intervenire sulla struttura del database o installare appositi componenti aggiuntivi (plugin).

Infine, Grav è un progetto open source, cioè il suo codice è pubblico, liberamente visibile e modificabile. È stato votato «Miglior CMS open source» nel 2016 e «Miglior CMS flat file» nel 2017 da CMS Critic. Non dovendo richiamare i contenuti da un database è molto veloce, ma è anche sufficientemente versatile e potente da poter essere usato per la creazione di siti di quasi qualsiasi tipo.

Ha un’interfaccia di amministrazione, ma è possibile eseguire tutta la gestione anche direttamente dalla riga di comando, dando agli amministratori un ulteriore vantaggio a livello di flessibilità. Per quanto riguarda le funzionalità multilingua, Grav nasce già internazionalizzato, cioè è già predisposto per poter pubblicare siti in varie lingue. Questo è un aspetto per noi critico e uno dei motivi per cui l’abbiamo analizzato e studiato.

Git

Git è un programma per il controllo di versione distribuito.

Il controllo di versione è un sistema che consente di tenere traccia delle modifiche apportate a un file o a una serie di file. Questi file di solito appartengono al codice sorgente di un programma, ma il sistema può registrare le modifiche a qualsiasi file. Nel nostro contesto infatti useremo il controllo versione per controllare le modifiche ai file che costituiscono il sito, come si vedrà in seguito.

Senza entrare nei dettagli, i sistemi di controllo versione possono essere:

  • locali
  • centralizzati
  • distribuiti

I sistemi di controllo di versione centralizzati, come CVS o Subversion, hanno un unico server che contiene tutte le versioni dei file. Gli utenti scaricano («fanno il checkout») i file dal server centrale e poi li ricaricano una volta terminate le modifiche («fanno il commit»).

Nei sistemi di controllo di versione distribuiti, come Git invece, tutti gli utenti hanno una copia completa del cosiddetto «repository» (cioè del progetto completo) sul proprio dispositivo. In questo modo, se il server non fosse più disponibile, lo si potrebbe comunque ripristinare a partire dalla copia di un utente. Per approfondimenti si rimanda alla documentazione ufficiale di Git. Ai nostri scopi basti sapere che gli utenti di Git possono lavorare ciascuno su un proprio «ramo» di sviluppo, introdurre e registrare le modifiche e infine condividere queste modifiche o unirle a quelle degli altri.

Per usare Git è necessario installare il programma sul proprio dispositivo e, se lo si desidera, anche un’interfaccia grafica per maggiore comodità. Si trova di default su praticamente tutte le distribuzioni di Linux, mentre su Mac e Windows va installato a parte. Esistono anche servizi online che consentono di avere un repository Git in un server remoto senza dover necessariamente installare Git sul proprio computer. Useremo proprio uno di questi: GitLab.

GitLab

GitLab è una piattaforma web, anch’essa open source, per la gestione di repository Git. Offre varie funzionalità a seconda del tipo di abbonamento. Nella sua versione gratuita offre progetti privati e collaboratori illimitati limitandone però il numero di operazioni a 2000 (espresse come minuti di CI pipeline per gruppo al mese).

Per usare GitLab è necessario registrarsi sul sito e creare uno o più progetti mediante l’interfaccia online.

New Project GitLab

OmegaT

OmegaT è un programma di traduzione assistita open source. Un programma di traduzione assistita, o CAT tool, è un software, composto da vari moduli, che salva i testi originali e le rispettive traduzioni in un database (chiamato «memoria di traduzione») e al tempo stesso mette a disposizione dell’utente-traduttore vari strumenti integrati fra loro per facilitare l’attività di traduzione (glossari, dizionari, correttore ortografico, ecc.)

Ne abbiamo parlato ripetutamente su questo sito e rimandiamo alle varie presentazioni su di esso presenti nella sezione apposita.

Una delle particolarità di OmegaT è che può leggere file di numerosi formati, fra cui i file markdown (*.md) e i file di testo semplice (*.txt).

Un’altra particolarità è che può leggere un progetto salvato su un repository Git, consentendone la modifica a vari traduttori. Questa funzione, chiamata «team project», di fatto sostituisce il ricorso a un apposito sistema centralizzato di memorie di traduzione. Abbiamo già spiegato in un altro tutorial come creare un progetto condiviso con OmegaT e Subversion. La procedura con Git è praticamente la stessa.

OmegaT team project

Come unire i sistemi fra loro

Grav, Git e OmegaT possono essere messi in collegamento fra loro nel modo spiegato qui di seguito. Dove non si specifica la procedura dettagliatamente, si rimanda alla documentazione dei vari programmi.

Diamo per scontato che si stia già usando Grav per la creazione e amministrazione di un sito. In caso contrario, la chiara documentazione del sistema illustra come scaricarlo, installarlo e configurarlo.

In Grav è necessario installare inoltre un plugin che consente di sincronizzare bidirezionalmente l’intero sito web con un repository Git. Questo plugin si chiama Git Sync. «Bidirezionalmente» significa che le modifiche apportate da un utente al repository Git verranno riflesse nel sito e, viceversa, tutte le modifiche apportate dall’interno di Grav si riverseranno nel repository.

Git Sync

Vari autori potranno così collaborare ai testi del sito, sia nel modo consueto, cioè entrando nel back-end di Grav, sia intervenendo direttamente sui file di testo e sincronizzandoli mediante Git.

Per comodità, creiamo il repository Git principale su GitLab, per implementare tutta la procedura senza neppure doverci preoccupare di installare Git in locale. Le istruzioni esatte per creare un repository si trovano qui: https://docs.gitlab.com/ee/user/project/repository/.

Nota bene: se si deve tradurre il sito a più di una lingua, si hanno due possibilità: o creare un repository diverso per ogni lingua target, per meglio dire uno per ogni progetto di OmegaT, oppure creare un solo repository con sottocartelle in cui inserire i diversi progetti di OmegaT, una sottocartella per ogni lingua. Si consiglia di creare un repo per ogni lingua.

Ipotizziamo che si voglia creare un sito in tre lingue: italiano (lingua di partenza o L1), spagnolo (lingua di arrivo, L2) e inglese (lingua di arrivo, L3). Decidiamo di usare la prima opzione di cui sopra, cioè di creare tre repository diversi:

  1. un repository Git che conterrà la struttura del sito nella lingua originale (L1);
  2. un repository Git per il progetto di traduzione di OmegaT da L1 a L2
  3. un repository Git per il progetto di traduzione di OmegaT da L1 a L3.

La sincronizzazione fra il repository 1 e il sito avviene tramite il plugin Git Sync, ogni volta che si preme l’icona di sincronizzazione.

La sincronizzazione fra il repository 2 e i rispettivi progetti locali di OmegaT avverrà nel momento in cui OmegaT si collega al repository per la prima volta e tutte le volte che viene salvato (anche automaticamente) il progetto di traduzione da parte di uno dei traduttori coinvolti (se ce n'è più d'uno). Idem per il repository 3. 

Il salvataggio dei file tradotti con OmegaT all’interno del repository 1 dovrebbe avvenire quando si seleziona il comando «Commit target files» in OmegaT. Usiamo il condizionale perché a causa di un bug, al momento in cui scriviamo, questo comando non funziona se la cartella target viene impostata in un repository diverso da quello che ospita il progetto di traduzione. In attesa della soluzione a questo problema da parte dei programmatori di OmegaT, si suggerisce di copiare i file target dal progetto locale al server web attraverso una connessione FTP.

Come configurare OmegaT

Il flusso di lavoro delle traduzioni viene gestito da OmegaT.

Un progetto di OmegaT è costituito da una serie di cartelle:

  • dictionary
  • glossary
  • omegat
  • source
  • target
  • tm

e da un file omegat.project che contiene le specifiche del progetto.

Per cominciare, creiamo quindi un nuovo progetto in locale, sul nostro computer, facendo clic su Project > New, e scegliendo la coppia di lingue che ci serve (nel nostro esempio, da italiano a spagnolo). Si ricordi di selezionare la casella che imposta le regole di segmentazione come specifiche per il progetto, così da evitare differenze di segmentazione fra i vari traduttori coinvolti nel progetto. Allo stesso modo, spuntare anche la casella che rende le opzioni per il filtro dei file specifiche per il progetto.

Nella cartella /source/ dovranno trovarsi i file da tradurre. Questi file sono i file *.md contenuti nella cartella user/pages/ del sito creato con Grav, per cui è necessario indicare a OmegaT di usare quella cartella come orgine dei file da tradurre.

I file tradotti verranno poi salvati nella cartella /target/. Il meccanismo multilingue di Grav prevede tuttavia che i contenuti nelle varie lingue (i file *.md) siano presenti tutti nella medesima cartella. Per esempio, per avere una pagina iniziale nelle 3 lingue di cui sopra, bisogna avere home.it.md, home.es.md e home.en.md all’interno della cartella 01.home.

Questo si ottiene in OmegaT attraverso la «mappatura» delle cartelle di progetto. Grazie a questa funzionalità, non necessariamente tutte le cartelle devono risiedere all’interno della cartella principale del progetto. È possibile configurare OmegaT in modo che ciascuna cartella del progetto venga reindirizzata a una cartella di un altro repository, purché ugualmente accessibile.

A proposito del filtro dei file, in precedenza abbiamo detto che OmegaT è in grado di tradurre file in formato Markdown. Tuttavia questo filtro, che fa parte del plugin Okapi per OmegaT, è ancora in fase beta di sviluppo. Una delle attuali carenze è che non rispetta gli spazi bianchi a inizio riga quando genera i file tradotti, i quali sono così di fatto inutilizzabili in Grav. In attesa che questo problema venga risolto dagli sviluppatori del plugin Okapi, si consiglia di usare il filtro per file di testo semplice (Text). La differenza principale è che appariranno come traducibili sia l’intestazione dei file che il corpo del testo dei file Markdown. La maggior parte delle opzioni contenute nell’intestazione vanno lasciate inalterate, ma a volte si trovano stringhe da localizzare anche nell'intestazione, per cui questo apparente limite in realtà diventa un vantaggio. Se usassimo il filtro per file Markdown saremmo costretti a intervenire manualmente sull'intestazione dopo aver generato i file target.

Dalla finestra Project Specific File Filters, fare clic su Text e quindi su Options... Selezionare l’opzione che segmenta il testo di origine in corrispondenza degli a capo (line breaks).

Successivamente bisogna indicare a OmegaT di salvare i file tradotti con un nome diverso da quello originale, seguendo la sintassi con il suffisso della lingua target. Come si diceva, poiché i file tradotti devono essere salvati nella stessa cartella dei file originali, è necessario rinominarli per due motivi:

  • non si vuole che gli originali vengano sovrascritti;
  • come visto in precedenza, la presenza dei diversi file in lingua nella stessa cartella è il presupposto per il corretto funzionamento del sito multilingue.

A questo scopo, dalle impostazioni di progetto, fare clic su File Filters..., scegliere il filtro Text e quindi premere il tasto Edit... Nella finestra di dialogo che si apre aggiungere il pattern *.it.md e aggiungere ${nameOnly-0}.es.md nella casella Translated Filename Pattern. nameOnly-0 è il codice che indica a OmegaT di prendere soltanto la parte del nome di un file escludendo suffisso ed estensione. Nel caso in cui si stia traducendo a un'altra lingua va cambiato il codice ISO della lingua.

Aggiungendo il pattern *.it.md OmegaT ignorerà i file contenuti nella cartella definita come source che sono in una lingua diversa da quella impostata come originale (italiano nel nostro caso).

file filter txt

Dalle proprietà del progetto è necessario anche fare clic su Repository Mapping e aggiungere nella prima tabella l’indirizzo di tutti i repository che si useranno, cioè l’URL del progetto/repository 1 creato su GitLab e quindi quello di tutti i repository che conterranno i progetti di OmegaT.

Nella parte inferiore della stessa schermata inserire invece la mappatura delle cartelle:

  • la cartella source = alla cartella user/pages del repository 1;
  • la cartella target = alla cartella user/pages del repository 1.

La cartella user/pages di Grav è quella che contiene le cartelle e file corrispondenti alle pagine di un sito.

mapping omegat

Per evitare di caricare nell’elenco dei file da tradurre tutte le eventuali immagini e PDF presenti nel sito, va anche configurato un filtro nelle impostazioni del progetto condiviso, escludendo tutti i file con estensione jpg, gif, png e pdf. È anche possibile scrivere una regex che indichi a OmegaT di ignorare tutto quello che non sia .md, ma per semplicità abbiamo deciso di esplicitare i file da escludere uno per tipo.

exclusions

Provare a ricaricare il progetto e controllare che avvenga la sincronizzazione con i repository impostati.

A questo punto è necessario «fare il commit» del progetto locale in un progetto condiviso tramite Git, usando il corrispondente comando Git.

Per GitLab, la procedura può essere svolta da terminale, se si sta usando un sistema operativo su cui è installato Git, oppure si può ricorrere all'interfaccia web di GitLab, la quale tuttavia non consente di caricare cartelle, ma solo file.

Il modo più facile è quello di creare manualmente le cartelle minime di un progetto di OmegaT, cioè: 

  • glossary
  • omegat
  • source
  • tm

e caricare il file omegat.project al livello root del progetto (va caricato il file omegat.project del progetto creato in locale).

Con questa configurazione, tutti i traduttori che collaborano al progetto potranno scaricare localmente il progetto di traduzione corrispondente alla loro lingua, tradurre i file e infine generare i file target, che verranno salvati nella stessa cartella impostata come source, ma con il suffisso della lingua di destinazione.

Come si diceva, a quel punto non resterebbe che salvare sul server web tutti i file tradotti, in modo che vadano online insieme al resto del sito. Fino alla prossima risoluzione del bug di OmegaT esistente, questa operazione va svolta via FTP o simili.

Oltre a questo, ci sono alcuni accorgimenti necessari da realizzare all’interno di Grav. Sono tutti spiegati nel capitolo Multi-language della documentazione ufficiale, per cui qui non ci dilungheremo.

Particolarmente importante è l’aggiunta dell’opzione «slug» all’interno di ogni pagina. Questa opzione indica a Grav come dev’essere tradotto l’URL di una pagina. Usando lo stesso esempio della documentazione, se il sito avesse la seguente struttura:

- 01.Animali
  - 01.Mammiferi
    - 01.Pipistrelli
    - 02.Orsi
    - 03.Volpi
    - 04.Gatti
  - 02.Rettili
  - 03.Uccelli
  - 04.Insetti

avremmo per esempio un URL del tipo http://dominio.com/animali/mammiferi/orsi. Al momento di tradurre il sito in spagnolo, è utile che anche l’URL compaia in spagnolo. Per farlo, basta aggiungere l’opzione «slug:» seguita dalla traduzione (senza caratteri speciali). Per esempio:

---
title: Mamíferos
slug: mamiferos
---

Seguendo questo criterio l’URL in spagnolo avrà un aspetto simile a questo: http://dominio.com/animales/mamiferos/osos

Grazie al procedimento spiegato per sommi capi in questo articolo è possibile non soltanto tradurre un sito nuovo, ma anche tradurre tutti gli aggiornamenti che vengono introdotti sul sito stesso. Sarà sufficiente impostare notifiche (automatiche o meno) da ricevere ogni qual volta gli autori aggiungono o modificano contenuti nella lingua di partenza e, a quel punto, tradurre i testi nuovi.

Per quanto possa sembrare complesso, il procedimento è molto più semplice da realizzare che da spiegare. Una volta impostato per un primo sito, i passaggi sono uguali per tutti gli altri. Per un project manager, un titolare di una piccola attività e anche per chi ha un’agenzia di traduzioni come noi la combinazione di Grav, GitLab e OmegaT apre veramente un ventaglio di opportunità per gestire con maggiore flessibilità ed efficienza la crescente domanda di sviluppo di siti multilingua.

Per eventuali dubbi o domande, la sezione Commenti sottostante è aperta a tutti. Se vuoi internazionalizzare il tuo sito web o tradurlo in un’altra lingua, puoi prenotare una consulenza gratuita senza impegno.

prenota una consulenza gratuita di 15 minuti senza impegno

 

 

Qabiria white logo

Crediamo nell’aumento della produttività attraverso l’uso creativo della tecnologia.

il traduttore insostituibile

Ultime notizie

Contatti

Qabiria Studio SLNE
Carrer Lleida, 3 1-2
08912 Badalona
(Barcelona)
SPAGNA

+34 675 800 826

qabiria

Inviaci un messaggio

Ricevi la newsletter

Vuoi leggere gli articoli e le novità di Qabiria direttamente nella posta?