Bonjour,

J'essai de mettre en place un système de multilangue sur une application rails.

Pour la partie changement de locale et récupération du bon contenu, tout va bien. Là ou je bloque c'est la redirection.
Après quelques recherches sur google j'en suis arrivé à ceci:

#routes.rb
scope "(:locale)", locale: /#{I18n.available_locales.join("|")}/  do
  root to: 'pages#index', as: "index"
  get '/services' => 'pages#services', as: :services
end

match '/:locale/:path', :via => [:get], to: redirect("/#{I18n.locale}/%{path}/")
match '/:path',:via => [:get],  to: redirect("/#{I18n.locale}/%{path}/"), constraints: lambda { |req| !req.path.starts_with? "/#{I18n.locale}/" }
match '/',:via => [:get],  to: redirect("/#{I18n.locale}/")
#appication_controller.rb
before_action :set_locale

def set_locale
  if params[:locale].present? && I18n.available_locales.include?(params[:locale].downcase.to_sym)
    I18n.locale = params[:locale] #if params[:locale].present?
    else
      begin
        country_code = request.location.country_code
        if country_code
          country_code = country_code.downcase.to_sym
          if [:ca,:ht,:be,:fr,:mc,:ch,:bj,:bf,:bi,:cm,:cf,:td,:km,:cd,:dj,:ga,:gn,:mg,:ml,:ne,:rw,:sn,:sc,:tg].include?(country_code) 
            l = :fr
          elsif [:br,:mz,:ao,:pt,:gw,:tl,:cq,:mo,:cv,:st].include?(country_code)
            l = :pt
          else
            l = :en
          end
        else
            l = I18n.default_locale # use default locale if cannot retrieve this info
        end
      rescue
        l = I18n.default_locale
      end
    I18n.locale = l
  end
end

Si je vais sur /en/ le contenu est bien en anglais, pareil pour /fr/ et /pt/. Par contre si je vais sur / :

  • La selectionde la langue avec geocoder se fait bien
  • Le chargement du contenu avec la bonne langue se fait bien
  • La redirection ne s'effectue pas

De plus j'ai remarqué un autre problème. Les images (par exemple /logos/img.svg) sont affectées par cette redirection. Et donc plein de requetes sont effectuée sur/en/img/.

Pour ce qui est des images, je comprends d'où viens le problème. Pour la redirection, un peu moins.
Si quelqu'un peut m'éclaire là dessus, je dis pas non.

Merci de m'avoir lu.
Cordialement,
TD

5 réponses


Personne? :(

C'est du chinois ?

@Huggy: Je ne suis pas sur de comprendre ta question

C'était pas une question, juste une boutade sur Ror (trop abscons pour moi)
mais à mon avis il ne faut pas passer par le pays pour définir la langue (50% de Belges n'apprécient pas)
il faut examiner le paramètre Accept-Language dans la request
exemple: Accept-Language fr,fr-FR;q=0.8,en-US;q=0.5,en;q=0.3
et choisir dans l'ordre la langue qui mappe le mieux avec celles gérées par le site

Oh je vois ^^. Je ne voyais pas les choses comme ça, c'est une bonne idée, merci pour ton conseil :)