Développer un site de A à Z international

Par Lqncer, il y a 14 ans


Bonjour,

Déjà merci pour votre tuto, celui-ci aide à mieux comprendre un système MVC ^^

Par contre j'ai un soucis, je voudrais rendre mon site international en utilisant un simple système de constante définie dans des fichier correspondant à la langue voulu.

J'ai donc modifié le htacces :

RewriteRule ([a-z]+)/(.*) index.php/$1/$2 [L]

Pour obtenir ce genre d'url : http://localhost/monsite/fr/page/accueil-1

Ensuite j'ai modifié le fichier Request.php :

public $lang = false; // langue sélectionné par l'utilisateur
.......

function __construct(){
    // Si on a une lang dans l'url on la rentre dans $this->lang
    if(isset($_GET'lang']) && preg_match("/^[a-zA-Z]{2,3}$/i",$_GET'lang'])){
        $this->lang = $_GET'lang'];
    } else {
        $this->lang = 'fr';
    }

    $this->url = isset($_SERVER'PATH_INFO'])?$_SERVER'PATH_INFO']:'/'; 
    // Si on a une page dans l'url on la rentre dans $this->page
    if(isset($_GET'page'])){
        if(is_numeric($_GET'page'])){
            if($_GET'page'] > 0){
                $this->page = round($_GET'page']); 
            }
        }
    }

    // Si des données ont été postées ont les entre dans data
    if(!empty($_POST)){
        $this->data = new stdClass(); 
        foreach($_POST as $k=>$v){
            $this->data->$k=$v;
        }
    }
}

En claire si la variable $_GET'lang'] n'est pas définie la langue par défault et fr

Pour continuer j'ai modifié le fichier Dispatcher.php en modifiant cette ligne de la fonction __construct

Router::parse($this->request->url,$this->request,$this->request->lang);

Ensuite le fichier Router.php pour modifier la fonction parse

static function parse($url,$request,$lang){
    $url = trim($url,'/');
    if(empty($url) || $url == $lang){
        $url = Router::$routes[0]'url']; 
    }else{
        .....

Et donc je modifie le fichier conf.php

define('AdminName','pna');

/**
 * Router
 * Configuration des urls pour le router
 **/

$request = new Request();
$langUser = $request->lang;

Router::prefix(AdminName,'admin');
Router::connect($langUser.'/','posts/index');
Router::connect(AdminName,AdminName.'/posts/index');
Router::connect($langUser.'/page/:slug-:id','pages/view/id:([0-9]+)/slug:([a-z0-9\-]+)');
Router::connect($langUser.'/blog/:slug-:id','posts/view/id:([0-9]+)/slug:([a-z0-9\-]+)');
Router::connect($langUser.'/blog/category/:slug','posts/category/slug:([a-z0-9\-]+)');
Router::connect($langUser.'/blog/*','posts/*');

Donc tous ceci fonctionne bien mise à part que j'aimerais que la langue ce définisse simplement en modifiant l'url exemple :

langue FR : http://localhost/monsite/fr/page/accueil-1

langue EN : http://localhost/monsite/en/page/accueil-1

Suis-je sur la bonne vois ?

Merci de votre aide.

Cordialement

2 réponses

Grafikart, il y a 14 ans

A toi de trouver une solution. Peut être dans le lancement du controller récupérer le premier paramètre de l'url (fr ou en) et mettre une variable de conf

Lqncer, il y a 14 ans

Bonjour,

Merci de votre réponse effectivement j'ai récupéré la langue directement depuis l'url.
Ensuite je joue avec les champs de la base de donnée pour définir la langue.

Cordilement ;)