FluxBB.fr

Le site des utilisateurs francophones de FluxBB.

Vous n'êtes pas identifié(e).

#1 19-05-2012 11:16:11

Wan
Membre
Inscription : 12-02-2010
Messages : 555
Site Web

Traduction automatique des messages

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 :

120519112205639507.jpg

Après traduction :

120519112315445238.jpg


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

#2 03-06-2012 20:32:37

happyjo
Membre
Inscription : 11-11-2008
Messages : 33

Re : Traduction automatique des messages

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

#3 04-06-2012 09:01:45

Wan
Membre
Inscription : 12-02-2010
Messages : 555
Site Web

Re : Traduction automatique des messages

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

#4 19-12-2013 09:08:44

maithly
Membre
Inscription : 19-12-2013
Messages : 1

Re : Traduction automatique des messages

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

#5 19-12-2013 15:12:17

david18
Membre
Lieu : France
Inscription : 28-10-2012
Messages : 467
Site Web

Re : Traduction automatique des messages

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

Pied de page des forums