8721 sujets

Développement web côté serveur, CMS

Modérateur
Bonjour,

Je vais mettre en place une réécriture d'url sur un site disponible en portugais et en français (langue principale = portugais). Quelle est la langue qu'il faudra que j'utilise dans ma réécriture ? D'emblée, je dirais le portugais (le public cible principal est brésilien), mais je me demandais si l'anglais ne serait pas plus efficace pour le référencement (la réécriture est mise en place pour cela).
Sinon, connaissez-vous un moyen de basculer d'une url à l'autre (par exemple d'une url française à une url portugaise) selon la langue du site (le basculement d'une langue à l'autre se fait par l'intermédiaire d'un script php, on a donc les même fichiers pour les deux langues, le site n'est pas dédoublé) ?

Merci d'avance.
Modérateur
Eh bien, je viens de constater que c'est un cookie qui est défini en cliquant sur le lien permettant de changer la langue. Donc on a un cookie dont la valeur de "lang" est "pt" ou "fr".
J'ai réfléchi à la chose et je pense que le meilleur moyen de prendre en compte la modification de la langue dans l'url est d'y ajouter un query string, ainsi je pourrai définir mes régles de réécriture selon la langue choisie...
Mais je me demande si c'est bon pour le référencement d'avoir 2 types d'url (un en français et un en portugais)...
si tu as deux url différentes, et deux contenus différents, pas de souci pour le référencement
Modérateur
OK, merci pour cette info, je vais donc faire d ela réécriture pour les pages fr et pour les pages pt.
Concernant la méthode que je vais employé, ajouter un query string du type "lang=fr" à l'url de la page, ça vous semble être la bonne ou y aurait-il mieux à faire ?

A propos, quand est-ce que les règles de réécritures sont-elles appliquées, après le code php placé avant le <head> de la page ou avant ? Parce que si c'est avant, ça ne servira à rien de modifier l'url par l'ajout du query string.
Modifié par jojaba (24 Oct 2012 - 19:20)
l'idéal étant de générer une url genre

tondomaine.com/fr/tapage.php
et
tondomaine.com/pt/tapage.php

Et dans ton htaccess, tu récupères ta langue comme ceci

RewriteRule ^([a-z]{2})\/tapage.php$ tapage.php?lang=$1 [L,NC]

et sur ta tapage.php, tu récupères la langue simplement avec $_GET['lang']
Modérateur
Merci xirt, mais je pense que tu réponds un peu hors-sujet. Je n'ai aps dû être assez clair, toutes mes excuses pour ça, je vais me prendre le temps d'expliquer plus précisément...
Voici la forme de mon domaine :
http://monsite.com.br

Par défaut, le cookie "language" est défini comme suit :
<?php setcookie('language', 'pt', time() + 365*24*3600) ?>

Si on clique sur le bouton fr on passe à ceci :
<?php setcookie('language', 'fr', time() + 365*24*3600) ?>

On peut bien entendu repasser au pt (cette discussion commence à sentir mauvais Smiley lol )
Les url ne changent pas selon la langue, ce qui explique pourquoi je souhaite les modifier lorsqu'on passe en fr. En effet, si je fais une réécriture sur les pages pour la langue pt, cette réécriture sera la même pour le fr. C'est ce qui me gêne (des url en portugais pour des pages fr, sont à proscrire).
La structure de mes url devraient être les suivantes (je prends un exemple pour être plus clair) :
http://monsite.com.br/nos_motoneige.php?id=1
Après réécriture on aura ceci :
http://monsite.com.br/nossas_snowmobiles/snowmobiles-1

D'où l'idée d'ajouter à l'url un identifiant pour la langue fr :
http://monsite.com.br/nos_motoneige.php?id=1&lang=fr
Ce qui me permettra de passer dans le htaccess à une réécriture en français :
http://monsite.com.br/nos_motoneiges/motoneige-1

Et donc ma question : quand est-ce que le htaccess procède à la réécriture ? Après traitement du code php placé avant le doctype de la page html ? Avant ?
Modérateur
jb_gfx a écrit :
Tu devrais relire le post de xirt car c'est lui qui a raison.

Désolé de te contredire, mais le but n'est pas de récupérer la langue, le but est de rendre les url "sympathiques" pour 2 langues : le portugais et le français.
En reprenant les exemples précédents je voudrais que :
http://monsite.com.br/[b]nos_motoneige.php?id=1[/b]

Soit réécrit pour le portugais en :
http://monsite.com.br/[b]nossas_snowmobiles/snowmobiles-1[/b]

et en français en :
http://monsite.com.br/[b]nos_motoneiges/motoneige-1[/b]


Je voudrais pouvoir réécrire les pages avec des mots français quand le cookie fr est activé et en portugais quant le cookie pt est activé.
jojaba a écrit :

Et donc ma question : quand est-ce que le htaccess procède à la réécriture ? Après traitement du code php placé avant le doctype de la page html ? Avant ?


le htaccess est lu et interprété avant ta page php, sinon, on ne pourrait pas faire de réécriture d'URL
jojaba a écrit :
Soit réécrit pour le portugais en :
http://monsite.com.br/[b]nossas_snowmobiles/snowmobiles-1[/b]

et en français en :
http://monsite.com.br/[b]nos_motoneiges/motoneige-1[/b]



les noms de page que tu veux donner pour la réécriture viennent d'où ?
Si ça vient d'une bdd (ce que j'espère pour toi), il faut que tu réécrives tes liens sur tes pages en fonction de la langue active.
Si on est sur du français, tu vas générer tes liens en fonction d'un slug fr, si tu es sur du portugais, tu vas générer tes liens avec un slug portugais.
Tu peux ajouter ajouter l'id de la page/produit/catégorie à afficher et c'est sur cette ID que tu feras ta requête pour afficher les bonnes infos sur ta page.
Modifié par xirt (25 Oct 2012 - 00:14)
je tiens à dire quand même que mettre la langue dans les cookies, ça peut poser des soucis car tout le monde n'accepte pas les cookies. Pour ceux-là, ton internationalisation ne fonctionnera pas.

Alors que le système que j'ai mentionné plus haut marchera chez tout le monde.
Modérateur
xirt a écrit :
je tiens à dire quand même que mettre la langue dans les cookies, ça peut poser des soucis car tout le monde n'accepte pas les cookies. Pour ceux-là, ton internationalisation ne fonctionnera pas.

Alors que le système que j'ai mentionné plus haut marchera chez tout le monde.
Je reprends un site que je n'ai pas développé. Le système de cookies, ce n'est pas moi qui l'ai mis en place et au vu du système mis en place, cela sera très difficile de modifier...

a écrit :
les noms de page que tu veux donner pour la réécriture viennent d'où ?
le nom de base (sans réécriture) de la page exemple que j'ai donné est :
http://monsite.com.br/nos_motoneige.php?id=1
La page php appelée est nos_motoneige.php avec comme chaîne de get id=1 (je rappelle que ce n'est pas moi qui ai développé le site Smiley cligne ).
La réécriture se fait dans le htaccess, c'est à dire :
RewriteRule ^nossas-snowmobiles/snowmobile-([0-9]+)\.html$ /nos_motoneige.php?id=$1[L]


Donc, si j'ai bien compris, je ne pourrai pas faire de la réécriture pour le fr avec le système de cookies. Les url seront réécrites soit dans l'une, soit dans l'autre langue (ce sera le portugais donc). C'est bien ça ? Merci pour ta patience Smiley smile
Modifié par jojaba (25 Oct 2012 - 05:21)
xirt et jb ont raison, si tu ne différencie pas ton url autrement que par lles noms de catégories, tu va te retrouver avec tes pages portuguaises sur google france et tes pages françaises sur google portugal...

tu as 2 solution:

-la moins chere est la plus simple: (voir post de xirt)

www.monsite.com/pt/maCategorieEnPt
www.monsite.com/fr/maCategorieEnFr

Google tiens comptes des locales dans l'url

-la plus pro:

www.monsite.pt/maCategorieEnPt
www.monsite.fr/maCategorieEnFr

a écrit :

Donc, si j'ai bien compris, je ne pourrai pas faire de la réécriture pour le fr avec le système de cookies. Les url seront réécrites soit dans l'une, soit dans l'autre langue (ce sera le portugais donc). C'est bien ça ? Merci pour ta patience


Non, tu peut aussi utiliser des slugs traductibles, c'est ce que je fais pour mes sites.
Modifié par JJK801 (25 Oct 2012 - 09:59)
Modérateur
Merci à tous pour vos indications et désolé de vous embêter avec ça.
Mon nom de domaine est le suivant :
http://monsite.com.br donc il est par défaut pour Google en brésilien (portugais brésilien). Pour les url en fr il faudra donc que je compose avec ce nom de domaine. Est-ce que http://monsite.com.br/fr/... est bon dans ce cas ? Je doute fort.
En tout cas, il va falloir que je me tourne vers une solution php au lieu de faire de l'url rewriting par htaccess...
C'est quoi des slugs traduisibles ?
jojaba a écrit :
En tout cas, il va falloir que je me tourne vers une solution php au lieu de faire de l'url rewriting par htaccess...


Généralement, on compose avec les 2, c'est rarement soit l'un soit l'autre.

jojaba a écrit :
C'est quoi des slugs traduisibles ?


Un slug, c'est un nom unique que tu va donner à la page de ton site.

ça à plein d'utilités, par exemple si tu veut omettre un identifiant produit dans l'url d'un site de e-commerce ou pour modifier un nom de page selon les contextes.

Admettons que tu ai une page qui s'appelle home.php et que tu veut pouvoir utiliser en plusieurs langues, tu va créer une table dans ta BDD comme ceci:

=====================
= nom = locale = slug =
=====================
=====================
= home = fr = accueil =
=====================
= home = en = home =
=====================
= home = pt = casa =
=====================

dans ton .htaccess, tu crée une régle comme ceci:


RewriteRule /(fr|pt|en)/(.*)\.html /index.php?lang=$1&slug=$2 [QSA,L]


dans ton index.php:


$query = 'SELECT nom FROM pages_slugs WHERE locale=' . $_GET['lang'] . ' AND slug=' . $_GET['slug'];

// Je fais ma requête ...

include( 'page/' . $queryResult['nom'] .'.php');


ensuite dans la page home, il suffi de récupérer le contenu en fonction de la locale.

Bien sur c'est très abrégé, les usages sont généralement bien plus complexes, là par exemple on pourrai imaginer que la locale soit déduite en fonction du nom de page, ce qui éviterai de la passer dans l'url.

ici si tu appel:
http://www.mosite.com/fr/accueil.html => contenu en français
http://www.mosite.com/en/home.html => contenu en anglais
http://www.mosite.com/pt/casa.html => contenu en portuguais
Modérateur
Bon ben on vient de me demander de ne pas utiliser de htaccess et on m'a donné un exemple pour faire ça en php.
Pour la page nos_motoneigeu.php on fait ça (pour l'instant, pas de langue prise en compte) :
<?php
session_start(); 
include_once('funct_utils.php');
$script_name = str_replace('.php','',$_SERVER['SCRIPT_NAME']);
$script_name_true = str_replace('u.php','.php',$_SERVER['SCRIPT_NAME']);
$req_urls = explode('/',$_SERVER['SCRIPT_URL']);
$url_encours = count($req_urls) >2 ? str_replace('.php','',$req_urls[2]) : null;
?>

Un peu plus loin on réutilise à plusieurs reprises $url_encours lors des requêtes bdd...
J'ai pas bien compris, mais le résultat pour l'url affichée est : http://dev.quebec-motoneige.com/nos_motoneigeu/Yamaha-RS-Venture-1000.php (Yamaha RS Vneture 100 étant le titre de la page...)
Je sens que je vais avoir du mal à mettre ça en place... Smiley biggol
Modifié par jojaba (25 Oct 2012 - 11:46)
a écrit :

<?php
session_start(); 
include_once('funct_utils.php');
$script_name = str_replace('.php','',$_SERVER['SCRIPT_NAME']);
$script_name_true = str_replace('u.php','.php',$_SERVER['SCRIPT_NAME']);
$req_urls = explode('/',$_SERVER['SCRIPT_URL']);
$url_encours = count($req_urls) >2 ? str_replace('.php','',$req_urls[2]) : null;
?>


Ouai, on appel communément ça se compliquer la vie... (et rendre son site affreusement compliqué à maintenir...)

Que ton slug corresponde au nom du produit n'a rien d’étonnant, par contre il devra toujours être unique.

Tu travail en objet ou en procédural? si tu travail en procédural, en effet, tu va en ch***
Modérateur
JJK801 a écrit :


Ouai, on appel communément ça se compliquer la vie... (et rendre son site affreusement compliqué à maintenir...)

Que ton slug corresponde au nom du produit n'a rien d’étonnant, par contre il devra toujours être unique.

Tu travail en objet ou en procédural? si tu travail en procédural, en effet, tu va en ch***


Tout le site est en procédural et j'ai l'habitude de travailler en procédural. Bon ben, il va falloir que je me retrousse les manches alors Smiley cligne Si j'ai le courage je reviens ici pour donner de mes nouvelles...
Je considère le problème résolu, vous avez donné de bonnes pistes qui pourrnt êtr errpises par d'autres. Merci pour votre participation. Smiley smile
Modifié par jojaba (25 Oct 2012 - 12:45)
Modérateur
Coucou, me revoici,

Très rapidement, voilà comment je m'y suis pris pour me débrouiller sans htaccess.

1) Création d'un fichier fr.php et pt.php

2) Dans chacun des fichiers on traitera les "jolies" url (ici c'est le fichier fr.php) :

<?php
// On lance une session
session_start();

/* Récupération des différentes parties de l'url */
$elements_url = explode('/',$_SERVER['SCRIPT_URL']);
$_SESSION['lang'] = $elements_url[1];
$_SESSION['category'] = $elements_url[2];
$_SESSION['page'] = $elements_url[3];
// $elements_url[0] correspond au domaine.

/* Traitement de chaque catégorie */

switch($_SESSION['category']) {

case 'motoneiges' :
  //Traitement de $_SESSION['page'] si nécessaire
  // ...

  // Include de la page demandée
  include($_SERVER['DOCUMENT_ROOT'].'/motoneiges.php');
break;

case 'parcours' :
  //Traitement de $_SESSION['page'] si nécessaire
  // ...

  // Include de la page demandée
  include($_SERVER['DOCUMENT_ROOT'].'parcours.php');
break;

case 'hotels' :
  //Traitement de $_SESSION['page'] si nécessaire
  // ...

  // Include de la page demandée
  include($_SERVER['DOCUMENT_ROOT'].'/hotels.php');
break;

} // Fin du switch
?>


3) Il faut éventuellement modifier les pages php pour traiter ou récupérer des variables

4) Ce que ça donne concrètement :
http://monsite.com/fr/motoneiges/yamaha-rst.html sera pris en charge par la page motoneiges.php


Finalement, pas si compliqué que ça, mais ça m'a quand-même pris du temps, puisque c'était la première fois Smiley langue
Modifié par jojaba (22 Nov 2012 - 11:26)