26/03/2021
Creare siti multilingua con Ruby on Rails | Parte seconda
Nell’articolo precedente, abbiamo visto come sfruttare alcune funzionalità di base di Ruby on Rails per realizzare dei siti multilingua in maniera semplice e veloce.
Al fine di offrire una visione completa del tema, si procede ora a illustrare come effettuare la traduzione dei modelli e quindi di tutte le entità del database che formano l’applicazione Web.
In maniera analoga a quanto fatto in precedenza, anche per tutti gli attributi dei modelli sfrutteremo dei file YAML in cui andremo ad inserire le traduzioni, ed in particolare, per assegnare ad ogni attributo del modello la corretta traduzione, basta inserire nel rispettivo file (nel nostro esempio it.yml o en.yml) quanto segue:
it:
activerecord:
attributes:
article:
author: "Mario Rossi"
title: "Il mio primo articolo"
en:
activerecord:
attributes:
article:
author: "Mario Rossi"
title: "My first article"
E’ possibile inoltre tradurre anche tutti i “bottoni” utilizzati per gestire le azioni sui modelli, come creare, eliminare o modificare un record. Ad esempio, volendo tradurre il bottone di submit del form di creazione di un articolo, sempre similmente useremo:
it:
global:
forms:
submit: "Crea articolo"
en:
global:
forms:
submit: "Create article"
Utilizzeremo poi la chiave nella rispettiva vista per la traduzione, nel seguente modo:
<%= form.submit t('global.forms.submit') %>
Da quanto riportato, si può notare come l’impostazione dei file di traduzione delle parti statiche del sito Web - modelli, attributi di quest’ultimo o le rispettive azioni su di esso - avviene in maniera praticamente identica, tranne che per alcune parole chiave che vanno usate per identificare i modelli e le azioni.
L’aspetto importante per cui porre attenzione è indentare correttamente le chiavi all’interno del file YAML, altrimenti c’è il rischio che queste ultime non vengano richiamate in maniera corretta.
PLURALIZZAZIONE, DATA E ORA
Per concludere la panoramica su i18n è bene evidenziare come quest’ultima preveda già tutte le possibili pluralizzazioni delle parole: non è necessario dunque scriverle da zero, ma occorre solo fornire la chiave corretta per ogni caso possibile.
Ad esempio, per i messaggi di errore che possono apparire alla creazione di un articolo, quando inviamo il form con l’azione di submit:
it:
global:
forms:
submit: "Crea articolo"
messages:
errors:
one: "Un errore ha impedito il salvataggio di questo articolo"
other: "%{count} errori hanno impedito il salvataggio di questo articolo"
en:
global:
forms:
submit: "Create article"
messages:
errors:
one: "One error prohibited this article from being saved"
other: "%{count} errors prohibited this article from being saved"
Dove %{count} è l’interpolazione: si prende il valore fornito e lo si inserisce nella stringa di traduzione.
Anche per data ed ora vengono fornite già da i18n delle traduzioni per adattarsi al meglio alla lingua corrente; infatti come sappiamo, ad esempio, in Inghilterra non avremmo le 18:00 ma piuttosto le 6pm, in questo modo la nostra applicazione Web si adatterà a lavorare secondo la lingua impostata.
Per sfruttare la traduzione di data e ora basta semplicemente anteporre all’attributo data la lettera l, come segue:
<%= l article.created_at %>
CONCLUSIONI
Negli ultimi due articoli abbiamo visto come introdurre il supporto di i18n per la nostra applicazione Web.
Abbiamo imparato come e dove memorizzare le traduzioni, come cercarle, come tradurre i messaggi di errore e tutto ciò che riguarda ActiveRecord.
Nel prossimo articolo vedremo come sfruttare le potenzialità di una gemma per realizzare o trasformare modelli da un’unica lingua a multilingua, mantenendo la gestione quanto più semplice e lineare possibile; si evidenzierà come, una volta impostato tutto correttamente, passando da una lingua ad un’altra, la transizione avviene in maniera del tutto naturale.