Администрирование интернационализированных приложений калитки

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

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

(Еще один способ — сохранить значения в базе данных, но я пока оставлю это.)


person rotsch    schedule 28.02.2011    source источник
comment
Не уверен, что ваш вопрос. Но ЕСЛИ вы хотите изменить текст во время выполнения, вам подойдет БД.   -  person bert    schedule 28.02.2011


Ответы (2)


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

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

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

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

getApplication().getResourceSettings().setResourcePollFrequency( 
                                                           Duration.seconds(1));
person Thomas    schedule 06.03.2011

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

  • Храните переводы в каталоге вне приложения. Таким образом, они не попадут в файлы JAR, поэтому вы сможете изменить их во время выполнения.

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

  • Добавьте режим перевода в приложение. С небольшим количеством JavaScript и тщательным дизайном HTML можно сделать каждый текст из набора ресурсов доступным для редактирования, щелкнув по нему. Используйте AJAX, чтобы отправить событие изменения обратно на сервер и обновить пакет ресурсов.

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

[ИЗМЕНИТЬ]

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

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

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

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

person Aaron Digulla    schedule 28.02.2011
comment
спасибо, режим перевода звучит очень сложно и превосходит мои текущие потребности :) о сохранении файлов свойств вне приложения ... вы имеете в виду вне каталога класса? нет файла jar, только файл войны, который я развертываю... - person rotsch; 28.02.2011
comment
Не помещайте ресурсы в файлы JAR в WEB-INF/lib/. - person Aaron Digulla; 28.02.2011