Ajout d'une nouvelle langue de contenu à un site existant

Nouveau WRInaute
Bonjour,

Nous sommes en train d'étudier l'évolution de notre site internet pour en faire un site multilingue. En sachant que ce site est développé en PHP pur et que nous ne souhaitons bien sûr pas tout reprendre. Nous nous demandions donc quelles sont les différentes solutions techniques qui pourraient exister pour faire cela. Y a-t-il des modules que nous pourrions intégrer ou d'autres solutions pour que nous n'ayons pas à tout réinventer ?

Ce que nous souhaitons est bien sûr d'être référencés au mieux. Pour cela nous voulons que cette solution nous permette d'avoir une URL distincte par page (ex: mondomaine.com/fr/ma-page et mondomaine.com/en/my-page), pas uniquement une traduction à la volée du contenu des pages en fonction de la locale de l'utilisateur. Et nous souhaiterions aussi pouvoir gérer proprement le contenu de la balise hreflang de Google.

Merci pour vos réponses,

Alexis
 
WRInaute accro
- Pour la traduction de l'interface: gettext: http://php.net/manual/fr/book.gettext.php , facile à mettre en place, il va juste falloir mettre <?php echo _("..."); ?> (ou un wrapper function __()) autour des textes à traduire.
PHP:
<span class="syntaxdefault"></span><span class="syntaxkeyword">function&nbsp;</span><span class="syntaxdefault">__</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$message</span><span class="syntaxkeyword">,&nbsp;</span><span class="syntaxdefault">$args&nbsp;</span><span class="syntaxkeyword">=&nbsp;</span><span class="syntaxdefault">null</span><span class="syntaxkeyword">)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(!</span><span class="syntaxdefault">$message</span><span class="syntaxkeyword">)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxdefault">$translated&nbsp;</span><span class="syntaxkeyword">=&nbsp;</span><span class="syntaxdefault">_</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$message</span><span class="syntaxkeyword">);<br />&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(</span><span class="syntaxdefault">$args&nbsp;</span><span class="syntaxkeyword">===&nbsp;</span><span class="syntaxdefault">null</span><span class="syntaxkeyword">)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;</span><span class="syntaxdefault">$translated</span><span class="syntaxkeyword">;<br />&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;elseif&nbsp;(!</span><span class="syntaxdefault">is_array</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$args</span><span class="syntaxkeyword">))&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxdefault">$args&nbsp;</span><span class="syntaxkeyword">=&nbsp;</span><span class="syntaxdefault">array_slice</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">func_get_args</span><span class="syntaxkeyword">(),&nbsp;</span><span class="syntaxdefault">1</span><span class="syntaxkeyword">);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;</span><span class="syntaxdefault">vsprintf</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$translated</span><span class="syntaxkeyword">,&nbsp;</span><span class="syntaxdefault">$args</span><span class="syntaxkeyword">);<br />}&nbsp;</span><span class="syntaxdefault"></span>

- Pour la traduction de la DB: title_fr, title_en, content_fr, content_en,... ou autre table avec foreign key vers contenu original.
 
WRInaute passionné
Et pour gérer /fr/ma-page et /en/my-page il faut mettre un rewrite dans un .htaccess sur /fr/ et /en/ vers l'index.php en gros, ou page par page s'il n'y en a pas trop, et qui donnera en paramètre lang=fr ou lang=en (ou sans le paramètre, en analysant l'url pour retrouver la langue).
 
WRInaute accro
@rick38: ou tout envoyer vers un "front controller" index.php
comme Laravel:
Code:
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]

Ou WP:
Code:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]

Ensuite parser:
PHP:
<span class="syntaxdefault">$parts </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> explode</span><span class="syntaxkeyword">(</span><span class="syntaxstring">'/'</span><span class="syntaxkeyword">,</span><span class="syntaxdefault"> $_SERVER</span><span class="syntaxkeyword">[</span><span class="syntaxstring">'REQUEST_URI'</span><span class="syntaxkeyword">]);<br /></span><span class="syntaxdefault">$lang </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> $parts</span><span class="syntaxkeyword">[</span><span class="syntaxdefault">1</span><span class="syntaxkeyword">];<br /></span><span class="syntaxcomment">// ... &nbsp;</span><span class="syntaxdefault"></span>
 
Discussions similaires
Haut