В настоящее время у меня есть маршрутизация, для которой требуется локаль (например, /en, /fr и т. д.). В какой-то момент я использовал все приведенные ниже операторы в route.rb:
scope "/:locale", locale: /#{I18n.available_locales.join("|")}/ do
scope "/:locale", defaults: { :locale => "en" } do
scope "/:locale" do
Я знаю, что если я сделаю следующее, если маршрут не включает языковой стандарт, он будет указывать на английскую версию веб-сайта. Однако он не устанавливает локаль, как я хочу, после отображения страницы. Если я перейду к французской версии, щелкнув логику локали, первая ссылка отобразит французскую версию страницы с /fr в ссылке. Однако, если я щелкну другую ссылку на французской странице, локаль вернется к английскому языку, а локаль будет исключена из ссылки.
scope "(/:locale)", defaults: { :locale => "en" } do
Вот код для моих ссылок на локали в моем приложении, где пользователь может щелкнуть изображение или текст флага, чтобы изменить локаль:
<%= link_to_unless_current image_tag("english.jpg", alt: "#{t :english}"), locale: "en" %> <%= link_to_unless_current "#{t :english}", locale: "en" %>
<%= link_to_unless_current image_tag("french.jpg", alt: "#{t :french}"), locale: "fr" %> <%= link_to_unless_current "#{t :french}", locale: "fr" %>
Что я хотел бы сделать, так это предотвратить системную ошибку 500, если случайно кто-то сохранил ссылку до того, как веб-сайт был локализован. Например, если у них есть http://mywebsite.com/video, будет отображаться английская версия веб-сайта и установлен локаль на "en".
Вот код, который у меня есть в application_controller.rb.
before_filter :set_locale
def default_url_options(options={})
{ :locale => I18n.locale }
end
private
def set_locale
I18n.locale = (params[:locale] if params[:locale].present?) || cookies[:locale] || 'en'
cookies[:locale] = I18n.locale if cookies[:locale] != I18n.locale.to_s
end
Я не нахожу ничего по этому конкретному вопросу, кроме использования драгоценного камня маршрутизации-фильтра. Я использовал гем, но пока не будет рабочей версии гем для Rails 4, у меня нет другого выбора, кроме как решить эту проблему с маршрутизацией.
Любая помощь будет оценена по достоинству.