langues et modules (fwd)

(Copie d'un mail sur spip-dev@rezo.net ; j'ai également modifié tous les
fichiers sur le site www.spip.net ainsi que le script de traduction).

Salut,

dans le CVS on peut maintenant gérer les langues par 'modules', et les
personnaliser. Voici ce qui tient lieu de documentation :wink:

1) les modules

ecrire/inc_lang.php3 peut fournir des services à d'autres bouts de code qu'à
SPIP lui-même ; ce sont les "modules". Si un de ces "modules" veut gérer des
chaînes traduites, il doit réserver un nom de module (par exemple, 'toto').

Il peut ensuite appeler la fonction _T('toto:lala') pour afficher la chaîne
'lala' du module 'toto' dans la langue courante de l'utilisateur ou du site.

Le fichier de langue du module toto en français est
ecrire/lang/toto_fr.php3, qui est grosso modo de la forme suivante :

<?php
    $GLOBALS['i18n_toto_fr'] = Array ('lala' => 'Mes amis!',
            ...);
?>

2) le "module SPIP".

Pour unifier la fonction et faciliter la mise en place des scripts de
traduction sur les modules, j'ai dû modifier les fichiers lang/spip_xx.php3
pour qu'ils soient comme les autres "modules" : la seule modification est
qu'on passe de
    $GLOBALS['i18n_fr'] = Array(...
à
    $GLOBALS['i18n_spip_fr'] = Array(...

Pas grand chose donc, mais si vous avez fait des modifs manuelles, au moins
vous saurez ce qui cloche.

(A terme on peut peut-être espérer accélérer l'espace public en passant
toutes les chaînes qu'il n'est possible d'appeler QUE depuis l'espace privé
dans un module nommé "prive".)

3) la personnalisation

Si le fichier lang/perso.php3 est présent, il est chargé SYSTEMATIQUEMENT,
APRES CHAQUE appel à charger_lang(). Il peut alors "corriger" ce qu'il veut.
Sa syntaxe n'est pas tout à fait la même, puisqu'il n'a pas à instancier
tout le tableau de langue, mais juste à modifier la ou les chaînes qu'il fut
modifier. Exemples :

ecrire/lang/perso.php3

<?php
        // ce fichier SURCHARGE certaines valeurs des tableaux de langue ;
        // il est systematiquement appele APRES le chargement des fichiers
        // de langue normaux.

        // remplacer la chaine spip 'login_login2' en anglais et en francais
        $GLOBALS["i18n_en"]['login_login2'] = "Give me your ID:";
        $GLOBALS["i18n_fr"]['login_login2'] = "C'est quoi ton blaze:";

        // remplacer la chaine spip 'login_login2' dans toutes les langues
        $GLOBALS["i18n_".$GLOBALS['spip_lang']]['login_login2'] = "LOGIN?";

        // remplacer la chaine "module:toto" (syntaxe legerement differente)
        $GLOBALS["i18n__module_en"]['toto'] = "Fou, non ?";

        // meme manip, pour la chaine "module:toto", dans toutes les langues
        $GLOBALS["i18n__module_".$GLOBALS['spip_lang']]['toto'] = "Yes, I know, it's crazy";
?>

Remarque importante : il est FORTEMENT DECONSEILLÉ d'utiliser cette
fonctionnalité sans y avoir sérieusement réfléchi auparavant. S'il s'agit de
corriger un défaut dans le texte, il vaut mieux que ça soit corrigé dans les
sources de SPIP.

-- Fil