L’attributo lang dell’html è sotto il naso di tutti, ma non sempre viene utilizzato correttamente. Spesso se ne parla in contesto seo, ma può tornare molto utile anche nello scambio dati fra back-end e front-end.

Spesso infatti si comincia a ragionare su decodifiche della url, salvataggio in sessione o cookie, ma l’html ci mette già a disposizione una soluzione strutturata in cui leggere e scrivere questa informazione.

Attributo lang: come back-end e front-end possono sfruttarlo.

Questa mattina in studio, durante lo sviluppo del nostro nuovo framework, stavamo analizzando proprio la modalità di scambio del dato di localizzazione fra back-end e back-end.
Anche se la url riporta il segmento di localizzazione (it, en-US, …), il front-end dovrebbe eseguire un parsing per estrarla e per farlo dovrebbe conoscere i criteri con cui sono disposti i segmenti. Al contrario, se il back-end, che già conosce questo dato, popolasse l’attributo lang quando serve la pagina html, il front-end lo troverebbe già nel dom e con una sola riga di codice potrebbe estarlo ed eventualmente settare un default nel caso non fosse presente.

var lang = document.documentElement.getAttribute("lang") || "it";

Quali formati standard di localizzazione supporta?

A questo punto, gestendo nel framework, sia le localizzazioni in standard ISO 639-1 (en) sia quelle in BCP 47 (en-US), ci siamo chiesti quali fossero i formati supportati nativamente dall’attributo lang di html. Ecco la risposta:

  • ISO 639-1: un codice a due lettere per rappresentare le lingue. Ad esempio, “en” per l’inglese, “fr” per il francese, “it” per l’italiano, ecc.
  • ISO 639-2: un codice a tre lettere per rappresentare le lingue. Ad esempio, “eng” per l’inglese, “fra” per il francese, “ita” per l’italiano, ecc.
  • ISO 639-3: un codice a tre lettere per rappresentare le lingue, che estende ISO 639-2. Ad esempio, “eng” per l’inglese, “fra” per il francese, “ita” per l’italiano, ecc.
  • BCP 47: uno standard utilizzato per rappresentare le lingue in modo più preciso rispetto ai formati ISO 639-1 o ISO 639-2. Consente di specificare non solo la lingua, ma anche la regione, il dialetto e altre caratteristiche linguistiche. Ad esempio, “en-US” per l’inglese negli Stati Uniti, “fr-CA” per il francese in Canada, “it-IT” per l’italiano in Italia, ecc.
  • IETF Language Tag Registry: un registro di tag linguistici gestito dall’Internet Engineering Task Force (IETF), che estende BCP 47 e fornisce una maggiore flessibilità nella definizione delle lingue. Ad esempio, “zh-Hans” per il cinese semplificato, “sr-Cyrl-RS” per il serbo in cirillico in Serbia, ecc.