410013796724260
• Webmoney
R335386147728
Z369087728698
Перейти к списку бандлов
Модуль управления локализациейМодуль form-locale предназначен для управления локализацией OSGi-приложения. Графический интерфейс модуля позволяет выбрать язык локализации и отправить «подписчикам» сообщение о смене Locale. Смена языка локализации интерфейса OSGi-приложения может быть выполнена в режиме run-time. Графический интерфейс формыЛокализованный графический интерфейс модуля form-locale создан с использованием библиотек SWING. Форма включает группу из трех радиокнопок, определяющих возможные языки локализации и обозначенные соответствующими национальными флагами. ![]() Форма модуля открывается при старте бандла form-locale, т.е. при переводе модуля в состояние ACTIVE. Активатор бандла при старте получает значение языка локализации в модуле ресурсов, формирует интерфейс формы модуля согласно текущей Locale и устанавливает активность соответствующей радиокнопки. После изменения языка локализации и нажатии на кнопку OK модуль отправляет всем подписавшимся бандлам сообщение jabricks/LocaleEvent с обновленным объектом локализации Locale и форма закрывается. Локализация формыИнтерфейс формы локализован для трех языков. В формы локализованы заголовок, наименования радиокнопок и кнопки управления. ![]() Подписка на локализацию интерфейса формНа рассылаемые модулем form-locale сообщения об изменении языка локализации OSGi-приложения можно «подписаться». Это позволяет в режиме run-time без «перезагрузки» графических форм приложения перевести их на другой язык локализации. Для подписки на рассылаемое сообщение jabricks/LocaleEvent необходимо подготовить соответствующий обработчик. Следующий код описывает класс LocaleSubscriber, реализующий интерфейс EventHandler. Конструктор класса в качестве параметра получает некая форма типа MyForm, у которого имеется метод changeLocale(Locale). Переопределенный метод handleEvent класса LocaleSubscriber будет вызываться каждый раз, как только кто-либо отправит соответствующее сообщение. После получения значения новой Locale вызывается метод changeLocale смены языка локализации формы MyForm. Листинг обработчика сообщения
import java.util.Locale; import org.osgi.service.event.Event; import org.osgi.service.event.EventHandler; public class LocaleSubscriber implements EventHandler { private MyForm form; //--------------------------------------------------------------- public LocaleSubscriber (MyForm form) { this.form = form; } //--------------------------------------------------------------- /** * Обработчик события */ @Override public void handleEvent(Event event) { Locale locale = null; for (String propertyName : event.getPropertyNames()) { // Проверка свойства if (propertyName.equalsIgnoreCase("locale")) { // Извлекаем передаваемую в событии Locale locale = (Locale) event.getProperty(propertyName); break; } } // Смена языка локализации интерфейса формы if ((form != null) && (locale != null)) form.changeLocale(locale); } } Подписка на рассылку сообщенияСледующий код демонстрирует подписку на рассылаемое сообщение в активаторе бандла. Сначала при старте бандла определяется текущий язык локализации и создается графический интерфейс формы MyForm. После этого выполняется код подписки, который создает соответствующий обработчик.
public class MyActivator implements BundleActivator { private MyForm form = null; private BundleContext context = null; private ServiceRegistration<?> svc_locale; private String EVENT_TOPIC_locale = "jabricks/LocaleEvent"; //--------------------------------------------------------------- public void start(final BundleContext context) throws Exception { this.context = context; JFrame.setDefaultLookAndFeelDecorated(true); IResources resources = new ResourcesImpl(); form = new MyForm(context, resources.getLocale()); form.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent we) { form.setVisible(false); try { // Останов бандла context.getBundle().stop(); } catch (Exception e) { e.printStackTrace(); } } }); form.repaint(); // Открытие окна form.setVisible(true); // Подписка на событие Dictionary<String, Object> dict; dict = new Hashtable<String, Object>(); dict.put(EventConstants.EVENT_TOPIC, EVENT_TOPIC_locale); LocaleSubscriber subscriber = new LocaleSubscriber(form); svc_locale = context.registerService( EventHandler.class.getName(), subscriber, dict); } public void stop(BundleContext context) throws Exception { if (svc_locale != null) { svc_locale.unregister(); svc_locale = null; } } } Примечание : при закрытии формы вызывается метод активатора бандла stop, в котором сервис регистрации необходимо обнулить. Действующий пример механизма публикации и подписки в OSGi приложениях рассмотрен на странице osgi-pubsub.xhtml. ЗависимостиМодуль взаимодействует со следующими бандлами :
Подключение модуля form-localeДля подключения модуля form-locale в приложение JaBricks необходимо :
GAV параметры модуля form-locale имеют следующие значения :
Подробнее о включении модуля в приложение Jabricks представлено здесь. Скачать form-localeРассмотренный на странице модуль form-locale упакован в архивный файл form-locale-1.0.0.zip (18.3 Кб). |