【问题标题】:Translate path with rails i18n使用 rails i18n 转换路径
【发布时间】:2015-02-08 19:44:58
【问题描述】:

我有一个使用 friendly_id 和 globalize 运行的 rails 4.0.0 应用程序(即使 freindly_id 和 globalize 对这个问题可能无关紧要)。

我的部分 routes.rb 是:

scope "(:locale)", locale: /en|de/ do
  resources :mainclasses, :path => :types
end

我现在想为英文版添加 ":path => :types"(创建一个类似 www.website.com/types/etc 的网址,德文版应该是 ":path => :typen "(创建 www.website.com/de/typen/etc)。

有没有办法根据当前语言环境更改路径?

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-4 localization internationalization rails-i18n


    【解决方案1】:

    我建议你看看route_translator gem。它将帮助您将路由转换为任何语言环境,使用范围或子域处理语言环境等。

    从你的例子中,你会有这样的事情:

    MyApp::Application.routes.draw do
      localized do
        resources :mainclasses, path: :types
      end
    end
    

    连同一个语言环境文件routes.yml:

    en:
      routes:
        types: types
    de:
      routes:
        types: typen
    

    希望对你有帮助。

    【讨论】:

    • 它基本上可以工作。但是对于英文版,我跳过了 url 中的 /en/ 语言环境......并且这个解决方案将 /en/ 再次添加到 url 中。如何只添加 /de/ 并跳过 /en/?
    • 看一下配置:github.com/enriclluelles/…,有一个force_locale参数可以设置为false
    • 是的,我已经检查过了。但是我需要保留 /de/ 而我不使用 /en/。我不使用 /en/,因为我已经有一个正在运行的英文网站,并且我不想更改此语言版本的任何 url。对于德语版本,我需要 /de/ 以避免重复的 url。我现在猜 route_translator 对我不起作用。
    • 仔细检查文档。据我了解, force_locale: false 选项为您提供了这样的功能:保持英语(默认)版本不带/en 前置,并为其余语言添加区域设置(/de/)。这是原始 gem 背后的哲学(那是一个叉子)。我就是这样使用这个姊妹宝石的:github.com/francesc/rails-translate-routes
    猜你喜欢
    • 2013-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多