0

Je veux utiliser une réécriture d'URL sur mon site:Zend_Controller_Router: obtenir la langue du secteur traduit

/:@controller/:@action/ 

Je veux utiliser des segments traduits sur la route et je veux détecter la langue demandée à ces segments traduits. Par exemple, si l'utilisateur demande une URL comme celle-ci:

/user/profile/ 

alors je pourrais comprendre que la langue demandée est l'anglais. Et si l'utilisateur demande une URL comme ceci:

/kullanici/profil/ 

alors je comprends Coult cette langue est le turc. Comment puis-je faire cela avec Zend_Controller_Router?

Répondre

0

Nous avons résolu notre problème en créant un nouveau routeur avec extension Zend_Controller_Router_Route. Nous avons remplacé la méthode "match" de la classe et ajouté quelques lignes de code au code de correspondance d'origine.

..... 
foreach($translateMessages as $key => $val) { 
    if (($originalPathPart = array_search($pathPart, $val)) !== false) { 
    $pathPart = $originalPathPart; 


    if (!$this->_localeSet) { 
     $locale = Zend_Registry::get('Zend_Locale'); 
     $locale->setLocale($key); // Set Locale by translated key language 
     $this->_localeSet = true; // Added to class with default value false 
     $this->_activeLocale = $key; // Added to class with default value '' 
    }else{ 
     // A second translated key but this is not same language. 
     // Then rise 404 error 
     if ($this->_activeLocale != $key) { 
      //FIXME: Rise 404 error 
      throw new Exception("URL Not Found"); 
     }  
    }  
    }  
}  
..... 
0

Je ne sais pas si c'est une bonne idée. Parce que pour ce faire, vous devez d'abord déterminer la langue d'au moins un des segments de route. Pour ce faire, vous devez d'abord connaître le mappage (c'est-à-dire le tracé en anglais ou en tukish?) Ou bien analyser les segments de route avec un dictionnaire de segments de route turc/anglais. Le premier va vous obliger à faire 2 itinéraires pour chaque itinéraire - un en turc et un en anglais, tandis que le dernier va exiger que vous payez une pénalité en temps de traitement de la demande en plus du temps qu'il faut pour faire correspondre le route. IMO il serait préférable de s'en tenir au type :lang/:controller/:action type de construction de route. Cela dit, si vous allez le faire, je voudrais créer un nouveau type de route à gérer en faisant correspondre l'URI à une langue. Cela définirait alors un paramètre de langage pour vous, mais il devrait également réinitialiser l'URI à une langue de base spécifique que vous allez réellement faire correspondre à l'itinéraire standard. Je voudrais ensuite utiliser Zend_Controller_Router_Route_Chain pour enchaîner les deux ensemble.

+1

Ce n'est pas une bonne chose que d'utiliser des mots anglais sur l'URL pour une page complètement turque pour les techniques de SEO. Et en utilisant des mots turcs pour les pages en anglais aussi ... Dans notre configuration du routeur Zend Framework accapare déjà le contrôleur a demandé de ce type de segments traduits. Le seul problème est, je ne pouvais pas obtenir ce que la traduction utilisée lors de l'obtention du contrôleur actuel. Si j'utilise plusieurs routes pour chaque langue, ma gestion d'URL sera moche, je ne peux pas générer des URLs dynamiques simplement etc. Si c'est possible, je veux utiliser une règle pour toutes les langues. –

+0

@Murat: "Seul problème, je n'ai pas pu obtenir la traduction utilisée lors de l'obtention du contrôleur actuel." Je suis désolé pouvez-vous entrer dans un peu plus de détails ici? Il semble que si ZF fonctionne comme vous le dites, le 'locale' devrait être disponible quelque part dans la pile de l'application, comme dans la requête ou dans le bootstrap. Où se passe la traduction actuellement? – prodigitalson

Questions connexes