2009-01-31 6 views
2

J'ai plusieurs ressources et je veux en quelque sorte avoir un paramètre: lang dans l'en-tête. So/fr/posts/dirigerait vers posts_controller/index avec params [: lang] == fr.Mon site doit prendre en charge plusieurs langues, comment acheminer les rails?

Comment cela se fait-il habituellement? Il semble laid d'avoir à ajouter? Lang = fr sur chaque lien et se sentir très non-railsy.

Je pense que vous savez de quoi je parle même si je ne suis pas très clair, quelle est la norme ici?

Répondre

0

N'êtes-vous pas censé éviter complètement les routes et définir un langage basé sur l'en-tête HTTP Accept-Language du navigateur? See Here.

J'imagine que vous devriez donner à vos utilisateurs une option pour changer leur langue, puis stocker cette valeur dans un cookie, qui pourrait ensuite être retiré dans un before_filter.

Pourquoi faire cela? Eh bien, "meilleure pratique HTTP" stipule que chaque ressource doit avoir un URI. Un article est toujours le même article, que ce soit en espagnol ou en anglais, il devrait donc avoir le même URI. site.com/en/article et site.com/es/article sont clairement pas le même URI, qui viole ce principe

+1

Mais ne pas être en mesure de lier la langue correcte amènerait les gens qui visitent une page à penser qu'ils sont venus à la mauvaise page? Si vous parlez l'anglais et obtenez un lien d'un ami anglais et venez ensuite à une page qui est remplie de suédois. On serait assez confus? – Fredrik

+1

-1: la solution proposée n'est pas RESTful, ce qui * à mon avis * est bien pire que "pas la meilleure pratique HTTP". – ANeves

+0

Aussi, il n'est pas une bonne solution, car les robots des moteurs de recherche pourraient récupérer aléatoirement les paramètres régionaux de l'article. – Drakmail

1

Une façon de le faire serait:

map.resources :yourresources, :path_prefix => '/:lang' 

Vous pouvez également ajouter le filtre des paramètres de langue:

map.resources :yourresources, :path_prefix => '/:lang', :lang => /(en|de|jp)/ 
+0

Comment puis-je créer des liens avec la ressource? Aurais-je besoin de faire link_to myresource_path (: lang => "en") ou pourrais-je définir une sorte de langage standard à utiliser quand aucun argument n'est donné? – Fredrik

+0

Oui, vous devrez passer un certain langage dans l'aide de lien. Cependant, vous pouvez définir une langue par défaut dans le fichier environment.rb (en tant que constante), puis créer une méthode (par exemple get_language) dans le contrôleur d'application qui retournera cette valeur par défaut si params [: lang] n'est pas défini. –

Questions connexes