Интернационализация Struts2 с использованием базы данных - PullRequest
5 голосов
/ 06 февраля 2011

У нас довольно большое приложение с большим количеством динамического контента.Есть ли способ заставить распоряжения использовать базу данных для поиска i18n вместо файлов свойств?

Я был бы открыт и для других способов решения этой проблемы, если бы кто-нибудь когда-либо делал i18n с динамическим контентом.

Ответы [ 4 ]

4 голосов
/ 07 февраля 2011

Я не знаю простого решения «подключи и работай» для этого, поэтому вам, вероятно, придется реализовать его самостоятельно - планируйте потратить немало времени, просто разбираясь с особенностями локализации распорок.2 (и XWork) реализованы.Ключ, вероятно, будет заключаться в том, чтобы предоставить собственную реализацию com.opensymphony.xwork2.TextProvider (и указать стойкам, чтобы использовать ее, предоставив тег в struts.xml).Я могу придумать как минимум два способа вписать это в общую архитектуру:

  • Пусть ваша реализация TextProvider получит прямой доступ к базе данных.В духе YAGNI, это, вероятно, лучший способ начать (вы всегда можете выполнить рефакторинг позже, если необходимо).

  • В качестве альтернативы, вы можете поместить код базы данных в реализацию Java. ResourceBundle интерфейс, который XWork использует для внутреннего использования.Для меня это звучит как еще более сложный подход, но с положительной стороны есть статьи вокруг , описывающие, как это сделать.

2 голосов
/ 06 февраля 2011

Нет, не существует встроенного способа, чтобы Struts2 загружал локализованный контент из базы данных. Вы должны написать это сами.

Каковы ваши требования? Вам нужно, чтобы пользователи могли динамически изменять полевые подсказки, сообщения об ошибках и т. Д .?

0 голосов
/ 06 февраля 2011

Используйте файлы свойств только для статического содержимого, такого как ярлыки, сообщения и т. Д.

Для динамического содержимого начните с таблицы базы данных, которая содержит код языка для каждого языка, который вы хотите использовать.Все записи динамического содержимого, которые уже переведены, идут с соответствующим идентификатором кода языка, добавленным к их первичному ключу.Если перевод отсутствует, вы можете запрограммировать ваше приложение на использование языка по умолчанию, чтобы упростить процесс до тех пор, пока не будет найден правильный перевод.

Пусть ваши пользователи предоставляют свои материалы на том языке, который им нравится, и сохраняют его с соответствующим идентификатором языка.Кто-то должен предоставить перевод на другие языки, чтобы завершить вклад.

...
PRIMARY KEY  (`subject_id`,`language_id`),
...
0 голосов
/ 06 февраля 2011

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

Создание собственного перехватчика не слишком сложно. Существует множество обучающих сайтов, в том числе (готовьтесь к саморекламе) мой блог: http://ddubbya.blogspot.com/2011/01/creating-custom-struts2-interceptors.html.

...