Présentation Internationalisation à Pari s on Rails

Salut à tous,

Je regardais la page 29 des slides de la présentation sur
l’internationalisation à Paris on Rails, et je suis resté coincé sur
l’exemple qui devrait pourtant fonctionner.

Je suis en Rails 1.2.6 et j’ai copié la portion suivante dans mon
fichier de route :

lang_prefix = ‘:language’

map.resource ‘home’, :path_prefix => lang_prefix
map.resource ‘home’

Si je vais dans mon navigateur et que je tape :
/home, params vaut bien {:controller => “home”, :action => “show”}
/fr/home, params vaut bien {:language => “fr”, :controller => “home”,
:action => “show”}

La reconnaissance d’URL fonctionne donc bien.

Par contre, quand je construis l’URL avec une route nommée, ça ne
fonctionne pas.

home_path rend bien “/home”
url_for {:language => “fr”, :controller => “home”, :action => “show”}
rend bien “/fr/home”
mais
home_path(:language => “fr”) ne rend pas “/fr/home” mais
“/home?language=fr” alors que je m’attendais à ce que ça retourne
“/fr/home”

Pourquoi ce dernier exemple ne fonctionne-t-il pas ? Comment
faites-vous pour régler le problème du dernier exemple ?

Ce que j’avais déjà fait, c’est placer un name_prefix à la route qui
comporte le path_prefix. Mais dans ce cas, tout devient plus compliqué
et je pensais pouvoir simplifier tout ça…

Merci d’avance,

yk

Hello,

home_path(:language => “fr”) ne rend pas “/fr/home” mais
“/home?language=fr” alors que je m’attendais à ce que ça retourne
“/fr/home”

Pourquoi ce dernier exemple ne fonctionne-t-il pas ? Comment
faites-vous pour régler le problème du dernier exemple ?

Ce que j’avais déjà fait, c’est placer un name_prefix à la route qui
comporte le path_prefix. Mais dans ce cas, tout devient plus compliqué
et je pensais pouvoir simplifier tout ça…

Pour commencer toutes mes excuses pour cette erreurs, pour être honnête
j’ai bien testé que les routes fonctionnais mais pas la génération d’url.

Cette méthode déclare 2 fois la ressource “home”, si rails tient compte
des 2 lors du routage d’une requête il ne tient compte que de la
dernière pour la génération d’url (à moins que une name_prfix existe
bien sure). Pour régler le problème il faut donc inverser les 2
déclarations (ceci implique que si la route sans la langue fonctionne
pour un accès par défaut au site, ce n’est pas le cas pour la génération
d’url ou la langue sera obligatoire).

Nous avons donc :

config/routes.rb

lang_prefix = ‘:language’

map.resource ‘home’
map.resource ‘home’, :path_prefix => lang_prefix

On utilisera donc :


home_path(‘fr’)

ou pour une collection (la langue est le premier paramètre) :


user_path(‘fr’, @user)

Ceci fonctionne avec rails 2.0.2, je n’ai pas testé avec rails 1.2.6
(mais il ne me semble pas qu’il y ai eu de changement à ce niveau).
Merci d’avoir signaler ce problème, je vais voir pour le corriger sur la
présentation et mettre la version corrigé à disposition.

Yann.


Yann Lugrin
[email protected]

http://www.sans-savoir.net

Disons qu’avec la 2ème solution, on a simplement déplacer le problème.
Maintenant, comme tu le dis toi même, on ne peut plus faire home_path
pour avoir la route par défaut sans la locale… Encore une fois, je
vois que mettre un name_prefix pourrait combler une partie du besoin,
mais le problème sera une nouvelle fois déplacé…

++

yk

Le 19/12/07, Yann Lugrin[email protected] a écrit :

En effet, mais la variante d’une url sans la langue ne devrais
normalement pas être utilisé une fois dans le site. d’ailleurs j’aurais
tendance à conseiller de faire une redirection depuis la home “/” vers
la home de la langue par défaut “/fr” et de ne pas utiliser la page tel
quelle (en autre a cause des robots d’indexation).

Après faut voie le contexte particulier dans lequel tu te trouve peut-être.

Yann

Yann KLIS wrote:

Disons qu’avec la 2ème solution, on a simplement déplacer le problème.
Maintenant, comme tu le dis toi même, on ne peut plus faire home_path
pour avoir la route par défaut sans la locale… Encore une fois, je
vois que mettre un name_prefix pourrait combler une partie du besoin,
mais le problème sera une nouvelle fois déplacé…


Yann Lugrin
[email protected]

http://www.sans-savoir.net

Je ne suis pas forcément dans un particulier.

En gros, j’aimerais avoir le même principe que sur apple.com :

  • les urls sans le code iso en 2 lettres tapent sur la version avec la
    locale par défaut
  • les autres tapent sur la locale en fonction du code iso à 2 lettres

D’après un expert SEO, et si je le cite ici c’est aussi pour entendre
votre avis, chaque composant de l’URL (entre des ‘/’) en moins, c’est
autant de pertinence de gagnée.
En gros, en rajoutant /fr/ ou /en/, on donne de l’information au robot
dont il n’a pas forcément besoin.

Maintenant, c’est vrai que rediriger automatiquement vers une URL
contenant le code ISO n’est peut-être pas forcément si
problématique…

++

yk

Le 19/12/07, Yann Lugrin[email protected] a écrit :

D’après un expert SEO, et si je le cite ici c’est aussi pour entendre
votre avis, chaque composant de l’URL (entre des ‘/’) en moins, c’est
autant de pertinence de gagnée.
En gros, en rajoutant /fr/ ou /en/, on donne de l’information au robot
dont il n’a pas forcément besoin.

Sauf que pour qu’un robot index toutes les langues d’un site il faut
bien les séparer d’une façon ou d’une autre. Après avoir la langue par
défaut du site sans le code dans l’url je ne sais pas si c’est un vrais
plus pour un bon référencement, je ne suis pas expert dans le domaine de
l’indexation.

De toute façon il n’y a pas de solutions parfaites avec le routing par
resource, celle que je propose est selon moi celle qui s’intègre le
mieux, même si ça implique de ne jamais utiliser les url sans le code de
langue. Peut-être que l’avenir de rails et des plugins de support de
l’internationalisation va corriger ce petit problème, en tout cas je
l’espère.


Yann Lugrin
[email protected]

http://www.sans-savoir.net

This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.

| Privacy Policy | Terms of Service | Remote Ruby Jobs