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

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

307 голосов
/ 17 марта 2009

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

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

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

Ответы [ 6 ]

360 голосов
/ 17 марта 2009

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

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

53 голосов
/ 17 марта 2009

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

21 голосов
/ 26 октября 2016

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

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

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

Примечания:

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

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

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

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

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

Window of the Project Properties on Eclipse

14 голосов
/ 08 февраля 2011

Если вы разработчик 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 $ в быстрое исправление, если щелкнуть правой кнопкой мыши предупреждение или ошибку.

9 голосов
/ 17 марта 2009

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

5 голосов
/ 17 марта 2009

Он говорит компилятору не жаловаться на неэкстернализованную строку и не требует локализации.

...