GWT - интернационализация свойств объекта - PullRequest
1 голос
/ 14 декабря 2010

Я ищу элегантное решение для следующей проблемы:

В моей базе данных есть несколько предопределенных (!) Сущностей.Эти сущности имеют имена и описания (строки).Вокруг уровня доступа к данным есть несколько EJB-компонентов, содержащих бизнес-логику для загрузки / поиска / etc.эти сущности.

Теперь для веб-интерфейса мы разрабатываем приложение GWT, которое вызывает методы EJB на нашем бэкэнде.

Проблема в том, что имя и описание сущностей, упомянутых вышедолжен быть интернационализирован - например, в зависимости от локали пользователя, описание сущности должно быть «Моё классное описание» (на английском языке) или «Beschreibung bla» (на немецком языке) или как угодно:)

Мой первый подход состоял в использованииСтрока ресурса в базе данных.Таким образом, сущность A имеет описание «descriptionA», сущность B имеет описание «descriptionB» ... Позже приложение GWT (или любой другой клиент) преобразует эту строку ресурса в фактическое описание, используя своего рода «пакет ресурсов».Например:

* resources_en.properties *:

descriptionA = Фактическое описание объекта A

descriptionB = Фактическое описание объекта B

* resources_de.properties*:

descriptionA = Beschreibung A

descriptionB = Beschreibung B

(Помните, что сущности предопределены, поэтому можно «знать» все описания во время компиляции. НОбыло бы лучше, если бы пакет ресурсов мог быть улучшен без перекомпиляции приложения).

Возможно ли это с GWT?Как я могу это сделать?Лучше ли «переводить» на сервере или на стороне клиента?

В противном случае мне придется иметь дело со всем этим i18n на стороне сервера.Что ж, это позволило бы хранить данные вместе (вместо определения описаний на стороне клиента).Но большой недостаток заключается в том, что бэкэнд должен знать локали вызывающего.

С уважением, Фрэнк

Ответы [ 2 ]

0 голосов
/ 14 декабря 2010

Все возможно для тех, кто пытается ...

Вернуться к вашему вопросу: есть несколько способов решить вашу проблему.Можно было бы представить какой-нибудь фасад i18n и рассматривать ваши описания и имена как ключи ресурсов.Затем вы можете определить удобные методы для доступа к переводам, например public String translate(String message, Locale locale);.Этот метод может использовать стандартный класс Java ResourceBundle для доступа к ресурсам во время выполнения.

Единственная реальная проблема, которую я вижу, - это как работать с составными сообщениями (т. Е. «Blah, blah 4 items», где 4 - заполнитель).Итак, что мы сделали в одном проекте в аналогичной ситуации, мы добавили разделитель и фактический ключ ресурса, а затем еще один разделитель и посчитали: «Бла, бла 4 элемента ## items.in.your.wh независимо ## 4».В случае английского языка вы можете просто обрезать первую часть, а для других языков вам потребуется обработать всю строку.

0 голосов
/ 14 декабря 2010

Это в основном решение между временем загрузки / скоростью и гибкостью. Если вы скомпилируете его, GWT встроит сообщения и сможет сгенерировать немного более быстрый код, потому что поиск строки не требуется. Однако, если вам нужно внести изменения и не хотите перекомпилировать или хотите, чтобы пользователи могли динамически изменять сообщения, вам нужны динамические сообщения.

Что касается последнего случая, класс Dictionary может вам помочь, см. Также: http://code.google.com/webtoolkit/doc/latest/DevGuideI18n.html#DevGuideDynamicStringInternationalization С помощью словаря вы генерируете все сообщения на статической странице, предоставляемые пользователю. Языковой стандарт пользователей можно найти в заголовке Accept-Language , который отправляется браузером при запросе страницы.

В любом случае (скомпилированный или динамический) может потребоваться указать языковой стандарт, заданный пользователем в каком-либо свойстве конфигурации, и в этом случае вам все еще нужна логика в обоих случаях на стороне сервера для предоставления языкового стандарта пользователю. 1011 *

...