Search code examples
ruby-on-railsrubyruby-on-rails-3rails-routingfriendly-id

Language Specific Routes For Static Pages in Rails 3


Application using Rails 3.2.8 with below gems

gem 'friendly_id', '~> 4.0'
gem 'globalize3',"0.3.0"
gem 'route_translator'

In controller /app/controllers/home_controller.rb

def static_pages
 # page url is unique and used for finding static pages. 
 # Possible values for params[:page] are about_us, contact_us, 
 # privacy, terms_and_conditions
 @static_page = StaticPage.find_by_page_url(params[:page])
end

In routes.rb file

match "/page/:page" => "home#static_pages", :as => :static_page
localized do
  match "label_vacancies/:job_offer"=>"job_seekers#job_offer"
end

In view file

<div class="bot-cont1">
 <ul>
  <% @static_pages.each do |sp| %>
  <% if sp.page_url %>
    <li><%=link_to sp.page_name , static_page_path(:page=>sp.page_url) %></li>
  <%end%>
<%end%>


So below are current format of URLs for static pages

https://www.xxxxxx.com/page/about_us?page=about_us
https://www.xxxxxx.com/page/contact_us?page=contact_us
https://www.xxxxxx.com/page/privacy?page=privacy

But required below format of URLs according language

Aboutus:
https://www.xxxxxx.com/en/about-us
https://www.xxxxxx.com/de/uber-uns
https://www.xxxxxx.com/es/sobre-nosotros
Contact:
https://www.xxxxxx.com/us/contact-us
https://www.xxxxxx.com/de/kontaktiere-uns
https://www.xxxxxx.com/es/contacto

How to achieve this above format of URLs format for staticpages according language. Thanks in advance.


Solution

  • In your route file:

    AppName::Application.routes.draw do
        get "/#{I18n.t("contact")}", :to => "pages#contact", :as => "contact"
        get "/#{I18n.t("about")}", :to => "pages#about", :as => "about"
    end
    

    In your locale files:

    en:
      about: "about-in-english"
      contact: "contact-in-english"
    
    es:
      about: "about-in-spanish"
      contact: "contact-in-spanish"