Автоматическое определение языка браузером - PullRequest
2 голосов
/ 24 ноября 2011

Как я могу определить язык браузера и автоматически отобразить правильно локализованную версию моего сайта Grails в зависимости от этого значения.

Я вставил это в действие Index

Locale locale = new Locale(params.lang)
cookieLocaleResolver.setLocale(request, response, (Locale)
session.getAttribute('locale'))
{  
    render controller: "home", action: "index"
    return             
}

И я получил исключение -

Error 500: Executing action [index] of controller [socialworking.HomeController] caused exception: null
Servlet: grails
URI: /socialworking/grails/home.dispatch
Exception Message:
Caused by:
Class: Unknown

1 Ответ

1 голос
/ 24 ноября 2011

Прежде всего, вы должны поместить это в фильтр в каталоге grails-app / conf. Создайте фильтр, если у вас его еще нет.

MyFilters.groovy

class MyFilters {
    def filters = {
           setLocale(controller:'*', action:'*') {
                 before = {
                       // Your logic here
                 }
           }
    }
}

Ваша логика здесь может выглядеть по-разному, но вот попытка:

String langToSet = 'en';
if ( params.lang && params.lang in validLanguages ) 
     langToSet = params.lang;
else if ( session.lang ) {
     langToSet = session.lang;
}
else if ( ...  ) // Cookie lang is set ( User might have accessed the site before and you have stored their preferred lang )
    // Get cookie lang

Locale locale = new Locale( langToUse)
org.springframework.web.servlet.support.RequestContextUtils.getLocaleResolver(request).setLocale(request, response, locale);

// Set the cookie lang
...
// We set the session lang
session.lang = langToSet

Обратите внимание, что приведенное выше не является полной реализацией, но это почти cookie cookie и validLanguages ​​ вы сможете понять, что они делают.

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...