Возможно ли иметь более одного файла сообщений в платформе Play - PullRequest
5 голосов
/ 12 декабря 2011

У нас есть сайт, который будет использоваться для двух разных клиентов. При первом запросе пользователю будет предложено выбрать клиента. На основе этого текста должны отображаться ярлыки и контент сайта.

Возможно ли иметь в файле Play два файла сообщений, и во время запуска сеанса будет решен файл сообщений

Начиная с моего исследования, у нас может быть больше файла для каждой локали, сообщения будут получать в зависимости от локали в запросе.

Ответы [ 4 ]

4 голосов
/ 12 декабря 2011

Нет, в данный момент не поддерживается.Вы можете легко сделать это либо в плагине ( Посмотрите на MessagesPlugin ), либо даже используя загрузочное задание с аннотацией @onApplicationStartup

// From MessagesPlugin.java

//default languange messages
VirtualFile appDM = Play.getVirtualFile("conf/messages");
if(appDM != null && appDM.exists()) {
    Messages.defaults.putAll(read(appDM));
}

static Properties read(VirtualFile vf) {
    if (vf != null) {
        return IO.readUtf8Properties(vf.inputstream());
    }
    return null;
}
1 голос
/ 14 декабря 2011

Решил эту проблему с помощью нижеприведенного решения,

  1. Создан класс MessagesPlugIn, расширяющий play.i18n.MessagesPlugin
  2. Создан класс Messages как play.i18n.Messages
  3. Имел статическую карту messaagesByClientID в Messages.java
  4. Переопределено onApplicationStart() в MessagesPlugIn
  5. Загружены свойства в messaagesByClientID как locales, загруженные в play.i18n.MessagesPlugin
  6. Имеет метод get() в Messages.java, извлекает свойство из messaagesByClientID на основе ClientId в сеансе. Если объект недоступен, звоните get() в play.i18n.Messages

7.Создал пользовательский тег il8nTag и использовал его в шаблонах HTML. il8nTag вызовет методы в Messages.get().

1 голос
/ 12 декабря 2011

Вы можете написать свой собственный PlayPlugin и обрабатывать орудие play.PlayPlugin.getMessage(String, Object, Object...). Тогда вы можете выбрать правильный файл. Класс play.i18n.Messages может быть использован как вдохновение для реализации метода.

0 голосов
/ 01 апреля 2015

Создайте свой собственный Module на основе play.api.i18n.I18nModule, но привязанный к вашей собственной реализации MessagesApi, на основе DefaultMessagesApi ( здесь )это часть, определяющая файлы для загрузки)

Затем в application.conf, отключите Play's play.api.i18n.I18nModule и включите свой собственный модуль.

...