Комплекты сообщений в Eclipse 3.1

Описание

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

Обзор нового подхода:

При создании нового сообщения:

Примеры файлов:

Код клиента

Прежний код:

public class MyClass {
  public void myMethod() {
    String message;
    ...
    // no args
    message = Messages.getString("key.one"); //$NON-NLS-1$
    ...
    // bind one arg
    message = MessageFormat.format(Messages.getString("key.two"), new Object[] {"пример-формата"}); //$NON-NLS-1$ //$NON-NLS-2$
    ...
  }
}

Новый код:

public class MyClass {
  public void myMethod() {
    String message;
    ...
    // no args
    message = Messages.key_one;
    ...
    // bind one arg
    message = NLS.bind(Messages.key_two, "пример-формата"); //$NON-NLS-1$
    ...
  }
}

Messages.java

Прежний код:

public class Messages {
  private static final String ИМЯ-КОМПЛЕКТА = "org.eclipse.core.utils.messages"; //$NON-NLS-1$
  private static final ResourceBundle bundle = ResourceBundle.getBundle(ИМЯ-КОМПЛЕКТА);
   
  public static String getString(String key) {
  try {
      return bundle.getString(key);
    } catch (MissingResourceException e) {
      return key;
    }
  }
}

Новый код:

import org.eclipse.osgi.util.NLS;
public class Messages extends NLS {
  private static final String ИМЯ-КОМПЛЕКТА = "org.eclipse.core.utils.messages"; //$NON-NLS-1$
   
  public static String key_one;
  public static String key_two;
  ...
  static {
    NLS.initializeMessages(ИМЯ-КОМПЛЕКТА, Messages.class);
  }
}

messages.properties

Прежний код:

key.one = Hello world.
key.two = This is an {0} of binding with one argument.

Новый код:

key_one = Hello world.
key_two = This is an {0} of binding with one argument.