gpt4 book ai didi

ruby-on-rails-3.1 - 具有可选范围 ":locale"的 Rails 路由

转载 作者:行者123 更新时间:2023-12-04 00:01:19 25 4
gpt4 key购买 nike

我正在开发一个 Rails 3.1 应用程序,我想为该应用程序将支持的不同语言设置特定的路由。

/es/countries
/de/countries


对于默认语言 ('en'),我不希望在 url 中显示语言环境。
/countries

这是我设置的路由定义。
scope "(:locale)", :locale => /es|de/ do
resources :countries
end

它工作得很好,直到我尝试使用带有“en”作为语言环境的路径助手。

在控制台中:
app.countries_path(:locale => 'fr')
=> "/fr/countries"

app.countries_path(:locale => 'en')
=> "/countries?locale=en"

我不想要“?locale=en”。

有没有办法告诉 rails 使用“en”语言环境,不应将语言环境参数添加到 url 中?

谢谢

最佳答案

这应该是一个更好的解决方案:

在你的 routes.rb 中,

scope "(:locale)", locale: /#{I18n.available_locales.join("|")}/, defaults: {locale: "en"} do

正如 MegaTux 所说,设置 defaults: {locale: "en"}范围内。

优势:
jlfenaux 解决方案适用于大多数情况,但不是全部。在某些情况下(基本上就像你的主 Controller 和 View 之外的任何东西),路径助手会混淆并将对象或 object.id 放在 locale 中。参数,会导致错误。你会发现自己把 locale: nil在许多路径助手中避免这些错误。

可能的问题:
看来 defaults: {locale: "en"}始终覆盖您为 locale 传入的任何其他值.该选项名为 default ,所以我希望它仅在没有值时才将语言环境分配给“en”,但事实并非如此。还有其他人遇到这种情况吗?

关于ruby-on-rails-3.1 - 具有可选范围 ":locale"的 Rails 路由,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8224245/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com