Я работаю над многоязычным рельсовым приложением, и мне нужно, чтобы маршруты были разными для каждой локали. Это трудно объяснить, как это для меня, поэтому я буду использовать пример:Маршруты маршрутов на основе языка
- ан:/EN/расценки
- эсов:/эс/цены
Я нашел этот ответ: Rails 4 i18n, how to translate routes where subdomain is used for the locale
Поэтому мой routes.rb выглядит следующим образом:
scope "/:locale" do
get "/", to: "pages#index", as: "index"
get "/#{I18n.t("pricing")}", :to => "pages#pricing", :as => "pricing"
end
Я также использую AppName::Application.reload_routes!
при загрузке приложения (контроллер приложения before_action), но сразу после изменения локали остальная часть URI после/locale остается прежней - это создает проблему, когда пользователь пытается перезагрузить страницу, потому что она больше не существует. Другие клики в порядке, с новыми языковыми URI.
Я думаю о системе, чтобы узнать, является ли мой текущий URI правильным, а если нет, перенаправляйте его туда, но я думаю, что это субоптимально. Есть ли у вас какие-либо предложения?
Заранее спасибо.
К сожалению, это не идеальное решение, оно требует драгоценного камня и переделать всю структуру. В идеале 'reload_routes!' Следует вызывать, когда пользователь нажимает на другой язык. Не могли бы вы предложить немного взломать это? Спасибо – kellins
Я бы предпочел использовать хорошо протестированный камень для * взлома *. Я действительно был бы очень рад считать, что это «рефактор», а не «переделка» ... Также, вызывая '' reload_routes! '' Каждый раз, когда пользователь попадает в ресурс ... ну, это кажется не только уродливым и пропущенным -use для этого метода, это также требует, чтобы вы сделали некоторые «переделки». Я бы предложил вам вместо этого рассмотреть драгоценный камень. – dgilperez
Кроме того, я просто понял, что вы притворяетесь, что включаете локали в маршрут вместо субдоменов. Это должно работать из коробки с драгоценным камнем. – dgilperez