[spip-dev] [oct@zoy.org: [SPIP] vers un spip multilingue]

Désolé du crosspost entre spip@rezo et spip-dev@rezo.

Du côté de la configuration, je pense que le mieux est de commencer en
essayant de faire de la "négociation" avec le navigateur afin de
connaître la langue à afficher dans l'interface. Ensuite, on peut
prévoir un système de cookie permettant au rédacteur de choisir sa
langue de préférence.

Juste une remarque sur ce point : le rédacteur "novice" devrait avoir sa
langue réglée sur la langue "par défaut" du site ; par la suite, il
préciserait éventuellement une autre langue dans une page ad hoc, qui lui
poserait non pas un cookie (lié au navigateur) mais un $prefs[] (lié au
rédacteur, comme le choix de la couleur de l'interface).

Pour le choix technique entre gettext et une solution maison, je n'ai pas de
préférence ; Antoine avait proposé un format plus simple à gérer (pas de
.po/.mo) mais moins standard... (l'avantage du format en question était que
le français serait une langue comme une autre, ce qui nous autoriserait à
corriger l'orthographe ou la tournure d'une phrase sans casser toutes les
traductions.)

Et, oui, commençons par ecrire/inc_presentation.php3...

-- Fil

le rédacteur "novice" devrait avoir sa langue réglée sur la langue
"par défaut" du site

Je pense plutôt qu'il doit avoir sa lanque réglée par défaut (lors de
la première connexion) en fonction de la configuration de son
navigateur.

Comme ça, sur un site avec des contributeurs en trois langues, chacun
aura directement l'interface dans la bonne langue pour peu que son
navigateur soit bien configuré.

-Nicolas

Pour le choix technique entre gettext et une solution maison, je n'ai pas de
préférence ; Antoine avait proposé un format plus simple à gérer (pas de
.po/.mo) mais moins standard...

C'était ça :

  -> Stockage <-

$lang_str['hello_spip'] = 'Bienvenue dans SPIP.';
$lang_str['hello_n_messages'] = 'Vous avez @nb_messages@ nouveaux
  messages dans votre messagerie.';
$lang_str['hello_1_message'] = 'Vous avez un nouveau message dans votre
  messagerie.';
$lang_str['hello_no_message'] = 'Il n'y a aucun nouveau message dans
  votre messagerie.';

  -> Affichage <-

echo lang('hello_spip');

$msgs = mysql_num_rows(...);

if ($msgs > 2)
  echo lang('hello_n_messages',
    array('nb_messages' =>$row['count']));
else if ($msgs == 1)
  echo lang('hello_1_message');
else
  echo lang('hello_no_message');

(l'avantage du format en question était que
le français serait une langue comme une autre, ce qui nous autoriserait à
corriger l'orthographe ou la tournure d'une phrase sans casser toutes les
traductions.)

Oui, surtout qu'on joue souvent les maniaques de la formulation.

@ Nicolas Hoizey <nhoizey@php.net> :

"pour peu que son navigateur soit bien configuré."

Elémentaire mon cher Watson. Je fais plus confiance à la langue par défaut
du spip qu'à celle du navigateur. Et ma proposition donne une solution plus
"autocontenue" (si ce mot existe).

-- Fil

"pour peu que son navigateur soit bien configuré."

Elémentaire mon cher Watson. Je fais plus confiance à la langue par
défaut du spip qu'à celle du navigateur.

95% des utilisateurs de IE et Netscape installent une version
localisée du navigateur.

Pour Mozilla, je pense qu'il y a surtout des versions anglaises.

Avec ma solution, un allemand aura directement la version allemande,
un français aura directement la version française, etc. Avec Mozilla,
ce sera par défaut la version anglaise ...

Et ma proposition donne une solution plus "autocontenue" (si ce mot
existe).

Avec ta solution, si l'admin est français il aura tendance à mettre la
langue par défaut du SPIP à français, donc un allemand ou un anglais
n'y comprendra rien en arrivant ...

-Nicolas

        -> Stockage <-
$lang_str['hello_spip'] = 'Bienvenue dans SPIP.';
        -> Affichage <-
echo lang('hello_spip');

C'est à priori le même fonctionnement que celui proposé dans le
message de PEAR-DEV dont je proposais la lecture, ça tombe bien ... :wink:

-Nicolas

Bonsoir,

j'ai presque fini mon petit exemple avec inc-presentation (si quelqu'un
a déjà fait du gettext avec php, je prends tout demi tutorial).

Je veux pas dire, mais ça a l'air sérieusement bordélique, gettext...
Si quelqu'un a un tutorial simple pour PHP :wink:

http://www.gnu.org/manual/gettext/html_mono/gettext.html

D'autre part d'après un message de forum gettext a des problèmes
sous Windows :

http://uk.php.net/manual/en/ref.gettext.php

Je veux pas dire, mais ça a l'air sérieusement bordélique, gettext...

Le (seul) truc qui me plaît, c'est la notation de la fonction _("texte") ;
et aussi le fait que c'est le standard...

-- Fil

Je ne pense pas qu'un choix de langue par défaut serve à grand chose. Si
SPIP devient international et que chacun peut facilement créer sa propre
version de langue, il faudrait permettre au webmestres de définir leur
propre langue par défaut. Ainsi on pourrait définier de différentes versions
de SPIP qui seraint chacune munies d'une différente définition de la langue
principale/par défaut, sans pourtant avoir d'autres différences.

Si je prend l'exemple d'un site qu'on a réalisé il y a peu de temps:
domaine.com envoie vers la version anglaise et domain.de vers la version
allemande. Après libre au visiteur de se déplacer vers le site dans une
autre langue.

On peut exploiter les infos du browser pour diriger le visituer vers un
site - mais c'est qc que chaque créateur de sites peut réaliser soi-même.
Il serait sans dout le bienvenu si un tel procédé serait préparé dans SPIP,
mais au point où cela en est on peut sans dout compter sur les compétences
techniques des webmestres pour trouver quelques solutions eux-mêmes. Je ne
veux pas dire que c'est du superflux mais que faire d'abord?

Klaus

Je ne pense pas qu'un choix de langue par défaut serve à grand
chose.

C'est une question de confort.

Si SPIP devient international et que chacun peut facilement créer sa
propre version de langue, il faudrait permettre au webmestres de
définir leur propre langue par défaut.

La langue d'interface concerne l'utilisateur, pas le site, selon moi.

En général, si je suis un utilisateur français lambda et que j'arrive
sur un site qui dispose de plusieurs versions d'interface, dont une
française, je serais heureux qu'on me propose celle-ci par défaut.

Si je prend l'exemple d'un site qu'on a réalisé il y a peu de temps:
domaine.com envoie vers la version anglaise et domain.de vers la
version allemande.

C'est un autre problème à mon avis, et ce n'est pas du tout
incompatible avec ma proposition.

Un exemple concret :

Un utilisateur dont le navigateur est configuré avec le français comme
langue préférée arrive pour la première fois sur phpHeaven, il arrive
directement sur la version française du site.

Un utilisateur dont le navigateur est configuré avec l'anglais comme
langue préférée arrive directement sur la version anglaise du site.

Un utilisateur dont le navigateur est configuré avec l'allemand comme
langue préférée et l'anglais comme seconde langue arrive directement
sur la version anglaise du site.

Un utilisateur qui n'a aucune configuration de langue mais a installé
une version française de IE arrive directement sur la version
française.

Une fois sur le site, a tout moment, il est possible de passer d'une
version à une autre.

Un utilisateur qui autorise les cookies aura par défaut la version
qu'il a consulté la dernière fois qu'il est venu, quelle que soit sa
configuration de navigateur.

etc ...

-Nicolas

Le (seul) truc qui me plaît, c'est la notation de la fonction _("texte") ;
et aussi le fait que c'est le standard...

Quelle fonction _ ??? Il n'y a rien de tel dans la doc PHP...

Juste comme ça, je viens d'installer PHPAccelerator
(http://www.php-accelerator.co.uk/), ça fuse !
Les chargements de page passent de 11 à 3 millisecondes
depuis le cache. Quant aux recalculs, leur durée est
divisée par 5 à 10....

a+

Antoine.

Quelle fonction _ ??? Il n'y a rien de tel dans la doc PHP...

c'est un alias de gettext(), regarde mieux :wink:

-- Fil

Chers Spipiens,

après quelques heures de bataille contre gettext et ma debian, je suis
ravi de vous annoncer que l'internationalisation dans SPIP marchotte.

Ci-joint vous trouverez un patch de inc-presentation qui rajoute le
support gettext à ce fichier, un fichier de traduction en anglais (le
.po, extrait à partir de xgettext -k'_' -o spip.po *.php3), le fichier
binaire gettext (spip.mo généré à partir de msgformat spip.po -o
spip.mo) et l'arboresence nécessaire pour faire tourner les locales.
J'ai aussi forcé le choix des langues à l'anglais pour qu'on voit bien
ce que cela donne...

Tout ceci à installer dans /ecrire/.

Comme je suis un peu polio, j'ai malheureusement écrasé le
inc_presentation que j'avais presque entièrement _(é. Le résultat est
que seuls quelques labels sont traduits.

J'ai regardé comment fonctionnaient d'autre logiciels GPL pour leur
internationalisation et notamment, ce qu'Antoine a remarqué à propos
des gettext qui fonctionnent plus ou moins mal. Il est possible de faire
tester si gettext est en état de marche sur le machine ou tourne le spip
et ensuite de remplacer les fonctions gettext par autre chose.

LA FEINTE (car il y en a une): vérifier ques les locales de la machine
(dans /etc/locale.gen sur debian) contiennent bien la locale que vous
voulez afficher (ici, j'ai perdu une heure parce que 'en' ne marche pas
mais que 'en_GB' marche...). Ca me parait curieux comme comportement
mais c'est ce que dit la doc...

Evidemment, le résultat est misérable (seuls quelques labels sont
traduits), mais l'idée, est je pense là.

Il faut maintenant mettre en place un vrai système de gestion de
traduction qui puisse prendre le pas à gettext si celui-ci défaille (et
donc certainement utiliser autre chose que _( qu'on ne peut pas
surcharger car il est déjà défini dans gettext).

Merci de vos commentaires,

i18n.tgz (6.57 KB)

Allemand, Portugais, Italien, Russe (haha, bonjour les problèmes de codage)

Non, il n'y a plus guère de problème de codage : http://ru.MondeDiplo.com/
pour le cyrillique (spip standard, squelettes standards, charset indiqué
dans ecrire/config...) http://eo.MondeDiplo.com/ (observer la partie "kodo",
recodage à la volée depuis le cache de spip) ; et George Kandalaft maintient
un SPIP en arabe (mais personnellement je n'ai pas réussi).

A mon avis il faudrait d'abord resoudre deux problèmes:
1. Comment éliminer du code dur Français (messages système etc.) dans SPIP
2. Comment permettre aux webmestres qui ne sont pas francophones de réaliser
un site avec spip sans avoir à apprendre des balises en Français (BOUCLE_
etc.).

On peut faire un prétraitement des squelettes en remplaçant <ANASSXCHI_xxx par
<BOUCLE_xxx ... faire gaffe tout de même à limiter le nombre de choses à
prétraiter, sinon les squelettes ne seront pas compatibles d'un spip à
l'autre, ce serait une régression.

> En général, si je suis un utilisateur français lambda et que j'arrive
> sur un site qui dispose de plusieurs versions d'interface, dont une
> française, je serais heureux qu'on me propose celle-ci par défaut.

Pas moi ; je trouve horripilant par exemple que google me ramène à
google.fr... question de goût sans doute, laissons cela au webmestre.

-- Fil

après quelques heures de bataille contre gettext et ma debian, je suis
ravi de vous annoncer que l’internationalisation dans SPIP marchotte.

Ce n’est pas sans une certaine appréhension que je vais finalement l’ouvrir, terrifié que je suis de suivre l’évolution polyglotte de SPIP, mais réchauffé par l’orientation que je crus soupçonner dans quelques mails érudites et forcement abscons, à savoir, que tous semblent converger vers la solution qui consiste en extraire les chaînes de texte.
Surtout que mon disque dur a lâché l’âme emportant avec lui toute la traduction à l’espagnol de SPIP, un mois de boulot consacré a des fins moins héroïques et une nuit blanche de terreur.
Trêve de conneries : les deux lignes qui figurent là haut c’est tout ce que j’ai compris du mail de Monsieur Baillet (que je salue au passage), parce que même

LA FEINTE (car il y en a une):

m’échappe…

Donc, voici ma question : la traduction, il faut se la farcir à la poigne ou vous avez déjà trouve la manière de les extraire, ces putains de textes ?
Cordialement.
Luis

En général, si je suis un utilisateur français lambda [...]

Pas moi ; je trouve horripilant par exemple que google me ramène à
google.fr... question de goût sans doute, laissons cela au
webmestre.

Ce n'est que la première fois, et si tu demandes explicitement la
version US, tu l'auras par la suite.

Exactement comme pour moi.

Ce dont je parle là, ce ne sont pas des propos en l'air, c'est le
fruit de déjà quelques années d'expérience sur phpMyChat, disponible
en 33 langues au moins, et dont la page d'accueil s'ajuste
automatiquement en fonction du visiteur ...

-Nicolas

D'autre part d'après un message de forum gettext a des problèmes
sous Windows :
http://uk.php.net/manual/en/ref.gettext.php

Oui, donc autant partir sur une solution différente.

Il me semble qu'on avait déjà dit ça il y a quelques mois, non ?

-Nicolas