Langue
🎨 Skin viewer
Les plus téléchargés
- 1 npds_agenda415
- 2 npds_galerie384
- 3 Programmes de Technologie 1985 MEN ...381
- 4 86-Car368
- 5 photosize359
- 6 npds_annonces 357
- 7 npds_glossaire348
- 8 npds_encapsuleur343
- 9 bootstrap.png316
- 10 superhero288
Index du forum »» Road map développement »» traduction
traduction#1480
function translate($phrase, $args=null) {
$params = (func_num_args() === 2) ? (array)$args : array_slice(func_get_args(), 1);
$tmp = translate_pass1($phrase, $params);
!!!!!include!!!!!("language/lang-mods.php");
return (htmlentities($tmp,ENT_QUOTES|ENT_SUBSTITUTE|ENT_HTML401,cur_charset));
}
function translate_pass1($phrase, $params=null) {
settype($englishname,'string');
switch($phrase) {
case "je suis un phrase avec {0} argements {1}": $tmp="je suis une phrase avec {0} arguments {1}"; break;
case "$englishname": $tmp="$englishname"; break;
default: $tmp=$phrase; break;
}
if (is_array($params))
$locale = language_iso(1,0,0);
return \MessageFormatter::formatMessage($locale, $tmp, $params);
else
return $tmp;
ce qui permet d'éviter d'avoir des tonnes de translate juste pour un mot et ce qui évite ce genre de truc
translate("Désolé, votre mot de passe doit faire au moins").' '.$minpass.' '.translate("caractères")
l'apel a translate si tu a des arguments ce fait
translate("je suis une phrase avec {0} arguments {1}", 5, "!!!");
translate("Désolé, votre mot de passe doit faire au moins {0} caractères", 12);
te donne
je suis une phrase avec 5 arguments !!!
Désolé, votre mot de passe doit faire au moins 12 caractères
et si pas d'argument
translate("je suis une phrase sans argument");
une function plus courte moins long a écrire lol
function __($phrase, $args = null)
{
if (! $phrase) return '';
return translate($phrase, $args);
}
echo __('test pour voir c\'est {0}', 'cool');
test pour voir c'est cool
Message édité par : Nicolas2 / 05-03-2021 16:47
function d'appel des translation plus courte pour le front l'admin et module
exemple pour le module geoloc :
le fichier geoloc lang
l'utilisation :
le rendue :
test du module geoloc pour voir, good
// return les translations du front
function __($phrase, $args = null)
{
if (! $phrase) return '';
return translate($phrase, $args);
}
// return les translations admin
function __a($phrase, $args = null)
{
if (! $phrase) return '';
return adm_translate($phrase, $args);
}
// return les translation d'un module
function __m($module, $phrase, $args = null)
{
if (! $phrase) return '';
$func = $module.'_translate';
return call_user_func_array($func, [$phrase, $args]);
}
exemple pour le module geoloc :
le fichier geoloc lang
function geoloc_translate($phrase, $args) {
//
$params = (func_num_args() === 2) ? (array)$args : array_slice(func_get_args(), 1);
if (is_array($params)) {
$locale = language_iso(1,0,0);
$phrase = \MessageFormatter::formatMessage($locale, $phrase, $params);
}
return (htmlentities($phrase,ENT_QUOTES|ENT_SUBSTITUTE|ENT_HTML401,cur_charset));
}
l'utilisation :
echo __m('geoloc', 'test du module geoloc pour voir, {0}', 'good');
le rendue :
test du module geoloc pour voir, good
pas de limitation sur le nombre d'argument il faut juste partir de {0} et {+1} pour chaque argument supplémentaire.
ce qui te donne si tu a 3 arguments :
// le front
__('je suis {0} phrase {1} provient {2} fichiers de traduction', 'une', 'qui', 'des');
// admin
__a('je suis {0} phrase {1} provient {2} fichiers de traduction', 'une', 'qui', 'des');
// module geoloc
__m('geoloc', 'je suis {0} phrase {1} provient {2} fichiers de traduction', 'une', 'qui', 'des');
ce qui te donne si tu a 3 arguments :
// le front
__('je suis {0} phrase {1} provient {2} fichiers de traduction', 'une', 'qui', 'des');
// admin
__a('je suis {0} phrase {1} provient {2} fichiers de traduction', 'une', 'qui', 'des');
// module geoloc
__m('geoloc', 'je suis {0} phrase {1} provient {2} fichiers de traduction', 'une', 'qui', 'des');
Message édité par : Nicolas2 / 05-03-2021 19:23
Example 2 pour module geoloc.
appel :
__m('geoloc', 'test du module geoloc pour voir, {0}', 'good');
__m('geoloc', 'un');
__m('geoloc', 'deux');
__m('geoloc', 'trois');
__m('geoloc', 'module {0}', 'geoloc');
résultat :
test du module geoloc pour voir, good
juste un
pourquoi deux
je suis le 3 et je gagne
ce module geoloc est vraiment génial
le tableau message regroupes l'intégralité des translation du module et permet d'éviter le switch, une multitude de case et breack, beaucoup plus rapide a écrire.
function geoloc_translate($phrase, $args) {
// le tableau des traduction
$messages = array(
'un' => 'juste un',
'deux' => 'pourquoi deux',
'trois' => 'je suis le 3 et je gagne',
'module {0}' => 'ce module {0} est vraiment génial',
);
// ont compte le nombre d'argument et on créer un tableau de paramètre key=>value
$params = (func_num_args() === 2) ? (array)$args : array_slice(func_get_args(), 1);
// ont regarde si la phrase existe dans le tableau messages
// si elle existe alors on la recupere
// sinon ont affiche la phrase original
if (array_key_exists($phrase, $messages)) {
$message = $messages[$phrase];
} else {
$message = $phrase;
}
// si params est un tableau
if (is_array($params)) {
// ont recupère la locale
$locale = language_iso(1,0,0);
// ont formate la phrase avec les arguments
$message = \MessageFormatter::formatMessage($locale, $message, $params);
}
// ont retourne la pharse
return (htmlentities($message,ENT_QUOTES|ENT_SUBSTITUTE|ENT_HTML401,cur_charset));
}
appel :
__m('geoloc', 'test du module geoloc pour voir, {0}', 'good');
__m('geoloc', 'un');
__m('geoloc', 'deux');
__m('geoloc', 'trois');
__m('geoloc', 'module {0}', 'geoloc');
résultat :
test du module geoloc pour voir, good
juste un
pourquoi deux
je suis le 3 et je gagne
ce module geoloc est vraiment génial
le tableau message regroupes l'intégralité des translation du module et permet d'éviter le switch, une multitude de case et breack, beaucoup plus rapide a écrire.
Message édité par : Nicolas2 / 05-03-2021 20:58
Message édité par : Nicolas2 / 05-03-2021 21:00
jais adapter le module ipban avec ce system de traduction pour celui qui veut tester.
lien pour télécharger le module ipban : https://airteck.fr/ipban.rar
tu a maintenant la possibilité de générer automatiquement tout les fichiers de langue a l'aide d’une commande que tu tape en console.
procédure pour tester ajouter cette function dans le mainfile.php et remplacer le module ipban par celui de l'archive en téléchargement voir lien au dessus.
a ajouter au mainfile.php
c'est tout vous pouvez tester !!!
procédure pour la génération des fichiers de traduction via console cmd :
ouvrir une console a la racine de ce chemin : /modules/ipban/script une foi la console ouverte taper la commande suivante
ajouter une ligne de traductions au fichier setban.php comme suite :
sans argument :
__m("ipban", "votre texte");
avec arguments :
__m("ipban", "votre texte avec {0} argument", 1);
relancer la commande dans votre console :
php makelang
et admirer le travail, il ne vous reste plus que les traduction a écrire dans chaque fichier de langue....
😜
lien pour télécharger le module ipban : https://airteck.fr/ipban.rar
tu a maintenant la possibilité de générer automatiquement tout les fichiers de langue a l'aide d’une commande que tu tape en console.
procédure pour tester ajouter cette function dans le mainfile.php et remplacer le module ipban par celui de l'archive en téléchargement voir lien au dessus.
a ajouter au mainfile.php
// return les translation d'un module
function __m($module, $phrase, $args = null)
{
if (! $phrase) return '';
$func = $module.'_translate';
return call_user_func_array($func, [$phrase, $args]);
}
c'est tout vous pouvez tester !!!
procédure pour la génération des fichiers de traduction via console cmd :
ouvrir une console a la racine de ce chemin : /modules/ipban/script une foi la console ouverte taper la commande suivante
php makelang
ajouter une ligne de traductions au fichier setban.php comme suite :
sans argument :
__m("ipban", "votre texte");
avec arguments :
__m("ipban", "votre texte avec {0} argument", 1);
relancer la commande dans votre console :
php makelang
et admirer le travail, il ne vous reste plus que les traduction a écrire dans chaque fichier de langue....
😜
Message édité par : Nicolas2 / 06-03-2021 02:58
Yo Nico je vois que y'a encore eu des insomnies lol !
tout cela est bien séduisant ! faudra que j'essai tout ça !
je suis d'accord avec toi sur beaucoup d'argument et le fait que notre système de trad doit encore évoluer même si je trouve qu'il est très stable (peut être un peu lent et mal optimisé) ... justement entre autre à cause de la difficulté à le maintenir
je te met ici en vrac mes premières remarques
- j'ai et on a passé énormément de temps pour passer (en mode bricolage++ semi automatisé lol) le core en français maintenant c'est fait et oui un outil qui nous servirait à la maintenance et à la création de nouveau fichier pour les modules par exemple serait vraiment TOP
- oui la gestion des langue est vraiment un bouffe temps !!!
- oui on pourrait faire mieux !
- est on sûr que les recherche dans les tableaux sont plus rapide que les switch sur les variables ?
- les système d'argument serait bien entendu un GROS plus
- le fait de passer par la console n'est pas à la portée de tous nos "developpeurs" un script php serait plus abordable et pourrait être embarqué dans une nouvelle catégorisation (développement) des fonctions de l'admin
- pense qu'on a aussi l'os des traductions qui sont embarqué dans les meta_mot dans la base ....
Voili en tout cas chapeau pour le boulot
tout cela est bien séduisant ! faudra que j'essai tout ça !
je suis d'accord avec toi sur beaucoup d'argument et le fait que notre système de trad doit encore évoluer même si je trouve qu'il est très stable (peut être un peu lent et mal optimisé) ... justement entre autre à cause de la difficulté à le maintenir
je te met ici en vrac mes premières remarques
- j'ai et on a passé énormément de temps pour passer (en mode bricolage++ semi automatisé lol) le core en français maintenant c'est fait et oui un outil qui nous servirait à la maintenance et à la création de nouveau fichier pour les modules par exemple serait vraiment TOP
- oui la gestion des langue est vraiment un bouffe temps !!!
- oui on pourrait faire mieux !
- est on sûr que les recherche dans les tableaux sont plus rapide que les switch sur les variables ?
- les système d'argument serait bien entendu un GROS plus
- le fait de passer par la console n'est pas à la portée de tous nos "developpeurs" un script php serait plus abordable et pourrait être embarqué dans une nouvelle catégorisation (développement) des fonctions de l'admin
- pense qu'on a aussi l'os des traductions qui sont embarqué dans les meta_mot dans la base ....
Voili en tout cas chapeau pour le boulot
L'eau goutte à goutte finit toujours par percer la pierre...