Афоризм
Хрен, положенный на мнение окружающих, обеспечивает спокойную и счастливую жизнь.
Фаина Раневская
Последние статьи

 • Активности Android
Многоэкранные Android приложения
 • Fragment dynamic
Динамическая загрузка фрагментов в Android
 • Fragment lifecycle
Жизненный цикл Fragment'ов в Android
 • Fragment example
Пример Fragment'ов в Android
 • Data Binding
Описание и пример Data Binding
 • Пример MVVM
Пример использования MVVM в Android
 • Компонент TreeTable
Описание компонента TreeTable для Swing
 • Пример TreeTable
Пример использования TreeTable
 • Хранилища Android
Внутренние и внешние хранилища данных
 • Пример SQLite
Пример использования SQLite в Android
 • WebSocket
Описание и пример реализации WebSocket
 • Визуальные компоненты
Улучшен компонент выбора даты из календаря
 • Анимация jQuery
Описание и примеры анимации элементов DOM
 • APK-файл Android
Создание apk-файла для android устройств, .dex файлы
 • платформа JaBricks
Платформа OSGi-приложения JaBricks
Поддержка проекта

Если Вам сайт понравился и помог, то будем признательны за Ваш «посильный» вклад в его поддержку и развитие
 • Yandex.Деньги
  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.

Зависимости

Модуль взаимодействует со следующими бандлами :

  • util-resources – модуль ресурсов, хранящий текущий объект локализации Locale
  • gui-widgets – библиотека интерфейсных компонентов;
  • base-jdialog – базовый модуль формирования интерфейса формы.

Подключение модуля form-locale

Для подключения модуля form-locale в приложение JaBricks необходимо :

  • разместить модуль в поддиректории «configuration/bundles/»;
  • внести в файл инициализации бандлов «bundles.ini» запись form-locale-1.0.0.jar;
  • определить пункт меню или/и кнопку панели инструментов, параметрами подключения которых указать GAV значения бандла form-locale.

GAV параметры модуля form-locale имеют следующие значения :

• groupId : org.jabricks.locale
• artifactId: form-locale
• version : 1.0.0

Подробнее о включении модуля в приложение Jabricks представлено здесь.

Скачать form-locale

Рассмотренный на странице модуль form-locale упакован в архивный файл form-locale-1.0.0.zip (18.3 Кб).

  Рейтинг@Mail.ru