2009-10-14 7 views
21

Comment puis-je modifier les paramètres régionaux actuels?Grails comment changer les paramètres régionaux actuels

  • J'ai essayé de mettre controller/action?lang=de mais mon locale est encore en_US
  • J'ai essayé de remplacer la valeur en utilisant ce morceau de code:

    def key = "org.springframework.web.servlet.DispatcherServlet.LOCALE_RESOLVER" 
    def localeResolver = request.getAttribute(key) 
    localeResolver.setLocale(request, response, new Locale("de","DE")) 
    

Rien n'a changé.

  • J'ai essayé de remplacer la valeur en utilisant ce morceau de code:

    import org.springframework.web.servlet.support.RequestContextUtils as RCU; 
    RCU.getLocaleResolver(request).setLocale(request, response, new Locale("de","DE")) 
    

Et ... rien ne se passait. mes paramètres régionaux sont toujours définis sur en_US.

Une idée pour changer les paramètres régionaux?

Répondre

25

Selon le chapitre 10. Internationalization de la documentation Grails, Grails prend en charge i18n hors de la boîte et vous devez en effet être en mesure de modifier les paramètres régionaux en utilisant le paramètre lang:

Par défaut les paramètres régionaux utilisateur est détecté à partir du Accept-Language entrant. Cependant, vous pouvez fournir aux utilisateurs la capacité de changer les paramètres régionaux par simplement passer un paramètre appelé lang à Grails comme paramètre de requête:

/book/list?lang=de 

Grails basculeront automatiquement les paramètres régionaux utilisateur et le stocker dans un cookie Par conséquent, les demandes suivantes auront l'en-tête .

Mais parfois vous voudrez peut-être prérégler la langue par défaut car toutes vos applications ne seront pas en anglais. Pour ce faire, tout ce que vous avez à faire est de définir votre localeResolver dans votre fichier de configuration du ressort resources.groovy comme indiqué ci-dessous:

beans = { 
    localeResolver(org.springframework.web.servlet.i18n.SessionLocaleResolver) { 
     defaultLocale = new Locale("de","DE") 
     java.util.Locale.setDefault(defaultLocale) 
    } 
} 

Maintenant, sans plus de détails, je ne peux pas dire pourquoi à l'aide du paramètre lang n'est pas travailler dans votre cas. Juste au cas où, comment savez-vous que les paramètres régionaux sont toujours en_US ?.

+0

Merci pour votre réponse. J'ai essayé votre solution pour changer le defaultLocale mais j'obtiens toujours une locale de en_US. Bonne question pour récupérer mon lieu actuel j'utilise 'request.locale'. Je peux également voir que Grails lit toujours le message de paquet par défaut et pas la version 'de'. Merci pour tous les indices! –

+0

Je voulais juste être sûr que votre processus de validation était correct et c'est :) Mais je dois dire que c'est vraiment bizarre. Pouvez-vous dire si l'en-tête 'Accept-Language' est défini? Quelle version de grails utilisez-vous? –

+0

Oui bizarre est certainement le mot ... J'utilise Grails 1.1. Je viens de vérifier l'en-tête de la requête http et je peux voir: 'Accept-Language: en-us, en; q = 0.5' –

6

Essayez-vous de changer les paramètres régionaux dans l'URL racine de l'application (par exemple http://localhost:8080/myapp/?lang=de)?

Dans l'installation de base de Grails en essayant de changer les paramètres régionaux dans l'application, l'URL racine ne fonctionne pas. Les grils changent les paramètres régionaux au localChangeInterceptor qui est appelé avant que tous les contrôleurs ne soient appelés. Lorsque vous accédez à l'URL de la racine de l'application, aucun contrôleur n'est appelé, comme dans UrlMappings par défaut. C'est pourquoi la modification des paramètres régionaux dans l'URL racine de l'application ne fonctionne pas. Si vous essayez de changer l'URL dans un contrôleur, cela fonctionne.

Les paramètres régionaux actuels sont stockés sous la clé org.springframework.web.servlet.i18n.SessionLocaleResolver.LOCALE_SESSION_ATTRIBUTE_NAME dans la session http. Vous pouvez le vérifier là-bas.

La solution correcte consiste à mapper l'URL racine à un contrôleur dans UrlMappings.

+0

Merci pour votre réponse. Mais oui j'essayais de changer les paramètres régionaux sur un de mon contrôleur et ça n'a pas marché. C'était vraiment bizarre parce que la documentation décrivait le même comportement que ce que vous dites, mais mes paramètres régionaux ne changeaient pas ... alors je construis ma propre fonctionnalité d'internationalisation en utilisant une variable de session pour stocker les paramètres régionaux actuels. –

5

Ceci est problably trop tard, mais pour référence, je le fais dans mon contrôleur de page d'index:

session['org.springframework.web.servlet.i18n.SessionLocaleResolver.LOCALE'] = new Locale("es", "PR") 
5

Pour autant que je comprends la façon dont vous vérifiez les paramètres régionaux « request.locale » est faux, il donne les paramètres régionaux du navigateur, pas la locale de l'application de grails.

Vous devez utiliser "LocaleContextHolder.locale".

Dans 2.0.3 il change les paramètres régionaux en passant simplement le paramètre lang=someLocale.

+1

Merci pour votre explication, cela a du sens. –

1

J'ai eu un problème similaire, et c'était parce qu'un espace. J'avais:

[space]messages_de.properties au lieu messages_de.properties

0

J'ai eu un problème avec ce quelque temps en arrière quand-ing proxy par une ancienne version de Apache2.2 et en utilisant les Grails (2.3.9) fichier de guerre. J'ai eu plus de chance en utilisant mod_proxy_html (3.1)/Apache 2.4. Peut-être que des versions plus avancées de grails corrigent cela.

Questions connexes