Настройка экстернализации строк в Eclipse для использования ${key} в качестве имени поля

Предположим, у меня есть простой код, подобный этому:

public class ExternalizeStringDemo {
    public static void main(String[] args) {
        System.out.println("Hello world");
    }
}

Теперь я хочу передать приветствие, возможно, для облегчения интернационализации / локализации / и т.д. Используя Eclipse, я могу использовать мастер экстернализации строк (Source/Externalize Strings) и настроить его следующим образом:

альтернативный текст

Я могу продолжить работу с мастером, и он предложит следующие изменения:

  • Создать файл Personal Toys/src/Messages.java
  • Создать файл Personal Toys/src/messages.properties
  • редактировать ExternalizeStringDemo.java
    • "Hello World" становится Messages.getString("DEMO_GREETING")

Мой вопрос прост: могу ли я попросить Eclipse вывести доступ к внешнему ключу для использования ключа вместо имен полей? То есть я хочу чтобы доступ был например Messages.DEMO_GREETING,

Примечание: если [Substitution pattern] это просто ${key}, то сгенерированный код Messages."DEMO_GREETING", который не является допустимым кодом Java.


Если это невозможно, то что будет дальше? (Я думаю, что Eclipse Regex найти / заменить?).

1 ответ

Eclipse имеет новый механизм экстернализации строк, который делает именно это; он использует свой собственный новый пакет сообщений вместо Java. Вы должны включить org.eclipse.osgi….jar в пути сборки вашего проекта, чтобы использовать его.

help.eclipse.org - Руководство пользователя по разработке Java> Справка> Мастера и диалоги> Мастер Externalize Strings

  • Использовать механизм экстернализации строк Eclipse
    • Если этот флажок не установлен, используется стандартный механизм экстернализации, в противном случае используется новый механизм экстернализации строк Eclipse.
    • Примечание. Представляется только в том случае, если путь сборки проекта содержит org.eclipse.osgi.util.NLS

До и после показано в документации по функциям:

Старый код:

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[] {"example usage"}
        ); //$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, "example usage"); //$NON-NLS-1$
      ...
   }
}

Скриншоты

Настройка:

альтернативный текст

Тогда предложенные изменения:

альтернативный текст

Ссылки по теме

Другие вопросы по тегам