2009-10-14 13 views
21

Jak zmienić bieżące ustawienia regionalne?Grails, jak zmienić bieżące ustawienia regionalne

  • próbowałem umieścić controller/action?lang=de ale mój locale jest nadal en_US
  • Próbowałem przesłonić wartość za ten kawałek kodu:

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

nic się nie zmieniło.

  • Próbowałem przesłonić wartość za ten kawałek kodu:

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

I ... nic się nie stało. nadal mam ustawiony język ustawiony na en_US.

Masz pomysł na zmianę ustawień regionalnych?

Odpowiedz

25

Według rozdziału 10. Internationalization dokumentacji Grails, Grails obsługuje i18n po wyjęciu z pudełka i powinno rzeczywiście być w stanie zmienić ustawienia regionalne pomocą parametru lang:

Domyślnie locale użytkownik zostanie wykryty z przychodzącego nagłówka Accept-Language . Można jednak zapewnić użytkownikom możliwość przełączania ustawień regionalnych przez prostu przekazując parametr zwany lang do Grails jako parametr żądanie:

/book/list?lang=de 

Grails automatycznie przełączyć ustawienia regionalne użytkownika i zapisać go w pliku cookie więc kolejne żądania będą miały nowy nagłówek .

Czasami jednak możesz chcieć ustawić domyślny język, ponieważ nie wszystkie aplikacje będą w języku angielskim. Aby to zrobić, wszystko co musisz zrobić, to ustawić swój localeResolver w pliku konfiguracyjnym resources.groovy sprężyny jak pokazano poniżej:

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

Teraz bez więcej szczegółów, nie mogę powiedzieć, dlaczego przy użyciu parametru lang nie jest działa w twoim przypadku. Na wszelki wypadek, skąd wiadomo, że ustawienia regionalne to nadal en_US ?.

+0

Dzięki za odpowiedź. Próbowałem Twojego rozwiązania, aby zmienić defaultLocale, ale nadal dostaję ustawienia regionalne en_US. Dobre pytanie, aby odzyskać moje aktualne ustawienia narodowe Używam "request.locale". Mogę też zobaczyć, że grails wciąż czyta domyślny komunikat o pakiecie, a nie wersję "de". Dzięki za wszelkie wskazówki! –

+0

Chciałem tylko upewnić się, że proces sprawdzania poprawności był w porządku i jest :) Ale muszę przyznać, że to naprawdę dziwne. Czy możesz powiedzieć, czy ustawiony jest nagłówek 'Accept-Language'? Jakiej wersji grails używasz? –

+0

Tak, dziwne jest zdecydowanie słowo ... Używam Grails 1.1. Właśnie sprawdziłem nagłówek żądania http i widzę: "Accept-Language: en-us, en; q = 0.5 ' –

6

Czy próbujesz zmienić lokalizację w głównym katalogu aplikacji (np. http://localhost:8080/myapp/?lang=de)?

W podstawowej konfiguracji Grailsa próba zmiany lokalizacji w głównym katalogu aplikacji nie działa. Grails zmieniają ustawienia narodowe w localChangeInterceptor, które są wywoływane przed wywołaniem wszystkich kontrolerów. Kiedy uzyskujesz dostęp do głównego adresu URL aplikacji, żaden kontroler nie jest wywoływany, jak można zobaczyć w domyślnych UrlMapowaniach.

Dlatego zmiana ustawień narodowych w głównym adresie URL aplikacji nie działa. Jeśli spróbujesz zmienić adres URL w jakimś kontrolerze, to działa.

Bieżące ustawienia regionalne są przechowywane pod kluczem org.springframework.web.servlet.i18n.SessionLocaleResolver.LOCALE_SESSION_ATTRIBUTE_NAME w sesji http. Możesz to sprawdzić.

Prawidłowe rozwiązanie polega na odwzorowaniu adresu roota na kontroler w UrlMappings.

+0

Dzięki za odpowiedź. Ale tak, próbowałem zmienić ustawienia regionalne na jednym z kontrolerów i to nie działało. To było naprawdę dziwne, ponieważ dokumentacja opisywała to samo zachowanie, co mówisz, ale moje ustawienia regionalne się nie zmieniały ... więc tworzę własną funkcję internacjonalizacji używając zmiennej sesji do przechowywania bieżących ustawień narodowych. –

5

to problably zbyt późno, ale w celach informacyjnych, zrobić to w moim kontroler widoku indeksu:

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

O ile mi zrozumieć sposób, w jaki są sprawdzanie lokalizacji „request.locale” jest źle, podaje lokalnie przeglądarkę, a nie lokalizację apletu grails.

Powinieneś użyć "LocaleContextHolder.locale".

W 2.0.3 zmienia ustawienia regionalne po prostu przekazując parametr lang=someLocale.

+1

Dzięki za wyjaśnienie, to ma sens. –

1

Miałem podobny problem, a to dlatego, że spacja. Miałem:

[space]messages_de.properties zamiast messages_de.properties

0

miałem problem z tym jakiś czas temu, gdy proxy-ing przez starszą wersją Apache2.2 i przy użyciu grails (2.3.9) plik war. Mam więcej szczęścia przy użyciu mod_proxy_html (3.1)/Apache 2.4. Być może naprawiają to bardziej zaawansowane wersje grails.

Powiązane problemy