26/02/2021
Creare siti multilingua con Ruby on Rails
Nel presente articolo si esamineranno le tecniche per “sfruttare” i18n in un’applicazione Rails, consentendo così di poter tradurre tutti i contenuti presenti in più lingue contemporaneamente.
Supponendo di avere già creato un’applicazione, prima di eseguire le traduzioni, dobbiamo decidere quali lingue saranno supportate.
Nel file config/application.rb si devono pertanto inserire le seguenti righe:
config.i18n.available_locales = [:it, :en]
config.i18n.default_locale = :it
In questo modo abbiamo abilitato due lingue per la nostra applicazione (l’italiano e l’inglese) e abbiamo predisposto come lingua predefinita l’italiano.
Sarebbe utile in tal senso sfruttare la gemma rails-i18n che contiene dati locali per lingue diverse (ad esempio i nomi dei mesi, le regole di pluralizzazione ed altri strumenti utili per la traduzione).
CREAZIONE DELLE TRADUZIONI
In seguito alla configurazione appena illustrata, possiamo avviare la traduzione del testo per le differenti pagine del sito.
Esistono due approcci di base: il primo, il più semplice, consiste nell’utilizzare le viste localizzate, creando pagine differenti rinominate e integrando il codice del linguaggio nel nome del file; ad esempio:
index.it.html.erb
index.en.html.erb
In questo modo abbiamo creato due pagine, una per la lingua inglese e una per l’italiano, nelle quali andremo ad inserire i rispettivi contenuti nelle lingue scelte.
Tuttavia, questo primo approccio non sempre è consentito; per ovviare a tale problematica, esiste la possibilità di sfruttare dei file esterni in cui vengono memorizzate le traduzioni, suddivisi per lingua e richiamati in base alla lingua scelta.
Questo secondo metodo prevede, per impostazione predefinita di Rails, dei file YAML che devono essere archiviati nella directory config/locales.
Avremo pertanto diversi file del tipo it.yml e en.yml, nei quali verranno inserite tutte le traduzioni.
Ogni file comincerà con il codice della lingua e proseguirà con una coppia chiave-valore che corrisponderà alle traduzioni desiderate, identificate da una key e sfruttate per richiamare la traduzione stessa; ad esempio:
en:
hello: “Hello World.”
it:
hello: “Ciao Mondo.”
Una volta popolati i file YAML non resta che inserire le traduzioni nelle corrette posizioni, quindi andiamo in index.html.erb ad esempio, e sostituiamo la stringa desiderata con questo codice:
<%= t 'hello' %>
Quando la pagina viene richiesta, Rails cerca la stringa che corrisponde alla chiave fornita e la visualizza. Se la traduzione richiesta non può essere trovata, Rails visualizzerà semplicemente la chiave sullo schermo (e la trasformerà in una forma più leggibile all'uomo).
Le chiavi di traduzione possono essere denominate con qualsiasi nome ma ovviamente si consiglia di dare loro dei nomi significativi in modo da poter capire a quale testo corrispondono.
Questo approccio è molto efficace, ma per siti Web di grandi dimensioni, va leggermente migliorato, altrimenti sarebbe necessario utilizzare nei file YAML delle chiavi univoche per ogni traduzione da effettuare.
Sfruttando i raggruppamenti possiamo migliorare la lettura dei file YAML e l’utilizzo delle chiavi per le traduzioni. Ad esempio è buona norma raggruppare le traduzioni innanzitutto per pagina del sito:
en:
home:
menu:
hello: “Hello World.”
e analogamente per il file in italiano.
Ovviamente va corretto il percorso nella vista relativa; ossia:
<%= t 'home.menu.hello ' %>
Il livello di nidificazione non è illimitato e le chiavi in diversi gruppi possono avere nomi identici.
È utile, tuttavia, seguire la struttura a cartelle dell’applicazione.
Allo stesso modo si possono tradurre tutti gli attributi e le azioni dei vari modelli del sito.
Nel prossimo articolo partiremo proprio da questo ultimo punto e proseguiremo fino all’utilizzo di una gemma che semplifica ulteriormente la creazione di un sito multilingua.