Les Rails des voies avec en option portée:locale”
Je travaille sur des Rails 3.1 application et j'aimerais définir des itinéraires spécifiques pour les différentes langues de l'application est à prendre en charge.
/es/countries
/de/countries
…
Pour la langue par défaut ('fr'), je ne veux pas de la locale à être affiché dans l'url.
/countries
Ici est la définition de la route je me suis fixé.
scope "(:locale)", :locale => /es|de/ do
resources :countries
end
Il fonctionne très bien, jusqu'à ce que j'essaie d'utiliser un chemin d'accès helper avec 'fr', comme les paramètres régionaux.
Dans la console :
app.countries_path(:locale => 'fr')
=> "/fr/countries"
app.countries_path(:locale => 'en')
=> "/countries?locale=en"
Je ne veux pas "?locale=fr".
Est-il un moyen de dire rails avec un 'fr' paramètres régionaux, les paramètres régionaux de param ne doit pas être ajoutée à l'url?
Grâce
Votre question répondu à ma question plus que votre réponse n'. Les parenthèses autour de l' :locale. Merci, c'est ce que je cherchais.
OriginalL'auteur jlfenaux | 2011-11-22
Vous devez vous connecter pour publier un commentaire.
Ce DEVRAIT être une meilleure solution:
Dans vos itinéraires.rb,
Comme MegaTux dit, définir
defaults: {locale: "en"}
dans le champ d'application.L'avantage:
Le jlfenaux solution fonctionne dans la plupart des contextes, mais pas tous. Dans certains contextes (comme fondamentalement rien à l'extérieur de votre contrôleurs principaux et les points de vue), le chemin aides vont se confondre et mettre de l'objet ou de l'objet.id dans le
locale
paramètre, ce qui va provoquer des erreurs. Vous trouverez vous-même mettrelocale: nil
dans beaucoup de chemin aides pour éviter ces erreurs.Le problème possible:
Il semble que
defaults: {locale: "en"}
toujours la priorité sur toute autre valeur que vous transmettez pourlocale
. L'option est nommédefault
, donc je m'attends à affecter la locale, 'fr' seulement quand il n'y a pas déjà une valeur, mais ce n'est pas ce qui se passe. Quelqu'un d'autre connaît cela?J'ai le même Problème.
Oui, même problème. Il prend toujours en tant que par défaut
Yep. Même problème. Quelqu'un peut-il résoudre cet inconvénient?
Je ne suis pas sûr de ne pas afficher fr dans l'url comme la question, mais j'ai trouvé cette réponse utile, mais a réalisé tous mes liens, même lorsque la langue de l'INTERFACE n'était pas l'anglais, avaient l'anglais comme leur locale. j'ai donc dû définir les paramètres régionaux par défaut comme jifenaux il l'a fait dans la accepté de répondre plutôt que comme cette réponse montre qu'il fait à l'intérieur du fichier de routes
OriginalL'auteur Arcolye
J'ai enfin compris comment le faire facilement. Vous avez juste à définir la default_url_options dans le contrôleur app comme ci-dessous.
De cette façon, vous êtes sûr de la locale n'est pas envoyé vers le chemin aides.
scope "(:locale)", locale: /en|es/, defaults: {locale: "en"} do
malheureusement, c'est remplacer les autres paramètres régionaux
parfait! pas besoin de par défaut dans les itinéraires
OriginalL'auteur jlfenaux
Si vous ne voulez pas la chaîne de requête, vous n'avez pas à passer de l'aide:
OriginalL'auteur lucapette
Je suis en train de faire une combinaison de ce que @Arcolye et @jifenaux sont en train de faire, en plus de quelque chose de supplémentaire pour que le code soit aussi SEC que possible. Il pourrait ne pas être approprié pour tout le monde, mais dans mon cas, à chaque fois que je veux les aider, une nouvelle locale j'ai aussi créer un nouveau
.yml
fichier dansconfig/locales/
de toute façon, donc c'est comment il fonctionne le mieux pour moi.config/application.rb:
config/routes.rb
app/controllers/application_controller.rb:
OriginalL'auteur Rainer Verteidiger
Si vous décidez de mettre
default_url_options
dans leapplication_controller
pour fixer votre chemin aides, gardez à l'esprit que vous pourriez mettre dans votre admin application_contoller ainsiOriginalL'auteur Roel4811