I am using subdomains to determine the locale in a Rails 4 website. I have this working with a locale switcher exactly the way I want it but now I need to translate the routes and I'm not sure about the best way to proceed.
I have looked the https://github.com/kwi/i18n_routing i18n routing gem but this doesn't work with subdomains, it seems to change the path by adding /locale which is not what I need.
Other gems seem to be out of date with Rails 4.
Edit
Basically I want to be able to use the same view helpers but have the urls change to use whatever language is reflected by the selected sub-domain. this is just about route translation.
I have language specific templates which work and I can produce language spevific navigation templates but I would really like to not have to worry about changing erb path and url erb tags
End edit
A sample from routes.rb
scope module: 'countries', shallow: true do
get 'south_american', to: 'south_america#index', as: :south_america
scope module: 'south_america' do
get 'south-america-weather', to: 'weather#index', as: :south_america_weather
get 'south-america-gps-maps', to: 'gps#index', as: :south_america_gps
get 'south-america-accommodation', to: 'hotels#index', as: :south_america_hotels
get 'south-america-vacations', to: 'vacations#index', as: :south_america_vacations
get 'south-america-facts', to: 'facts#index', as: :south_america_facts
end
Using south_america_hotels_path as an example will generate a url for
south-america-accommodation
which is great but how would I translate this so that when I am on the Spanish subdomain south_america_hotels_path will generate the following url
hoteles-en-sudamerica
UPDATE
Also how would this work for a url rather than just a path so that south_america_hotels_url will generate
en.some_site/south-america-accommodation
and when on the spanish subdomain I would get
es.some_site/hoteles-en-sudamerica
and so on for the different locales involved.
I am happy to use yml files for the translations for the urls or to define the additional routes in the routes.rb file, either is an option but I would prefer to define the url's in the routes.rb but I am unable to find a way to provide language specific urls for the same :as path/url option based on subdomain.
Update and further clarification in response to previous replies.
Changing the url's is not an option, they need to match existing url's. I just need to know how to translate them from a view helper point of view without having to change the view helpers.
EDIT:
This gem is my recommended way to do it. Supports multiple languages without reloading the routes (Which my example didn't). You have to change very few things but it's more consistent than the code below. route translator
Original answer (not working):
This is what have worked for me, you can try it out, in your routes for example you can put:
AppName::Application.routes.draw do
get "/#{I18n.t("index")}", :to => "pages#index", :as => "index"
get "/#{I18n.t("contact")}", :to => "pages#contact", :as => "contact"
end
this will get you the routes in your default locale when you run the app, however in runtime, when you change your locale you need to redraw your routes in order to get the routes for the new locale.
I18n.locale = :es #different locale
AppName::Application.reload_routes!
Assuming your default_locale is :en
, this example will take the first routes from:
en:
index: "index-in-english"
contact: "contact-in-english"
and when the app reload the routes, it will take the translations from your new locale, in this example from
es:
index: "index-in-spanish"
contact: "contact-in-spanish"
This way you it will render pages#index and pages#contact and it'll only change the route, you don't have to touch your code. Hope this helps you