2010-02-26 2 views
1

Salut: Dans mon Rails ApplicationController j'ai ajouté les méthodes suivantes (à partir des guides de rails guides) pour prendre en charge I8n basé sur les informations d'en-tête http accept language. Existe-t-il un moyen de vérifier si les paramètres régionaux demandés sont disponibles et si ce n'est pas le cas, utilisez les paramètres régionaux par défaut 'english' comme indiqué dans environment.rb? Sinon, la traduction est manquante lorsque des paramètres régionaux inconnus sont utilisés.Rails I8n: Utiliser les paramètres régionaux par défaut lorsque les paramètres régionaux demandés (à partir de l'en-tête HTTP) ne sont pas disponibles?

def set_locale 
    logger.debug "* Accept-Language: #{request.env['HTTP_ACCEPT_LANGUAGE']}" 
    I18n.locale = extract_locale_from_accept_language_header 
    logger.debug "* Locale set to '#{I18n.locale}'" 
end 

private 

def extract_locale_from_accept_language_header 
    request.env['HTTP_ACCEPT_LANGUAGE'].scan(/^[a-z]{2}/).first 
end 

Répondre

0

Dans Rails 2.3, vous avez une méthode available_locales disponible dans le module I18n (appelle la même méthode du back-end, comme I18n::Backend::Simple.available_locales).

Si vous êtes encore sur 2.2, vous devez l'implémenter vous-même. Voir: http://guides.rubyonrails.org/i18n.html

+0

J'ai trouvé cela juste à la même seconde;) Voir ma réponse ci-dessus. – Sney

4

Ce que je l'ai fait maintenant est (ne hésitez pas à commenter et publier une version plus rubyish; o)):

def set_locale 
    if (I18n.available_locales.any?{|loc| loc.to_s == extract_locale_from_accept_language_header}) 
    I18n.locale = extract_locale_from_accept_language_header 
    end 
end 

La nouvelle locale est maintenant seulement réglée lorsqu'il est disponible . Mon environnement local par défaut dans environment.rb est: en.

Questions connexes