2014-02-14 2 views
4

Как установить язык (i18n) не только из настроек браузера пользователей, но также из поддоменов (которые должны иметь более высокий приоритет) в playframework 2.2 (java)?playframework 2.2 java: как установить язык (i18n) из поддомена

должно работать:

  • example.com -> английский или немецкий, в зависимости от настроек браузера
  • en.example.com -> сила английский
  • de.example.com -> force german

Пользователь должен иметь возможность переключаться между субдоменами без потери сеанса.

Поскольку у меня много контроллеров java, было бы замечательно, если решение работает в централизованном месте (например, Global.java с фильтром, который может быть в scala).

ответ

4

Вы можете использовать i.e. changeLang(String code) метод play.mvc.Controller суперкласс для этого.

Затем вам нужно сообщить своему распознавателю языка, в каком домене используется какой-либо язык по умолчанию, probebly с использованием application.conf или записей базы данных для этого. Далее, в зависимости от того, чего вы хотите достичь, просто используйте глобальный класс для перехвата всего вашего запроса или создайте простое действие, которое изменит язык, и они вернутся на одну страницу (так что пользователь может решить, какой язык он хочет использовать) ,

Это какой-то маханизм, основанный на файлах cookie, поэтому я не уверен, что это не требуется для принудительной перезагрузки страницы (т. Е. Путем перенаправления на один и тот же путь). В любом случае, я предполагаю, что вы скажете нам, LL проверить его;)

Edit:

, что может быть есть. как

public Action onRequest(final Http.Request request, final Method actionMethod) { 

    if (request.host().equals("de.yourdomain.tld") 
      && (request.cookie("PLAY_LANG") == null || !request.cookie("PLAY_LANG").value().equals("de"))) { 
     return new Action.Simple() { 
      public Result call(Http.Context ctx) throws Throwable { 
       ctx.changeLang("de"); 
       return redirect(request.path()); 
      } 
     }; 
    } else { 
     return super.onRequest(request, actionMethod); 
    } 
} 

Просто убедитесь, что у вас есть de языки добавлены в application.conf, в противном случае вы получите красивый, бесконечный цикл перенаправления. PLAY_LANG является типичным именем cookie Play для хранения выбранного языка.

+1

Но как изменить язык из глобального класса и java? Я даже не вижу, как я могу установить cookie в onRequest. Эти вещи должны быть действительно легкими в веб-фреймворке ... –

+0

Отметьте мое редактирование ... Это написано сверху, поэтому, пожалуйста, проверьте его самостоятельно на предмет ошибок – biesior

Смежные вопросы