[spip-dev] Fichiers langues

Je voudrais intégrer des nouvelles fonctionnalités sans toucher aux fichiers
langues originaux spip_xx.php3 dans /ecrire/lang/.

Mais j'ai déjà convertis toutes mes chaines de caractères sous la forme de

'gjkjkjkjkjkjk' => 'jkljkl',

pour les utiliser sous la forme _T('gjkjkjkjkjkjk') ...

Comment puis appeler un fichier de lang spécifique à une appli de type
add-on ?

Entre d'autres termes, comment puis-je faire en sorte de fournir un fichier
de lang pour "l'explorateur en ligne" (Voir spip_contrib) avec des chaines
de langue spipisées ?

Du style, je fais un fichier explorateur_fr.php3 que je mets dans /ecrire/
lang ...

--neoram

Je voudrais intégrer des nouvelles fonctionnalités sans toucher aux
fichiers langues originaux spip_xx.php3 dans /ecrire/lang/.

L'idéal serait peut-être qu'on puisse simplement déposer un fichier
'ecrire/spip_fr_perso.php3' ou 'ecrire/perso_fr.php3' qui permette d'une part
d'ajouter des chaînes, mais aussi de modifier les valeurs par défaut :

<?php
$GLOBALS['i18n_fr_perso'] = array(
'ma_nouvelle_chaine' => 'Ma nouvelle valeur',
'bouton_valider' => 'C\'est bon, tu peux appuyer !'
);
?>

Le tout serait chargé dynamiquement, bien sûr ... :wink:

-Nicolas

> Je voudrais intégrer des nouvelles fonctionnalités sans toucher aux
> fichiers langues originaux spip_xx.php3 dans /ecrire/lang/.

L'idéal serait peut-être qu'on puisse simplement déposer un fichier
'ecrire/spip_fr_perso.php3' ou 'ecrire/perso_fr.php3' qui permette d'une

part

d'ajouter des chaînes, mais aussi de modifier les valeurs par défaut :

A l'instar de mes_fonctions.php3 et mes_options.php3 , donc...

Dans le cas de "tes sondages" ( ;+)) ), je voterais pour un fichier de
langue ainsi nommé:

/ecrire/lang/sondages_fr.php3

<?php
$GLOBALS['i18n_fr_perso'] = array(
'ma_nouvelle_chaine' => 'Ma nouvelle valeur',
'bouton_valider' => 'C\'est bon, tu peux appuyer !'
);
?>

Le tout serait chargé dynamiquement, bien sûr ... :wink:

Ok, bien sur, mais je sais toujours pas comment faire ... Ouin....

Si je crée /ecrire/lang/explorateur_fr.php3 avec mes chaines ... Je fais
comment après ... Désolé, je suis lent aujourd'hui ...

--neoram

Hello,

L'idéal serait peut-être qu'on puisse simplement déposer un fichier
'ecrire/spip_fr_perso.php3' ou 'ecrire/perso_fr.php3' qui permette
d'une part d'ajouter des chaînes, mais aussi de modifier les
valeurs par défaut :

A l'instar de mes_fonctions.php3 et mes_options.php3 , donc...

Plus ou moins, oui.

Dans le cas de "tes sondages" ( ;+)) ), je voterais pour un fichier
de langue ainsi nommé:
/ecrire/lang/sondages_fr.php3

Je ne pensais pas à plusieurs mais à un seul fichier, dont le nom
serait normé, mais pourquoi pas faire plus riche avec par exemple un
répertoire 'ecrire/lang/fr/' qui contienne différents fichiers tous
chargés dynamiquement ...

Le seul problème est si plusieurs de ces différents fichiers tentent
de modifier la valeur d'une même chaîne, ou d'en ajouter deux
différentes mais de même référence ...

Donc, non, plutôt un seul fichier je pense.

<?php
$GLOBALS['i18n_fr_perso'] = array(
'ma_nouvelle_chaine' => 'Ma nouvelle valeur',
'bouton_valider' => 'C\'est bon, tu peux appuyer !'
);
?>

Le tout serait chargé dynamiquement, bien sûr ... :wink:

Ok, bien sur, mais je sais toujours pas comment faire ...

if (file_exists('lang/perso_'.$lang.'.php3')) {
  include('lang/perso_'.$lang.'.php3');
  while (list($key, $value) = each($GLOBALS['i18n_'.$lang.'_perso'])) {
    $GLOBALS['i18n_'.$lang][$key] = $value;
  }
}

Simple, non ? :wink:

-Nicolas

> Je voudrais intégrer des nouvelles fonctionnalités sans toucher aux
> fichiers langues originaux spip_xx.php3 dans /ecrire/lang/.

L'idéal serait peut-être qu'on puisse simplement déposer un fichier
'ecrire/spip_fr_perso.php3' ou 'ecrire/perso_fr.php3' qui permette d'une part

Il y a deux choses que l'on veut :

1) ajouter des fichiers de langue optionnels pour les "modules" (ou pour
   les squelettes de l'espace public, l'aide en ligne, etc.) ; les fichiers
   devront donc être indépendants les uns des autres, avec un préfixe lié au
   "module" en question, histoire de ne pas se marcher sur les pieds

2) pouvoir "personnaliser" des langues ; est-ce qu'on personnalise une seule
   langue à la fois, ou est-ce qu'on peut les personnaliser toutes d'un coup si
   l'on veut (du genre "PS" devient "ISBN" dans toutes les langues) ?

Clairement :
* il faut faire 1 puis 2 ; et pas l'inverse :wink:
* il faut un mécanisme de sélection d'une autre langue en cas d'absence du
  fichier de langue dans la langue demandée

Bref, rien de compliqué à programmer, mais il faut s'organiser un peu. Je
pense que tous les fichiers doivent figurer dans ecrire/lang/ ; _T() doit
être en mesure de détecter le nom du fichier de langue appelé -- peut-être
avec un troisième argument, plutôt qu'un préfixe : _T('resultat', '',
'sondage') [ on peut faire plutôt une fonction _TT('resultat', 'sondage',
$variables='') histoire de ne pas surcharger la notation quand il n'y a pas
de variablezs à passer à _T ]

-- Fil

j'ai un avis sur l'inverse :wink:

pour la partie 2 :
par exemple ajouter un seul fichier mes_langues.php3 qui contiendrait un tableau
avec la langue quelque part.
$GLOBALS['mes_i18n_fr'] = array(
'info_ps' => 'ISBN'
)

$GLOBALS['mes_i18n_en'] = array(
'info_ps' => 'ISBN'
)

ou alors la methode du dessus plus eventuellement un
$GLOBALS['mes_i18n_all'] = array(
'info_ps' => 'ISBN'
)

donc d'abord mes_i8n_all sinon mes_i8n_fr sinon i8n_fr sinon inf_ps

le sinon info_ps pourrait etre utile : si on supprime tous les fichiers langues, cela
permet d'itentifier le nom des chaines sur les site.

Pour la premiere partie prevoir une langue par defaut dans le module fournit. Comme cela
si l'anglais est la langue du site qui utilise le sondage. Si cela n'est pas traduit, le sondage sera affiche
en francais, langue par defaut du module.

A+
Ben.

Fil wrote:

Ben wrote :

par exemple ajouter un seul fichier mes_langues.php3 qui contiendrait un
tableau
avec la langue quelque part.

Sur le modèle mes_options.php3, mes_fonctions.php3, ca parait logique. Mais
à insérer dans ecrire/lang/ . Mais ce fichier servirait uniquement à la
modification des chaines existantes.

Fil wrote :

>Il y a deux choses que l'on veut :
>
>1) ajouter des fichiers de langue optionnels pour les "modules" (ou pour
> les squelettes de l'espace public, l'aide en ligne, etc.) ; les

fichiers

> devront donc être indépendants les uns des autres, avec un préfixe lié

au

> "module" en question, histoire de ne pas se marcher sur les pieds

exemple sur le sondage : ecrire/lang/sondage_fr.php3 qui contient uniquement
les chaines du module sondage.

>2) pouvoir "personnaliser" des langues ; est-ce qu'on personnalise une

seule

> langue à la fois, ou est-ce qu'on peut les personnaliser toutes d'un

coup si

> l'on veut (du genre "PS" devient "ISBN" dans toutes les langues) ?
>
>Clairement :
>* il faut faire 1 puis 2 ; et pas l'inverse :wink:
>* il faut un mécanisme de sélection d'une autre langue en cas d'absence

du

> fichier de langue dans la langue demandée

Retour à la langue par défaut du site.

>Bref, rien de compliqué à programmer, mais il faut s'organiser un peu. Je
>pense que tous les fichiers doivent figurer dans ecrire/lang/ ;

Oui, logique.

Donc si je comprends bien, pour appeler une chaine de caractères en français
mais personnalisée, on appellerait _T('chainetoto') -> cela vérifierait
d'abord dans ecrire/lang/mes_langues.php3, puis dans
ecrire/lang/spip_xx.php3 ou xx est la langue en cours d'utilisation. J'ai
bon là ?

> _T() doit
>être en mesure de détecter le nom du fichier de langue appelé --

peut-être

>avec un troisième argument, plutôt qu'un préfixe : _T('resultat', '',
>'sondage') [ on peut faire plutôt une fonction _TT('resultat', 'sondage',
>$variables='') histoire de ne pas surcharger la notation quand il n'y a

pas

>de variablezs à passer à _T ]

Donc faire cette fonction _TT('chainetoto','nomdumodule') pour appeler une
chaine de caractères provenant du fichier ecrire/lang/nomdumodule_xx.php3 ou
xx est la langue par défaut du site me parait idéal.

Mais je l'avoue, je sais pas coder la fonction
_TT('chainetoto','nomdumodule') qui récupère la langue par défaut du site
(exemple : fr ), aille chercher la chaine en question (ici : chainetoto) et
renvoie le nom du module (ici: nomdumodule ) pour former la requête de
chaine vers ecrire/lang/nomdumodule_fr.php3 .

Ca m'intéresserait beaucoup beaucoup... Car j'essaye actuellement d'intégrer
des nouvelles fonctionnalités chartées sous Spip dans l'interface privée, et
j'aimerais garder l'usage des chaines _T('chainetoto') ( ou plutot ici

_TT('chainetoto','nomdumodule') // dans les fichiers de l'interface
privée

et

'chainetoto' => 'contenu de la chaine toto', // dans le fichier de langue
du module

Et je sais pas faire. Voilà... HELP ???

--neoram

Donc si je comprends bien, pour appeler une chaine de caractères en français
mais personnalisée, on appellerait _T('chainetoto') -> cela vérifierait
d'abord dans ecrire/lang/mes_langues.php3, puis dans
ecrire/lang/spip_xx.php3 ou xx est la langue en cours d'utilisation. J'ai
bon là ?

En pratique, le fichier de langue est chargé en mémoire la première fois
qu'on en a besoin. Il suffit donc de charger mes_langues juste après
spip_xx.php3 pour pouvoir le "corriger".

Donc faire cette fonction _TT('chainetoto','nomdumodule') pour appeler une
chaine de caractères provenant du fichier ecrire/lang/nomdumodule_xx.php3 ou
xx est la langue par défaut du site me parait idéal.

En fait, il serait probablement plus simple d'introduire une nouvelle
notation dans les noms des item traduits : _T('sondage:chainea') irait alors
chercher la 'chainea' dans le module 'sondage'. Mieux qu'un argument
supplémentaire, car ça garde une forte cohérence. (le séparateur peut être :
ou % ou & ou ce qu'on veut...)

-- Fil