如何使 ActiveStorage 在我的语言环境中工作?
How can I make ActiveStorage work within my locales?
如何使 Activestorage 在我的语言环境中工作,例如 www.localhost:3000/es/
?
我启动了 activestorage 并且 运行。图像已保存并可在视图中查看。
然后,我使用以下代码将语言环境添加到我的路线中:
scope "(:locale)", locale: /#{I18n.available_locales.join("|")}/ do
resources :posts
root to: 'pages#index'
get '/*locale/*path', to: redirect("/#{I18n.default_locale}/%{path}")
get '/*path', to: redirect("/#{I18n.default_locale}/%{path}"), constraints: lambda { |req| I18n.available_locales.none? { |locale| req.path.starts_with? locale.to_s } }
我的 application_controller.rb
中也有一个之前的操作
before_action :set_locale
def set_locale
I18n.locale = params[:locale] if params[:locale].present?
end
def self.default_url_options(options = {})
{ locale: I18n.locale }
end
如果我删除上面的代码,就会显示图像。如何使 image_tags 与我的国际化一起工作?
我不得不改变路线。我添加了一个 LocaleConstraint。
以下是适用于 ActiveStorage 的路由:
class LocaleConstraint
def self.matches?(request)
(I18n.available_locales.none? { |locale| request.path.starts_with? locale.to_s }) && (!request.path.include? 'rails/active_storage/blobs')
end
end
Rails.application.routes.draw do
scope "(:locale)", locale: /#{I18n.available_locales.join("|")}/ do
devise_for :users, controllers: { registrations: 'registrations' }
resources :posts
get '/*locale/*path', to: redirect("/#{I18n.default_locale}/%{path}")
get '/*path', to: redirect("/#{I18n.default_locale}/%{path}"), constraints: LocaleConstraint
end
end
如何使 Activestorage 在我的语言环境中工作,例如 www.localhost:3000/es/
?
我启动了 activestorage 并且 运行。图像已保存并可在视图中查看。
然后,我使用以下代码将语言环境添加到我的路线中:
scope "(:locale)", locale: /#{I18n.available_locales.join("|")}/ do
resources :posts
root to: 'pages#index'
get '/*locale/*path', to: redirect("/#{I18n.default_locale}/%{path}")
get '/*path', to: redirect("/#{I18n.default_locale}/%{path}"), constraints: lambda { |req| I18n.available_locales.none? { |locale| req.path.starts_with? locale.to_s } }
我的 application_controller.rb
before_action :set_locale
def set_locale
I18n.locale = params[:locale] if params[:locale].present?
end
def self.default_url_options(options = {})
{ locale: I18n.locale }
end
如果我删除上面的代码,就会显示图像。如何使 image_tags 与我的国际化一起工作?
我不得不改变路线。我添加了一个 LocaleConstraint。 以下是适用于 ActiveStorage 的路由:
class LocaleConstraint
def self.matches?(request)
(I18n.available_locales.none? { |locale| request.path.starts_with? locale.to_s }) && (!request.path.include? 'rails/active_storage/blobs')
end
end
Rails.application.routes.draw do
scope "(:locale)", locale: /#{I18n.available_locales.join("|")}/ do
devise_for :users, controllers: { registrations: 'registrations' }
resources :posts
get '/*locale/*path', to: redirect("/#{I18n.default_locale}/%{path}")
get '/*path', to: redirect("/#{I18n.default_locale}/%{path}"), constraints: LocaleConstraint
end
end