2010-08-29 18 views
2

Disons que je veux faire un système qui peut se permettre un projet web multilingue. Le système se composera des modules qui sont placés dans le répertoire standard de Kohana modules. Disons que l'accès standard à la langue particulière peut être effectué via le paramètre lang (c'est-à-dire somesite.com/ et/somepage). Le problème est que je dois me répéter en définissant mes routes de modules précédant chaque uri avec (<lang>). Y a-t-il un moyen d'éviter cela? J'ai pensé à une déclaration de route de langue séparée (par exemple dans le fichier bootstap.php), mais je suppose que cela ne résoudra pas le problème.Comment ne pas me répéter sur les parcours de Kohana 3?

Tout sur Kohana 3. Merci à tous.

MISE À JOUR: Je pense que la manière suggérée par le développeur de Pixel est ce que l'on besoin si une partie de la règle en cours de route se répète partout.

Répondre

2

Augmentez le niveau et étendez la classe de route.

http://github.com/kohana/core/blob/master/classes/kohana/route.php#L69

public static function set($name, $uri, array $regex = NULL) 
{ 
    return parent::set($name, '(<lang>)'.$uri, $regex); 
} 

Non testé, mais c'est l'idée générale.

+0

hm. Idée intéressante. Pourquoi je n'y ai pas pensé. Je vais essayer plus tard et mettre à jour la question. – franzose

+0

Pas de problème. Ne pas oublier d'accepter la réponse si c'est correct. Les gens seront plus susceptibles d'aider à l'avenir si vous avez un taux d'acceptation élevé. –

+0

Bien sûr, je vais certainement le faire juste après je l'ai essayé! – franzose

2

Si lang est requis dans l'itinéraire, pourquoi ne pas le mettre dans la route par défaut? C'est sûrement la façon la plus facile de s'y prendre. Quelque chose comme:

Route::set('default', '<lang>(<controller>(/<action>(/<id>)))', array('lang'=> '[a-z]{2}')) 
->defaults(array(
    'controller' => 'somepage', 
    'action'  => 'index', 
    'lang'  => 'en', 
)); 

Où lang est un alphabet de 2 lettres qui par défaut est 'en'.

+0

Peut-être que je ne comprends pas très bien le système de routage, mais dans un tel cas, je vais devoir mettre dans chaque prochaine route que je vais définir, n'est-ce pas? Maintenant, je ne peux pas vérifier toutes les façons dont j'ai déjà eu ici, mais je suppose que The Pixel Developer a raison ... Dans les prochaines heures, je vais essayer. – franzose

+0

Oui, vous devrez le mettre pour tous les itinéraires. Voir cette page pour des exemples plus élégants: http://kerkness.ca/wiki/doku.php?id=routing:multi-language_with_a_route – syaz