JeuWeb - Crée ton jeu par navigateur
I18n : PUS - Prefix Urls Solution - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : I18n : PUS - Prefix Urls Solution (/showthread.php?tid=3617)



I18n : PUS - Prefix Urls Solution - Thib4s - 09-11-2010

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) Big Grin), 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 Smile (désolé mais le formatage ne marche pas chez moi :S)

class ApplicationController < ActionController::Base
protect_from_forgery
before_filter Confusedet_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



RE: I18n : PUS - Prefix Urls Solution - Plume - 09-11-2010

[HS: Il est sympa ton site http://erandar.com/ Tongue]

En ce qui me concerne, les locales sont automatiquement gérées. J'ai des templates qui contiennent dans le nom de fichier la locale correspondante :
  • home.fr.html.haml
  • home.en.html.haml

J'utilise les templates pour les pages où il y a plus que quelques mots à traduire.

Sinon, il y a des fichiers YAML dans /config/locales. Tu peux lire le commentaire du fichier en.yml pour savoir comment ça marche. Sinon, il y a la doc de Rails Smile

Je ne suis pas sûr d'avoir un intérêt à faire apparaître les locales dans l'url.


RE: I18n : PUS - Prefix Urls Solution - Thib4s - 09-11-2010

Ha oui mais je travaille aussi avec les yaml pour ce qui est traduction de petits mots et les fichiers de langue tels que contact.en.html.haml, etc... ;P

C'est juste que si tu regarde tous les grands sites utilisent la méthode du préfix (adobe est un très bon exemple).
Tout cela permet une plus grande ergonomie et un meilleur référencement mais surtout une meilleur compréhension des url par l'utilisateur Smile


RE: I18n : PUS - Prefix Urls Solution - Plume - 09-11-2010

J'y verrais une utilité si l'url était traduite.

Par exemple :
Là, OK, l'url serait plus compréhensible. Sans ça, j'suis pas sûr de trouver cohérent à la lecture de l'url quelque chose comme :
Si elle n'est impactée que par l'ajout de la locale, j'n'y vois pas d'intérêt, personnellement.

You see?


RE: I18n : PUS - Prefix Urls Solution - Anthor - 09-11-2010

(09-11-2010, 10:50 AM)_who a écrit : Je ne suis pas sûr d'avoir un intérêt à faire apparaître les locales dans l'url.

Et comment tu changes de locale sans la passer ?


RE: I18n : PUS - Prefix Urls Solution - Roworll - 09-11-2010

(09-11-2010, 03:05 PM)_who a écrit : J'y verrais une utilité si l'url était traduite.

Par exemple :
Là, OK, l'url serait plus compréhensible. Sans ça, j'suis pas sûr de trouver cohérent à la lecture de l'url quelque chose comme :
Si elle n'est impactée que par l'ajout de la locale, j'n'y vois pas d'intérêt, personnellement.

You see?

Blizzard par exemple, ça n'a pas l'air de les gêner :
http://eu.blizzard.com/en-gb/company/index.html
http://eu.blizzard.com/fr-fr/company/index.html
http://eu.blizzard.com/de-de/company/index.html

Visiblement, ils n'ont pas vu l'intérêt à traduire l'URL.


RE: I18n : PUS - Prefix Urls Solution - Plume - 09-11-2010

@Roworll :
Je n'ai pas dit que ma façon de voir était bonne, elle est juste mienne et il est clair que mon avis vaut ce qu'il vaut. Guère plus. Ainsi que je n'ai pas dit que j'cautionnais la façon de faire des autres. Blizzard est une très bonne compagnie mais c'est pas pour ça que leur parole est évangile.

Maintenant, je ne sais pas trop si tu me dis ça pour me faire comprendre quelque chose comme le fait que je devrais revoir ma façon d'apprécier les choses ou si tu relèves ce fait juste pour l'anecdote ?

@Anthor :
Avec la gem I18n (native depuis Rails 2.2), la locale est détectée suivant les informations du client, selon l'IP, selon les informations du profil de l'utilisateur, ou via un cookie. 'fin après, c'moi qui voit. Après, il est effectivement possible de déclarer une locale via des paramètres dans l'URL, juste que je ne le fais pas autant que ne pas faire se peut Smile


RE: I18n : PUS - Prefix Urls Solution - Roworll - 09-11-2010

Houla, je disais juste ça pour l'anecdote hein.
Le choix qu'ils ont fait est sans doute l'un des moins casse tête et quand on fait le tour de quelques autres sites, c'est soit ça, soit la variable de session.

Faut pas se mettre sur la défensive à ce point ça parce que j'ai cité une sorte de contre exemple.

La prochaine fois, je rajouterai plein de smiley qui rigolent, ça passera peut être mieux.

[Edit]
Big Grin


RE: I18n : PUS - Prefix Urls Solution - Thib4s - 09-11-2010

Ha mais pour la changer snas la passer suffit de placer dans un controller un session[:locale] = "en" par exemple et sa marche nikel Smile
Sinon je n'ai pas dit non plus que ma manière était la meilleure mais elle permet le meilleur référencement Smile


RE: I18n : PUS - Prefix Urls Solution - Plume - 09-11-2010

T'inquiètes Roro, j'suis pas sur la défensive. J'donnais juste une réponse dans les deux cas. Une réponse double à anticipation intégrée Big Grin

@Thibas : J'en reviens donc à ce que je disais, quitte à avoir des url anglophones, autant ne pas faire apparaitre la locale dedans. J'trouve ça moins cohérent sinon.