ruby-on-rails - 如何避免在生成的URL中添加默认语言环境?

标签 ruby-on-rails internationalization

如果遵循I18N Rails Guide,则所有生成的链接都包含语言环境参数(localhost / en / about,localhost / fr / about)。这是因为我们使用方法default_url_options总是添加Locale参数:

def default_url_options(options={})
  { :locale => I18n.locale }
end


当语言环境未知或默认语言环境时,是否可以从生成的url中删除语言环境参数?

我需要的 :


未知地区:mysite/about
区域设置en:mysite/about(而不是localhost/en/about
区域设置fr:mysite/fr/about


我尝试仅设置不是默认语言环境的语言环境,但是结果是生成的链接永远不会包含语言环境参数...

我尝试过很多类似的事情

def default_url_options(options={})
  if I18n.locale == :fr
    { :locale => I18n.locale }
  else
    { :locale => nil }
  end
end




整个代码:

ApplicationController.rb:

before_filter :set_locale
def set_locale
  I18n.locale = params[:locale]
end

def default_url_options(options={})
  { :locale => I18n.locale }
end


routes.rb

scope "(:locale)", :locale => /en|fr/ do
  match 'about'   => 'static_pages#about',   :via => :get
  match 'contact' => 'static_pages#contact', :via => :get
  match '/' => 'search#index', :as => :search
end

root :to => 'search#index'

最佳答案

好吧,我了解得更好。确实,您几乎做到了。

您只需要在Ruby中使用一个非常有用的运算符:||

如果第一个值存在,则使用它,否则考虑第二个参数。

def set_locale
  I18n.locale = params[:locale] || :en
end

关于ruby-on-rails - 如何避免在生成的URL中添加默认语言环境?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5261521/

相关文章:

java - JSP 找不到 i18n 的默认包

javascript - AJAX 仅更新 div 一次

ruby-on-rails - 将 ruby​​ 数组的元素划分为精确数量的(几乎)大小相等的子数组

ruby-on-rails - activerecord 不像查询

internationalization - 用于 Jquery Mobile 的 i18n 本地化插件?

codeigniter - i18n URL 格式,语言参数始终位于 URL 中

ruby-on-rails - Rails 根测试

ruby-on-rails - Rails View 助手似乎不适用于 render_to_string

android - 在 edittext 中输入日语字符的问题

ruby-on-rails - Rails i18n API 的 Yaml 翻译文件中的复数形式示例