consiglio tecnico su gettext e i18n

Luca Ferretti elle.uca@infinito.it
Gio 24 Feb 2005 19:53:04 CET


Il giorno gio, 24-02-2005 alle 11:47 +0000, Marco Colombo ha scritto:
> yo!!!

<snip>
> >
> >Should I do this? I was under the impression that building string from
> >fragments is not considered good practise from the i18n POV. Please
> >enlighten me here :) Is it a good idea to build the strings in a way
> >like this:
> >
> >s = _("%i packages listed, %i installed, %i broken. %i to install/upgrade, %i 
> >       to remove")
> >
> >and build the other two with it?
> >
> >_("%s; %s will be used", s, space)
> >_("%s; %s will be freed", s, space)
> >
> >Couldn't it e.g. cause trouble with left-to-right languages (just a
> >guess/concern)? 
> >
> 
> qualcuno sa rispondere a questo dubbio? magari con indicazioni a qualche documento su web, di modo che posso indicarlo al responsabile?
> grazie mille!
> ciao, marco

Non ho ancora avuto tempo di rivedere la traduzione di synaptic, ma qui
IMHO abbiamo di fronte una serie di problemi a diverso livello.

1) troppe sostituzioni nel messaggio: in un solo messaggio ci sono 6
sostituzioni... non che non sia permesso crei problemi tecnici, ma
francamente da traduttore non ne ho mai viste così tante insieme (in
casi del genere una tabella non sarebbe male). La lunghezza e
complessità della stringa genera il punto 2, e cioè

2) assenza di gestione dei plurali: cosa accade se ho "2 pacchetti
elencati, 1 installati, 1 danneggiati, 0 da installare/aggiornare, 4 da
rimuovere .."?  E consideriamo che ci sono lingue che usano forme
diverse a seconda di quanti elementi ci sono (per esempio lo slovacco).
Per fare ciò bisogna spezzare il messaggio in unità atomiche.

3) necessità di ricombinare le stringhe: se anche riducessimo le
stringhe in unità "atomiche" per il 2, si presenterebbe la necessità di
marcare come traducibile anche la stringa di ricombinazione, per
permettere la localizzazione dei segni di interpunzione. In questo modo
infatti si permette di localizzare i segni di interpunzione ed altro.

IMHO, e ripeto IMHHHHO che non so dove questo messaggio appaia, una
soluzione possibile per eliminare tutti i problemi è 

        /*translators: %i is the number of packages*/
        listed_packages = g_strdup (ngettext ("%i listed",
                                              "%i listed",
                                              n_listed_packages),
                                    n_listed_packages);
        /*translators: %i is the number of packages*/
        installed_packages = g_strdup (ngettext ("%i installed",
                                                 "%i installed",
                                                 n_installed_packages),
                                       n_installed_packages);
        [...] 
        
        /* translators: %s in this message will   */
        /* be replaced in the order:              */
        /* 1st: %i listed                         */
        /* 2nd: %i installed                      */
        /* ...                                    */
        /* nth:  %s will be [used|freed]          */
        final_string = g_strdup (_("Packages: %s, %s, %s, %s ..."),
                           listed_packages, installed_packages ...);

Ovviamente gestire in tal modo un messaggio è da folli, ma per garantire
sia la gestione dei plurali (importante per la i18n) sia la
ricostruzione corretta della stringa non vedo altro modo. Ah, per il rtl
(right-to-left) in questo modo non dovrebbe esserci problema alcuno,
ciascuna stringa atomica viene "invertita" in fase di traduzione, così
come quella di ricostruzione. Però potrei sbagliare :-) 

PS: ma cambiare la UI, no?

-- 
Luca Ferretti <elle.uca@infinito.it>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 189 bytes
Desc: Questa parte del messaggio =?ISO-8859-1?Q?è?Url : http://lists.linux.it/pipermail/tp/attachments/20050224/ee98140c/attachment.pgp


Maggiori informazioni sulla lista tp