Администрирование международных заявок на калитки - PullRequest
3 голосов
/ 28 февраля 2011

Есть ли хороший / правильный способ поддерживать / администрировать интернационализацию приложения Wicket?

На данный момент есть несколько * .properties-файлов с переводами в них, как вы делаете это в Wicket. Можете ли вы получить к ним доступ во время выполнения и изменить значения, чтобы изменения происходили без перезапуска приложения?

(Другой способ - сохранить значения в базе данных, но я пока оставлю это.)

Ответы [ 2 ]

4 голосов
/ 06 марта 2011

Вы можете написать собственную реализацию IStringResourceLoader и зарегистрировать ее в своем приложении следующим образом:

getApplication().getResourceSettings().addStringResourceLoader(  
                                                     new CustomResourceLoader());

Ваш загрузчик ресурсов должен получить ресурсы из какого-либо места вне файла WAR, чтобы администратор мог изменить его, как это предложил Аарон Дигулла.

Чтобы заставить Wicket забирать модификации во время выполнения, вы должны настроить параметры своего ресурса следующим образом:

getApplication().getResourceSettings().setResourcePollFrequency( 
                                                           Duration.seconds(1));
1 голос
/ 28 февраля 2011

Мне известно о любом существующем решении, но вот некоторые идеи, которые у нас были:

  • Храните переводы в каталоге вне приложения. Таким образом, они не попадут в файлы JAR, поэтому вы можете изменить их во время выполнения.
  • Убедитесь, что пакеты ресурсов можно обновить (например, с помощью шины событий или прослушивателя, который можно вызывать при изменении текста)
  • Добавить "режим перевода" в приложение. Немного JavaScript и тщательный дизайн HTML позволят сделать каждый текст из пакета ресурсов «редактируемым», нажав на него. Используйте AJAX, чтобы отправить событие изменения обратно на сервер и обновить пакет ресурсов.

    Таким образом, переводчики могут выполнять свою работу в действующей системе, чтобы они могли видеть онлайн , что необходимо изменить (вы можете дать текстам класс CSS в зависимости от того, были ли они или должны быть) перевод) и как выглядит перевод и т. д.

[EDIT]

Я имею в виду вне файла WAR . В противном случае вам нужно будет заново создавать WAR каждый раз, когда изменяется перевод.

Кроме того, вы можете поместить файлы свойств в WEB-INF / classes (вместе с обычными файлами классов) и использовать небольшой скрипт для замены файлов в WAR.

В сценарии пакетной обработки / оболочки используйте jar -u для замены существующих файлов. В ant используйте старый файл WAR в качестве источника через zipfileset, сначала добавьте новые файлы и используйте duplicate="preserve".

Таким образом, вам не нужно снова сжимать весь файл.

...