如何在不使用 gem 的情况下使用 Rails 本地化 i18n url

How to localize i18n urls with Rails without using a gem

我的网站现在已本地化为两种语言:

www.website.com/book

www.website.com/de/book

我只使用本地的"de",而不是url中的"en"。

有没有办法将 de-url 更改为例如

www.website.com/de/buch

不使用额外的 gem?我已经使用了 globalize gem,但由于过去的许多问题,我更喜欢使用尽可能少的 gem。

我的部分 application.rb 是:

class 申请 < Rails::Application

config.active_record.whitelist_attributes = false

config.i18n.default_locale = :en
config.i18n.available_locales = [:en, :de]
config.i18n.fallbacks = true
config.i18n.load_path += Dir[Rails.root.join('config', 'locales', '*.{rb,yml}').to_s]
config.i18n.enforce_available_locales = true

我的部分 application_controller.rb 是:

before_filter :set_locale

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

def default_url_options(options = {})
    { :locale => ((I18n.locale == I18n.default_locale) ? nil : I18n.locale) }.merge options
end

路线也本地化了。

https://github.com/norman/friendly_id-globalize 做你想做的。

然而,确实是 gem。

关键是,如果您不愿意使用 gem,您将不得不自己编写与 gem 中一样多的代码,因为没有简单的方法完成这些翻译的 slug url。

然而,这样的事情将远远超出像 Whosebug 这样的问答格式的界限。