当前位置:  开发笔记 > 编程语言 > 正文

使用可选路径前缀创建路由

如何解决《使用可选路径前缀创建路由》经验,为你挑选了1个好方法。



1> Codebeef..:

好的,我已经设法解决了这个问题:

默认情况下,没有办法在Rails中这样做(至少,还没有).我需要安装Sven Fuchs的路由过滤器,而不是使用命名空间和默认值.

安装插件后,我将以下文件添加到我的lib目录:

require 'routing_filter/base'

module RoutingFilter
  class Locale < Base

    # remove the locale from the beginning of the path, pass the path
    # to the given block and set it to the resulting params hash
    def around_recognize(path, env, &block)
      locale = nil
      path.sub! %r(^/([a-zA-Z]{2})(?=/|$)) do locale = $1; '' end
      returning yield do |params|
        params[:locale] = locale || 'en'
      end
    end

    def around_generate(*args, &block)
      locale = args.extract_options!.delete(:locale) || 'en'
      returning yield do |result|
        if locale != 'en'
          result.sub!(%r(^(http.?://[^/]*)?(.*))){ "#{$1}/#{locale}#{$2}" }
        end 
      end
    end

  end
end

我将此行添加到routes.rb:

map.filter 'locale'

这基本上填充了插件生成的前后挂钩,它包裹了rails路由.

当识别出一个url,并且在Rails开始对它做任何事情之前,会调用around_recognize方法.这将提取一个代表语言环境的双字母代码,并在params中传递它,如果没有指定语言环境,则默认为'en'.

同样,当生成url时,locale参数将被推送到左侧的URL中.

这给了我以下网址和映射:

/   => :locale => 'en'
/en => :locale => 'en'
/fr => :locale => 'fr'

所有现有的url助手都像以前一样工作,唯一的区别是除非指定了语言环境,否则它将被保留:

home_path                  => /
home_path(:locale => 'en') => /
home_path(:locale => 'fr') => /fr


感谢您的提示,这对我正在进行的一些翻译/本地化/国际化工作非常有用.仅供参考,您不必将该文件添加到库中 - 插件中已包含"语言环​​境"过滤器.您所要做的就是:1.安装插件.2.将`map.filter'locale'添加到您的routes.rb.之后它就开始工作了!尼斯.我还在我的environment.rb中添加了`RoutingFilter :: Locale.include_default_locale = false`,以避免在我的链接中出现`/ en`.效果很好,我希望Sven的插件能够进入Rails I18n代码库.
推荐阅读
wangtao
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有