Bonjour à tous les développeurs sous rails,
Cela faisait quelques jours que je cherchais le moyen le plus agréable pour internationaliser mon projet, faute de documentation cohérente et précises et en fouillant et bidouillant (beaucoup (a) ), j'ai créer un petit truc qui pourrait vous servir.
Je vous présente donc un petit bout de code qui permet de traduire votre site en instaurant un préfixe de langue de telle manière que :
L'avantage de la technique que j'utilise est que si on essaie de lancer une langue inconnue (ici le japonais(jp) pour exemple), le script agit comme cela :
En gros pas de problème pour gérer vos lien vu que le script se charge de directement changer vos urls si elles ne sont pas valide :
get "contact", :to => "public/pages#contact", :as => "pub_pages_contact"
redirect_to pub_pages_contact_path
=> http://votsite.com/contact => http://votsite.com/fr/contact
pour changer de langue, rien de plus facile soit vous redirigez le client vers :
http://votsite.com/en/votre-page et la locale devient "en".
ou bien vous lancer dans un controller
def change_locale
session[:locale] = "en"
end
Voila voila (désolé mais le formatage ne marche pas chez moi :S)
Cela faisait quelques jours que je cherchais le moyen le plus agréable pour internationaliser mon projet, faute de documentation cohérente et précises et en fouillant et bidouillant (beaucoup (a) ), j'ai créer un petit truc qui pourrait vous servir.
Je vous présente donc un petit bout de code qui permet de traduire votre site en instaurant un préfixe de langue de telle manière que :
L'avantage de la technique que j'utilise est que si on essaie de lancer une langue inconnue (ici le japonais(jp) pour exemple), le script agit comme cela :
En gros pas de problème pour gérer vos lien vu que le script se charge de directement changer vos urls si elles ne sont pas valide :
get "contact", :to => "public/pages#contact", :as => "pub_pages_contact"
redirect_to pub_pages_contact_path
=> http://votsite.com/contact => http://votsite.com/fr/contact
pour changer de langue, rien de plus facile soit vous redirigez le client vers :
http://votsite.com/en/votre-page et la locale devient "en".
ou bien vous lancer dans un controller
def change_locale
session[:locale] = "en"
end
Voila voila (désolé mais le formatage ne marche pas chez moi :S)
class ApplicationController < ActionController::Base
protect_from_forgery
before_filter et_locale
def set_locale
default_locale = "en"
session[:locale] = default_locale if session[:locale].nil?
session[:locale] = params[:locale] if i18n_valid?(params[:locale])
I18n.locale = session[:locale]
i18n_url
end
private
# Check if locale is valid.
def i18n_valid?(lang)
available_locale = ["en","fr"]
valid = false
available_locale.each do |test|
valid = true if test == lang
end
return valid
end
# Redirect with correct prefix.
def i18n_url
url = request.fullpath.split("/")
redirect_to url.insert(1,session[:locale]).join("/") if !i18n_valid?(url[1])
end
end
Cataclysmic::Application.routes.draw do
# Homepage.
root :to => "public/pages#home"
# Analyse url http://localhost/:locale/path.
scope "/:locale" do
root :to => "pages#home"
get "home", :to => "pages#home"
end
end