Forme plurali de-numeralizzate

Molti errori di localizzazione hanno origine dall’incorretto utilizzo dei segnaposto nelle stringhe sorgenti. Gli sviluppatori spesso non considerano tutte le implicazioni linguistiche dell’uso di forme parametriche, come per esempio la necessità di garantire la concordanza tra sostantivo e numerale.

Un semplice esempio è fornito dall’interfaccia di Gmail. Il riquadro che permette di invitare gli amici a utilizzare il servizio riporta una stringa che indica il numero di inviti ancora a disposizione. L’immagine seguente affianca la versione originale inglese e la traduzione in italiano e francese nel caso del valore iniziale 50.

Gmail - Traduzione di "n left" in italiano e francese

La stringa n left, forma contratta di n invite(s) left, può essere espansa considerando i valori {50, 49, … 2, 1, 0} assunti dal segnaposto numerale n:

50 invites left
49 invites left

2 invites left
1 invite left
0 invites left

Si capisce quindi come la forma inglese n left sia una soluzione compatta basata sull’invarianza di left, non applicabile genericamente ad altre lingue.

Quando lo sviluppatore non considera queste problematiche, il traduttore esperto si difende applicando le tattiche di de-numeralizzazione. Queste prevedono l’uso di forme come n a disposizione, oppure di soluzioni meno eleganti come n rimasto(i). Nel caso specifico anche la traduzione n rimasti è più che accettabile, dato che la stringa è valida nel 98% delle varianti (n≠ 1) e pochi utenti riescono a visualizzare il caso n=1.

Per permettere la piena concordanza in italiano lo sviluppatore avrebbe dovuto gestire separatamente il caso singolare n=1, fornendo 2 stringhe distinte:

n=1 → n invite left
n≠ 1
n invites left

Questa scelta non avrebbe risolto il problema della lingua francese, in cui il valore n=0 concorda con la forma singolare. Le forme avrebbero dovuto essere quindi tre:

n=0 → n invites left
n=1 → n invite left
n≠ 0,
n≠ 1 n invites left

Generalizzando queste considerazioni si arrivano a definire le cosiddette forme plurali, che integrate nel sistema di internazionalizzazione del software permettono di gestire in modo sistematico le peculiarità di concordanza sostantivo-numerale dei vari idiomi del mondo.

Il lettone, per esempio, ha una forma di concordanza specifica per n=0 e per i valori che finiscono con 1, tranne 11. Altre lingue hanno necessità ancora più peculiari, che richiedono per esempio la definizione di casi specifici per i numeri che finiscono per 01, 02, 03, 04 (sloveno) oppure per i valori 2, 3-6, 7-10 (irlandese).

Le casistiche necessarie per le forme plurali sono quindi numerose. In Google Chrome, browser localizzato in più di 40 lingue, la struttura di internazionalizzazione ne definisce 6, descritte di seguito.

NUMBER_ZERO
Utilizzata per n=0 e per i valori di n assimilabili a 0 (come 2..19, 101..119, … in rumeno).

NUMBER_ONE
Utilizzata per n=1 e per i valori di n assimilabili a 1 (come 0 in francese oppure 21, 31, … in ucraino). La speciale eccezione portoghese non è al momento gestita.

NUMBER_TWO
Utilizzata per n=2 e per i valori di n assimilabili a 2 (come 102, 202, 302, … in sloveno).

NUMBER_FEW
Questa condizione è valida per un sottoinsieme di lingue e la definizione di “few” varia:

  • croato, serbo, russo, ucraino, polacco: n termina con 2, 3 o 4 (ma non con 12, 13, 14)
  • slovacco e ceco: n=2, 3
  • sloveno: n=3, 4 oppure n termina con 03, 04
  • arabo: n=3..10 oppure n termina con 03..10

NUMBER_MANY
Questa condizione è valida solo per l’arabo e la definizione di “many” è: n=11..99 oppure n termina con 11 o 99.

NUMBER_DEFAULT
La stringa di default, che deve essere definita, viene visualizzata per tutti i numeri non gestiti dalle regole precedenti. Per la lingua turca, che non ha forme plurali, questo è il solo valore necessario. Per la lingua lituana, è utilizzata invece per i numeri da 11 a 19.

Tornando all’esempio iniziale, nel sistema di Google Chrome la stringa sorgente n invite(s) left viene espansa in generale in 6 stringhe distinte:

NUMBER_ZERO invites left
NUMBER_ONE invite left
NUMBER_TWO invites left
NUMBER_FEW invites left
NUMBER_MANY invites left
NUMBER_DEFAULT invites left

Ogni lingua utilizza poi da 1 a 6 casistiche per creare le opportune forme plurali, effettuando la traduzione in modo che sostantivo e numerale concordino.

Anche se il sistema di Google Chrome appare in sé complicato (e ve ne sono in realtà di più semplici), dal punto di vista del traduttore è relativamente lineare e sufficientemente intuitivo. Il problema è che spesso il traduttore non si aspetta di ricevere un tale regalo dallo sviluppatore.

Considerando per esempio la stringa n sec(s) ago che appare nei dettagli di download in Google Chrome, il team polacco avrebbe dovuto utilizzare le casistiche NUMBER_ONE, NUMBER_FEW e NUMBER_DEFAULT. Al contrario, nella attuale versione 2.0.172.8 ha fornito una forma per n=1 e una forma simile a “Secondi rimanenti: n” per tutti gli altri casi:

Pozostało sekund: NUMBER_ZERO
Pozostała NUMBER_ONE sekunda
Pozostało sekund: NUMBER_TWO
Pozostało sekund: NUMBER_FEW
Pozostało sekund: NUMBER_MANY
Pozostało sekund: NUMBER_DEFAULT

Anche altre delle lingue che giustificano l’esistenza di un sistema di gestione delle forme plurali, come il croato e il ceco, hanno avuto una linea di comportamento simile.

Sembra quindi che i traduttori di certe lingue siano talmente abituati a sviluppatori che ignorano le forme plurali da fornire sistematicamente traduzioni de-numeralizzate😉

Lascia un commento

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...


%d blogger cliccano Mi Piace per questo: