В GWT каждый обычно загружает строки i18n с помощью интерфейса как это:
public interface StatusMessage extends Messages {
String error(String username);
:
}
который затем загружает фактические строки из файла StatusMessage.property:
error=User: {0} does not have access to resource
Это - отличное решение, однако мой клиент является непреклонным в своем требовании помещения строк i18n в базе данных, таким образом, они могут быть изменены во времени выполнения (хотя не требование что они быть измененными в реальном времени).
Одно решение состоит в том, чтобы создать асинхронный сервис, который берет идентификатор сообщения и пользовательскую локаль и возвращает строку. Я реализовал это и нахожу это ужасно ужасным (это начинает огромную сумму дополнительной связи с сервером, плюс он делает замену заполнителя свойства скорее сложной).
Таким образом, мой вопрос - это, можете, я некоторым хорошим способом реализую пользовательского поставщика сообщения, который загружает сообщения из бэкенда в одном большом налете (для текущего сеанса пользователя). Если бы это может также сцепиться в механизм сообщений GWT по умолчанию, то я был бы абсолютно счастлив (т.е. таким образом, я могу создать интерфейс как вышеупомянутый и продолжать использовать хорошее {0}, {1}... заменяющий формат свойства).
Другие предложения для чистой базы данных управляемые сообщения в GWT также приветствуются.
Встроенный в GWT класс Dictionary - лучший способ двигаться вперед. Вот официальная документация о том, как его использовать.
Допустим, ваше приложение имеет 500 сообщений на локаль, в среднем 60 символов в сообщении. Я бы не стал дважды думать о загрузке всего этого, когда пользователь входит в систему или выбирает свой язык: это <50 КБ данных и не должно быть проблемой, если вы можете предположить, что широкополосное соединение доступно ... ваше предложение «одним махом». Я уже делаю это в одном приложении GWT, хотя это не сообщения, а свойства, которые читаются из базы данных.
Я думаю, что вы можете найти эту статью полезной: http://googlewebtoolkit.blogspot.com/2010/02/putting-test-data-in-its-place.html?utm_source=feedburner&utm_medium=feed&utm_campaign=Feed:+blogspot/NWLT+(Google+Web+Toolkit+Blog)&utm_content=Google+Reader
Что можно сделать, так это настроить TextResource, а затем вы можете просто изменить текст во время выполнения. Я не пробовал это, но я очень уверен, что это сработает.