Я хочу реализовать поддержку i18n для приложения калитки 7.Wicket7: интернационализация и доступ к базе данных
Требования:
- Переводы должны быть легко доступны для редактирования администратора пользователем
- Переводы должны проходить без передислокации
Мой фактический apporach является проведение переводов внутри БД. Все переводы будут кэшироваться. Если перевод изменен с помощью Frontend-задачи, кэш и db будут обновляться. До сих пор так легко.
Фактически я застрял в замене переводов внутри страницы. Рабочее решение будет загружать каждый перевод во время реализации. Эти переводы будут установлены во многих элементах калитки. Мне не нравится этот подход, потому что он сильно испортит код (html + java).
Я попытаюсь реализовать механизм замены в моем действительном подходе. После того, как страница отображается, механизм проходит через всю страницу и делает эти работы:
- поиск всех заполнителей
- нагрузочных перевод для заполнителей-ключей (кэш)
- заменить заполнители с переводами
Это должно работать для тела и заголовка (название сайта)
Вот пример калитки-шаблон
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>${landingpage.site.title}</title>
</head>
<body>
<header wicket:id="headerPanel">header</header>
${welcome.message}
<footer wicket:id="footerPanel">footer</footer>
</body>
</html>
В этом случае следует признать и заменить $ {landingpage.site.title} и $ {welcome.message}. Как видите, он напрямую определяется внутри шаблона, а не в java-коде. И этого я хочу достичь.
Надеюсь, я сформулировал требования достаточно четко. Если нет, не против комментировать. Я уточню вопрос, чтобы сделать его более понятным.
Мой подход заключается в реализации BasePage (расширяет страницу) и перезаписать onAfterRender-метод
@Override
protected void onAfterRender() {
super.onAfterRender();
Response originalResponse = RequestCycle.get().getResponse();
String updatedResponse = replaceWithTranslations(originalResponse);
originalResponse.reset();
originalResponse.write(updatedResponse);
}
метод replaceWithTranslations еще не реализованы и возвращает простой строки на самом деле. Этот метод должен преобразовывать выходной поток исходного Repsonse в String, ищет заполнители и заменяет их значениями db.
Этот подход, кажется, есть 2 проблемы:
- Я не получаю ответ в виде строки
- Я получаю WicketRuntimeException (Page.checkRendering в Page.java:666)
Любые советы были бы замечательными!
Почему вы не используете подход Wicket i18n? С '' и т. Д.? (См .: https://ci.apache.org/projects/wicket/guide/7.x/guide/i18n.html) –
RobAu
Первое чтение этой статьи заставило меня почувствовать себя сумасшедшим. Все шаблоны испорчены с помощью. И описаны только локализованные файлы свойств. На другом веб-сайте я читал: калитка не может обрабатывать другие входы. К настоящему времени я знаю, что эта информация - мусор. Спасибо за ваше внимание! Можете ли вы посмотреть на решение ниже, если это так? –
Mike