Le site des utilisateurs francophones de FluxBB.
Vous n'êtes pas identifié(e).
Bonjour.
Après avoir suivi les "déboires" d'Otomatic avec le chinois sur le .org (voir https://fluxbb.org/forums/viewtopic.php?id=6356 ), je me suis dit qu'il serait intéressant d'offrir aux utilisateurs une traduction dans le cas de messages postés en langue étrangère.
J'ai donc utilisé Google Translation (ce n'est pas, et de loin, le meilleur traducteur, mais l'outil est gratuit et simple d'emploi).
Cela marche bien, voici comment j'ai fait :
Ouvrir viewtopic.php et trouver (ligne 358) :
<div class="postmsg">
<?php echo $cur_post['message']."\n" ?>
<?php if ($cur_post['edited'] != '') echo "\t\t\t\t\t\t".'<p class="postedit"><em>'.$lang_topic['Last edit'].' '.pun_htmlspecialchars($cur_post['edited_by']).' ('.format_time($cur_post['edited']).')</em></p>'."\n"; ?>
</div>
Remplacer par :
<script>
function googleSectionalElementInit() {
new google.translate.SectionalElement({
sectionalNodeClassName: 'goog-trans-section',
controlNodeClassName: 'goog-trans-control',
background: '#f4fa58'
}, 'google_sectional_element');
}
</script>
<script src="//translate.google.com/translate_a/element.js?cb=googleSectionalElementInit&ug=section&hl=fr"></script>
<div class="postmsg">
<div class="goog-trans-section">
<div class="goog-trans-control"></div>
<?php echo $cur_post['message']."\n" ?>
<?php if ($cur_post['edited'] != '') echo "\t\t\t\t\t\t".'<p class="postedit"><em>'.$lang_topic['Last edit'].' '.pun_htmlspecialchars($cur_post['edited_by']).' ('.format_time($cur_post['edited']).')</em></p>'."\n"; ?>
</div>
</div>
Voilà ce que ça donne sur mon forum de test :
Avant traduction :
Après traduction :
Ce n'est évidemment qu'un début et à ce point j'ai besoin de votre aide :
En faisant cette modification, le lien "traduire" apparaît systématiquement dans tous les messages, même ceux qui sont en français. J'aimerais pouvoir éviter cela en utilisant la fonction google.language.detect mais comme je ne suis vraiment pas à l'aise avec le javascript, j'aurais besoin de vos éclaircissements.
Merci par avance.
Hors ligne
Merci je viens de l'ajouter et ça marche super bien !!
J'ai rajouté une chose pour que le bouton n'apparaisse que lorsque j'en ai besoin. Car je ne souhaite pas qu'il apparaisse chez ceux qui parle Français.
En dessous de :
// Retrieve the posts (and their respective poster/online status)
J'ai ajouté à la select en dessous le language :
$result = $db->query('SELECT u.email, u.title, u.url, u.location, u.language, u.signature, u.email_setting, u.use_pm, u.num_posts, u.registered, u.admin_note, p.id, p.poster AS username, p.poster_id, p.poster_ip, p.poster_email, p.message, p.hide_smilies, p.posted, p.edited, p.edited_by, g.g_id, g.g_user_title, g.g_color, o.user_id AS is_online FROM '.$db->prefix.'posts AS p INNER JOIN '.$db->prefix.'users AS u ON u.id=p.poster_id INNER JOIN '.$db->prefix.'groups AS g ON g.g_id=u.group_id LEFT JOIN '.$db->prefix.'online AS o ON (o.user_id=u.id AND o.user_id!=1 AND o.idle=0) WHERE p.id IN ('.implode(',', $post_ids).') ORDER BY p.id', true) or error('Unable to fetch post info', __FILE__, __LINE__, $db->error());
Au dessus de :
<script>
function googleSectionalElementInit() {
J'ai ajouté
<?php
$langue_nav = explode(',',$_server['HTTP_ACCEPT_LANGUAGE']);
$langue_nav = strtolower(substr(chop($langue_nav[0]),0,2));
if(strtolower(substr($cur_post['language'],0,2))==substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2)){?>
<div class="postmsg">
<?php echo $cur_post['message']."\n" ?>
<?php if ($cur_post['edited'] != '') echo "\t\t\t\t\t\t".'<p class="postedit"><em>'.$lang_topic['Last edit'].' '.pun_htmlspecialchars($cur_post['edited_by']).' ('.format_time($cur_post['edited']).')</em></p>'."\n"; ?>
</div>
<?}else{ ?>
Et au dessus de
<?php if ($signature != '') echo "\t\t\t\t\t".'<div class="postsignature postmsg"><hr />'.$signature.'</div>'."\n"; ?>
J'ai ajouté :
<?}?>
Hors ligne
Merci pour cet ajout happyjo, c'est plus ou moins ce que je cherchais à faire.
L'inconvénient c'est qu'on est limité aux seuls langages installés dans FluxBB : si, par exemple, un Chinois poste un message en chinois en ayant réglé sa langue en français sur FluxBB (parce qu'il n'y aurait pas le chinois installé), le lien traduire n'apparaîtra pas aux utilisateurs français.
Mais bon, c'est déjà un grand pas.
Je vais continuer à chercher, si c'est possible, à utiliser google.language.detect.
Hors ligne
Est ce que quelqu'un peut m'aider a le faire fonctionner en application/xhtml+xml car c'est très pratique pour le debug ?
Play Online solitaire Game visit solitre for more details.
Hors ligne
bonjour,
il suffit de faire ses changements dans viewtopic.php et trouver cette ligne :
Ouvrir viewtopic.php et trouver (ligne 358) :
<div class="postmsg">
<?php echo $cur_post['message']."\n" ?>
<?php if ($cur_post['edited'] != '') echo "\t\t\t\t\t\t".'<p class="postedit"><em>'.$lang_topic['Last edit'].' '.pun_htmlspecialchars($cur_post['edited_by']).' ('.format_time($cur_post['edited']).')</em></p>'."\n"; ?>
</div>
Remplacer par :
<script>
function googleSectionalElementInit() {
new google.translate.SectionalElement({
sectionalNodeClassName: 'goog-trans-section',
controlNodeClassName: 'goog-trans-control',
background: '#f4fa58'
}, 'google_sectional_element');
}
</script>
<script src="//translate.google.com/translate_a/element.js?cb=googleSectionalElementInit&ug=section&hl=fr"></script>
<div class="postmsg">
<div class="goog-trans-section">
<div class="goog-trans-control"></div>
<?php echo $cur_post['message']."\n" ?>
<?php if ($cur_post['edited'] != '') echo "\t\t\t\t\t\t".'<p class="postedit"><em>'.$lang_topic['Last edit'].' '.pun_htmlspecialchars($cur_post['edited_by']).' ('.format_time($cur_post['edited']).')</em></p>'."\n"; ?>
</div>
</div>
comme décrit plus haut !!
cdlt
Hors ligne