Что означает $ NON-NLS-1 $?

268

В исходном коде Eclipse я нашел несколько "$ NON-NLS-1 $" в комментариях, используемых так:

private String toolTip = ""; //$NON-NLS-1$

Что это значит?

Теги:
eclipse-rcp

6 ответов

315
Лучший ответ

Они запирают предупреждение о том, что Eclipse испускает, когда он встречает строковые литералы (и был настроен на жалобы).

Идея заключается в том, что сообщения пользовательского интерфейса не должны вставляться в виде строковых литералов, а скорее из файла ресурсов (чтобы они могли быть переведены, проверены и т.д.). Следовательно, Eclipse может быть сконфигурирован для обнаружения строковых литералов, так что вы случайно не оставляете в коде неинтерминированные строки пользовательского интерфейса; однако существуют строки, которые не должны быть экстернализированы (например, регулярные выражения), и поэтому // $NON-NLS-1 $дает вам способ сообщить этот факт компилятору.

  • 1
    Хорошо, так это только на затмении? А как насчет IntelliJ Idea или Netbeans?
  • 0
    Насколько я знаю, это вещь Eclipse, хотя другие IDE, возможно, подхватили ее.
Показать ещё 7 комментариев
47

Строка не может быть переводимой. Он сообщает редактору Eclipse, чтобы он не помещал строку как неназванную. Это важно для многоязычных приложений.

  • 6
    Хорошее объяснение того, почему флаг называется NON NLS (без поддержки национальных языков). Благодарю.
14

Если вы разработчик Android. Все строки, которые пользователь может увидеть, должны находиться в файле ресурсов /res/values/strings.xml, чтобы прочитать файл strings.xml в коде, который вы используете R.string. Добавив тег // $NON-NLS- $, вы отметив, что строка не будет видна пользователям.

Предупреждение в Eclipse Helios можно включить в Window -> preferences -> java -> Compiler -> code style -> "Non-externalized Strings (missing/unused &NON-NLS$ tag).

Если вы планируете программировать свою деятельность на многоязычной основе, рекомендуется включить ее. Затем добавьте тег & NON-NLS $к строкам, которые являются внутренними для вас. Eclipse добавит & NON-NLS $tag в быстрое исправление, если вы щелкните правой кнопкой мыши на предупреждении или ошибке.

12

NON-NLS означает Не - N ациональный L anguage S. Wikipedia предлагает также Non - N ative L anguage S upport (NLS), но этот последний не очень используется.

NLS - это интернационализация вашего приложения. Eclipse поможет найти жестко закодированные строки в вашем коде. Чтобы указать, что строка не является частью интернационализации, добавьте комментарий //$NON-NLS-x$, где x - позиция строки. В следующем примере обе "!" представляют собой жестко закодированные строки, не являющиеся частью интернационализации:

 public String foo(String key) { 
   return "!" + key + "!"; //$NON-NLS-1$ //$NON-NLS-2$ 
 } 

Примечания:

  • ведущий // необходим каждый раз
  • no global $NON-NLS$ для нескольких строк в одной строке
    (например, если ваша строка имеет шесть строк, вы должны написать шесть раз //$NON-NLS-x$)

В книге EMF: Eclipse Modeling Framework на стр. 250 говорится:

Маркеры Non-NLS - Компилятор Eclipse Java имеет возможность отмечать неэкранные строки как предупреждение или ошибку, чтобы облегчить поддержку поддержки национальных языков (NLS). Код, генерируемый EMF, не использует строковые кодированные строки для сообщений, которые пользователь увидит; однако строковые литералы часто появляются, например, в качестве ключей для поиска внешних строк в файле свойств. Это свойство контролирует, включать ли комментарии, которые маркируют эти литералы как непереводимые, так что компилятор не будет их отмечать.

Подробнее см. также страницы Графический генератор и Как сделать Интернационализируйте свой плагин Eclipse.

Вы можете включить/отключить эту функцию. На Eclipse Neon перейдите на страницу Project > Properties > Java Compiler > Errors/Warnings
и выберите поле
Non-externalized strings (missing/unused $NON-NLS$ tag)

Изображение 6736

9

Он используется Eclipse, чтобы указать, что строка не нужно переводить, вероятно, потому, что она не будет видна пользователям приложения.

  • 0
    Некоторые строки не работают должным образом, когда они переведены. Если строка представляет кодировку, тег HTML / XML, регулярное выражение и т. Д., Они могут изменить поведение программы.
5

Он сообщает компилятору, чтобы он не жаловался на неэкранную строку и не требовал локализации.

  • 3
    Я не думаю, что это компилятор, я думаю, что это Eclipse, который жалуется.
  • 6
    Eclipse имеет свой собственный компилятор как часть JDT, который он использует для такого рода вещей. Так что да, это компилятор (компилятор Eclipse в любом случае).

Ещё вопросы

Сообщество Overcoder
Наверх
Меню