Имам следното по моите маршрути
scope "/(:locale)", locale: /en|fr/, constraints: LocaleConstraint do
# I want to be able to detect the locale that was used in the URL
get "/tool" , redirect_to(/a_certain_page)
end
Сега в зависимост от локала, който е в URL адреса, искам да пренасочвам към различни страници.
По принцип искам следното:
get "/fr/tool", redirect_to(/tool_in_french)
get "/en/tool", redirect_to(/tool_in_english)
Очаквах нещо като:
scope "/(:locale)", locale: /en|fr/, constraints: LocaleConstraint do
get "/tool" => locale == :fr ? redirect_to(/tool_in_french) : redirect_to(/tool_in_english)
end
Отговори:
0 за отговор № 1Мисля, че е по-добра практика да се намери език в application_controller.rb с помощта на params.
private
def set_locale
session["locale"] = params[:locale] || session["locale"] || I18n.default_locale
I18n.locale = session["locale"]
end
Не съм сигурен какъв е инструментът за преводно с I18n това работи перфектно. В маршрутите трябва просто да добавите: locale към пакета като параметър. И това може да бъде принудено в application_controller.rb. Обхватът е правилен, без да е налице неизпълнение; Релси: как да се използва обхват с params и да се използва маршрут с стойност по подразбиране на парами
before_action :set_locale
Ако не използвате I18n, пак можете да използвате този метод, за да се свържете към различни папки за преглед и да преминете към правилния файл за преглед във всеки метод на всички контролери, много работа.
http://guides.rubyonrails.org/i18n.html