Jestem w trakcie dodawania internacjonalizacji do aplikacji Rails i mniej więcej po odpowiednich Rails Guide i Railscast.Konfigurowanie tras Railsów w celu dostosowania do i18n
Zabrakło mi na dwie kwestie:
- Jak mogę dodać „domowy” link, który przekierowuje do bieżącej lokalizacji. Obecnie mam linki root_path, ale te zawodzą z powodu linii w routes.rb, zaprojektowanej do przechwytywania nieskopiowanych korzeni. Oznacza to, że ścieżka_kompilacji zawsze kieruje się do domyślnych ustawień narodowych, a nie do bieżących ustawień narodowych.
- Mam wszystko skonfigurowane i działające lokalnie (z wyjątkiem powyższego problemu z wyjątkiem numeru ), ale wdrażanie w Heroku wszystkich adresów URL wydaje się zrzucać poprzez mój plik tras i zostać złapanym przez jeden z haczyków. Przekierowują się one do '/' pod ustawieniem defulat .
Mój zestaw górę jest następujący
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?
end
routes.rb
scope ":locale", locale: /#{I18n.available_locales.join("|")}/ do
all_my_routes
# handles /valid-locale
root to: 'home#index', as: "localized_root"
# handles /valid-locale/fake-path
match '*path', to: redirect { |params, request| "/#{params[:locale]}" }
end
# handles/
root to: redirect("/#{I18n.default_locale}")
# handles /bad-locale|anything/valid-path
match '/*locale/*path', to: redirect("/#{I18n.default_locale}/%{path}")
# handles /anything|valid-path-but-no-locale
match '/*path', to: redirect("/#{I18n.default_locale}/%{path}")
My home Link:
<%= link_to "Home", root_path %>
Świetne, że udało ci się uzyskać wszystko działa tak, jak chcesz. Jeśli zamierzałem coś zmienić, domyślam się, że odkąd zdecydowałeś się na użycie "I18n.locale" jako swojego "catch-all", prawdopodobnie użyjesz go we wszystkich innych połączeniach "match" zamiast "I18n" .default_locale', ponieważ przekierowujesz na "ostatnią znaną lokalizację" zamiast "Nie wiem, jakie ustawienia regionalne chcesz, aby uzyskać domyślne ustawienia regionalne aplikacji". Czy też pisałeś testy routingu? Jeśli tak, możesz je udostępnić, edytuj odpowiedź i opublikuj je dla dobra wszystkich. –